aboutsummaryrefslogtreecommitdiff
path: root/libstdc++-v3/src
diff options
context:
space:
mode:
authorJonathan Wakely <jwakely.gcc@gmail.com>2009-06-21 14:02:09 +0000
committerJonathan Wakely <redi@gcc.gnu.org>2009-06-21 15:02:09 +0100
commitc910ceff6a0533e34889ef4aa86d19e42cbff123 (patch)
tree8896639da96a35b2386c6cbd32ae840556dcb736 /libstdc++-v3/src
parentf3b57ab07947fb2cd07b0abebdfca7784875bc1a (diff)
downloadgcc-c910ceff6a0533e34889ef4aa86d19e42cbff123.zip
gcc-c910ceff6a0533e34889ef4aa86d19e42cbff123.tar.gz
gcc-c910ceff6a0533e34889ef4aa86d19e42cbff123.tar.bz2
future: New.
2009-06-21 Jonathan Wakely <jwakely.gcc@gmail.com> * include/std/future: New. * include/Makefile.am: Add. * include/Makefile.in: Regenerate. * src/future.cc: New. * src/Makefile.am: Add. * src/Makefile.in: Regenerate. * config/abi/pre/gnu.ver: Add export. * testsuite/30_threads/headers/future/std_c++0x_neg.cc: New. * testsuite/30_threads/headers/future/types_std_c++0x.cc: New. * testsuite/30_threads/packaged_task/cons/1.cc: New. * testsuite/30_threads/packaged_task/cons/2.cc: New. * testsuite/30_threads/packaged_task/cons/assign_neg.cc: New. * testsuite/30_threads/packaged_task/cons/copy_neg.cc: New. * testsuite/30_threads/packaged_task/cons/move_assign.cc: New. * testsuite/30_threads/packaged_task/cons/move.cc: New. * testsuite/30_threads/packaged_task/members/boolconv.cc: New. * testsuite/30_threads/packaged_task/members/get_future.cc: New. * testsuite/30_threads/packaged_task/members/get_future2.cc: New. * testsuite/30_threads/packaged_task/members/invoke.cc: New. * testsuite/30_threads/packaged_task/members/invoke2.cc: New. * testsuite/30_threads/packaged_task/members/invoke3.cc: New. * testsuite/30_threads/packaged_task/members/invoke4.cc: New. * testsuite/30_threads/packaged_task/members/invoke5.cc: New. * testsuite/30_threads/packaged_task/members/reset.cc: New. * testsuite/30_threads/packaged_task/members/reset2.cc: New. * testsuite/30_threads/packaged_task/members/swap.cc: New. * testsuite/30_threads/packaged_task/requirements/ explicit_instantiation.cc: New. * testsuite/30_threads/promise/cons/1.cc: New. * testsuite/30_threads/promise/cons/assign_neg.cc: New. * testsuite/30_threads/promise/cons/copy_neg.cc: New. * testsuite/30_threads/promise/cons/move_assign.cc: New. * testsuite/30_threads/promise/cons/move.cc: New. * testsuite/30_threads/promise/members/get_future.cc: New. * testsuite/30_threads/promise/members/get_future2.cc: New. * testsuite/30_threads/promise/members/set_exception.cc: New. * testsuite/30_threads/promise/members/set_exception2.cc: New. * testsuite/30_threads/promise/members/set_value.cc: New. * testsuite/30_threads/promise/members/set_value2.cc: New. * testsuite/30_threads/promise/members/set_value3.cc: New. * testsuite/30_threads/promise/members/swap.cc: New. * testsuite/30_threads/promise/requirements/ explicit_instantiation.cc: New. * testsuite/30_threads/shared_future/cons/assign_neg.cc: New. * testsuite/30_threads/shared_future/cons/copy.cc: New. * testsuite/30_threads/shared_future/cons/default_neg.cc: New. * testsuite/30_threads/shared_future/cons/move.cc: New. * testsuite/30_threads/shared_future/members/get.cc: New. * testsuite/30_threads/shared_future/members/get2.cc: New. * testsuite/30_threads/shared_future/members/has_exception.cc: New. * testsuite/30_threads/shared_future/members/has_value.cc: New. * testsuite/30_threads/shared_future/members/is_ready.cc: New. * testsuite/30_threads/shared_future/members/wait.cc: New. * testsuite/30_threads/shared_future/members/wait_for.cc: New. * testsuite/30_threads/shared_future/members/wait_until.cc: New. * testsuite/30_threads/shared_future/requirements/ explicit_instantiation.cc: New. * testsuite/30_threads/unique_future/cons/assign_neg.cc: New. * testsuite/30_threads/unique_future/cons/copy_neg.cc: New. * testsuite/30_threads/unique_future/cons/default_neg.cc: New. * testsuite/30_threads/unique_future/cons/move.cc: New. * testsuite/30_threads/unique_future/members/get.cc: New. * testsuite/30_threads/unique_future/members/get2.cc: New. * testsuite/30_threads/unique_future/members/has_exception.cc: New. * testsuite/30_threads/unique_future/members/has_value.cc: New. * testsuite/30_threads/unique_future/members/is_ready.cc: New. * testsuite/30_threads/unique_future/members/wait.cc: New. * testsuite/30_threads/unique_future/members/wait_for.cc: New. * testsuite/30_threads/unique_future/members/wait_until.cc: New. * testsuite/30_threads/unique_future/requirements/ explicit_instantiation.cc: New. * testsuite/performance/30_threads/future/polling.cc: New. From-SVN: r148765
Diffstat (limited to 'libstdc++-v3/src')
-rw-r--r--libstdc++-v3/src/Makefile.am6
-rw-r--r--libstdc++-v3/src/Makefile.in17
-rw-r--r--libstdc++-v3/src/future.cc73
3 files changed, 91 insertions, 5 deletions
diff --git a/libstdc++-v3/src/Makefile.am b/libstdc++-v3/src/Makefile.am
index d218cea..4295d4d 100644
--- a/libstdc++-v3/src/Makefile.am
+++ b/libstdc++-v3/src/Makefile.am
@@ -189,6 +189,7 @@ sources = \
condition_variable.cc \
chrono.cc \
thread.cc \
+ future.cc \
${host_sources} \
${host_sources_extra}
@@ -297,6 +298,11 @@ thread.lo: thread.cc
thread.o: thread.cc
$(CXXCOMPILE) -std=gnu++0x -c $<
+future.lo: future.cc
+ $(LTCXXCOMPILE) -std=gnu++0x -c $<
+future.o: future.cc
+ $(CXXCOMPILE) -std=gnu++0x -c $<
+
if GLIBCXX_LDBL_COMPAT
# Use special rules for compatibility-ldbl.cc compilation, as we need to
# pass -mlong-double-64.
diff --git a/libstdc++-v3/src/Makefile.in b/libstdc++-v3/src/Makefile.in
index 9ee5275..9134f04 100644
--- a/libstdc++-v3/src/Makefile.in
+++ b/libstdc++-v3/src/Makefile.in
@@ -87,10 +87,11 @@ am__libstdc___la_SOURCES_DIST = atomic.cc bitmap_allocator.cc \
ostream-inst.cc sstream-inst.cc streambuf-inst.cc streambuf.cc \
string-inst.cc valarray-inst.cc wlocale-inst.cc \
wstring-inst.cc mutex.cc condition_variable.cc chrono.cc \
- thread.cc atomicity.cc codecvt_members.cc collate_members.cc \
- ctype_members.cc messages_members.cc monetary_members.cc \
- numeric_members.cc time_members.cc basic_file.cc c++locale.cc \
- compatibility-ldbl.cc parallel_list.cc parallel_settings.cc
+ thread.cc future.cc atomicity.cc codecvt_members.cc \
+ collate_members.cc ctype_members.cc messages_members.cc \
+ monetary_members.cc numeric_members.cc time_members.cc \
+ basic_file.cc c++locale.cc compatibility-ldbl.cc \
+ parallel_list.cc parallel_settings.cc
am__objects_1 = atomicity.lo codecvt_members.lo collate_members.lo \
ctype_members.lo messages_members.lo monetary_members.lo \
numeric_members.lo time_members.lo
@@ -113,7 +114,7 @@ am__objects_5 = atomic.lo bitmap_allocator.lo pool_allocator.lo \
ostream-inst.lo sstream-inst.lo streambuf-inst.lo streambuf.lo \
string-inst.lo valarray-inst.lo wlocale-inst.lo \
wstring-inst.lo mutex.lo condition_variable.lo chrono.lo \
- thread.lo $(am__objects_1) $(am__objects_4)
+ thread.lo future.lo $(am__objects_1) $(am__objects_4)
am_libstdc___la_OBJECTS = $(am__objects_5)
libstdc___la_OBJECTS = $(am_libstdc___la_OBJECTS)
DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)
@@ -441,6 +442,7 @@ sources = \
condition_variable.cc \
chrono.cc \
thread.cc \
+ future.cc \
${host_sources} \
${host_sources_extra}
@@ -908,6 +910,11 @@ thread.lo: thread.cc
thread.o: thread.cc
$(CXXCOMPILE) -std=gnu++0x -c $<
+future.lo: future.cc
+ $(LTCXXCOMPILE) -std=gnu++0x -c $<
+future.o: future.cc
+ $(CXXCOMPILE) -std=gnu++0x -c $<
+
# Use special rules for compatibility-ldbl.cc compilation, as we need to
# pass -mlong-double-64.
@GLIBCXX_LDBL_COMPAT_TRUE@compatibility-ldbl.lo: compatibility-ldbl.cc
diff --git a/libstdc++-v3/src/future.cc b/libstdc++-v3/src/future.cc
new file mode 100644
index 0000000..ab9d5db
--- /dev/null
+++ b/libstdc++-v3/src/future.cc
@@ -0,0 +1,73 @@
+// future -*- C++ -*-
+
+// Copyright (C) 2009 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// Under Section 7 of GPL version 3, you are granted additional
+// permissions described in the GCC Runtime Library Exception, version
+// 3.1, as published by the Free Software Foundation.
+
+// You should have received a copy of the GNU General Public License and
+// a copy of the GCC Runtime Library Exception along with this program;
+// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+// <http://www.gnu.org/licenses/>.
+
+#include <future>
+
+#if defined(_GLIBCXX_HAS_GTHREADS) && defined(_GLIBCXX_USE_C99_STDINT_TR1) \
+ && defined(_GLIBCXX_ATOMIC_BUILTINS_4)
+namespace
+{
+ struct future_error_category : public std::error_category
+ {
+ virtual const char*
+ name() const
+ { return "future"; }
+
+ virtual std::string message(int __ec) const
+ {
+ std::string __msg;
+ switch (std::future_errc(__ec))
+ {
+ case std::future_errc::broken_promise:
+ __msg = "Broken promise";
+ break;
+ case std::future_errc::future_already_retrieved:
+ __msg = "Future already retrieved";
+ break;
+ case std::future_errc::promise_already_satisfied:
+ __msg = "Promise already satisfied";
+ break;
+ default:
+ __msg = "Unknown error";
+ break;
+ }
+ return __msg;
+ }
+ };
+
+ const future_error_category&
+ __future_category_instance()
+ {
+ static const future_error_category __fec;
+ return __fec;
+ }
+}
+
+namespace std
+{
+ const error_category* const future_category = &__future_category_instance();
+}
+
+#endif // _GLIBCXX_HAS_GTHREADS && _GLIBCXX_USE_C99_STDINT_TR1
+ // && _GLIBCXX_ATOMIC_BUILTINS_4