1// future -*- C++ -*-
2
3// Copyright (C) 2009 Free Software Foundation, Inc.
4//
5// This file is part of the GNU ISO C++ Library.  This library is free
6// software; you can redistribute it and/or modify it under the
7// terms of the GNU General Public License as published by the
8// Free Software Foundation; either version 3, or (at your option)
9// any later version.
10
11// This library is distributed in the hope that it will be useful,
12// but WITHOUT ANY WARRANTY; without even the implied warranty of
13// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14// GNU General Public License for more details.
15
16// Under Section 7 of GPL version 3, you are granted additional
17// permissions described in the GCC Runtime Library Exception, version
18// 3.1, as published by the Free Software Foundation.
19
20// You should have received a copy of the GNU General Public License and
21// a copy of the GCC Runtime Library Exception along with this program;
22// see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
23// <http://www.gnu.org/licenses/>.
24
25#include <future>
26
27namespace
28{
29  struct future_error_category : public std::error_category
30  {
31    virtual const char*
32    name() const
33    { return "future"; }
34
35    virtual std::string message(int __ec) const
36    {
37      std::string __msg;
38      switch (std::future_errc(__ec))
39      {
40      case std::future_errc::broken_promise:
41          __msg = "Broken promise";
42          break;
43      case std::future_errc::future_already_retrieved:
44          __msg = "Future already retrieved";
45          break;
46      case std::future_errc::promise_already_satisfied:
47          __msg = "Promise already satisfied";
48          break;
49      default:
50          __msg = "Unknown error";
51          break;
52      }
53      return __msg;
54    }
55  };
56
57  const future_error_category&
58  __future_category_instance()
59  {
60    static const future_error_category __fec;
61    return __fec;
62  }
63}
64
65namespace std
66{
67  const error_category* const future_category = &__future_category_instance();
68
69  future_error::~future_error() throw() { }
70
71  const char*
72  future_error::what() const throw() { return _M_code.message().c_str(); }
73}
74