imgtools/imglib/boostlibrary/boost/system/error_code.hpp
author jjkang
Fri, 25 Jun 2010 18:11:34 +0800
changeset 600 6d08f4a05d93
permissions -rw-r--r--
add deprecated files
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
600
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
     1
//  boost/system/error_code.hpp  ---------------------------------------------//
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
     2
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
     3
//  Copyright Beman Dawes 2006, 2007
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
     4
//  Copyright Christoper Kohlhoff 2007
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
     5
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
     6
//  Distributed under the Boost Software License, Version 1.0. (See accompanying
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
     7
//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
     8
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
     9
//  See library home page at http://www.boost.org/libs/system
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    10
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    11
#ifndef BOOST_ERROR_CODE_HPP
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    12
#define BOOST_ERROR_CODE_HPP
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    13
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    14
#include <boost/system/config.hpp>
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    15
#include <boost/cstdint.hpp>
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    16
#include <boost/assert.hpp>
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    17
#include <boost/operators.hpp>
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    18
#include <boost/noncopyable.hpp>
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    19
#include <boost/utility/enable_if.hpp>
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    20
#include <ostream>
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    21
#include <string>
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    22
#include <stdexcept>
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    23
#include <functional>
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    24
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    25
// TODO: undef these macros if not already defined
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    26
#include <boost/cerrno.hpp> 
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    27
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    28
#if !defined(BOOST_POSIX_API) && !defined(BOOST_WINDOWS_API)
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    29
#  error BOOST_POSIX_API or BOOST_WINDOWS_API must be defined
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    30
#endif
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    31
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    32
#include <boost/config/abi_prefix.hpp> // must be the last #include
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    33
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    34
namespace boost
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    35
{
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    36
  namespace system
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    37
  {
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    38
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    39
    class error_code;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    40
    class error_condition;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    41
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    42
    //  "Concept" helpers  ---------------------------------------------------//
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    43
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    44
    template< class T >
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    45
    struct is_error_code_enum { static const bool value = false; };
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    46
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    47
    template< class T >
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    48
    struct is_error_condition_enum { static const bool value = false; };
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    49
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    50
    //  generic error_conditions  --------------------------------------------//
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    51
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    52
    namespace errc
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    53
    {
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    54
      enum errc_t
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    55
      {
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    56
        success = 0,
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    57
        address_family_not_supported = EAFNOSUPPORT,
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    58
        address_in_use = EADDRINUSE,
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    59
        address_not_available = EADDRNOTAVAIL,
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    60
        already_connected = EISCONN,
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    61
        argument_list_too_long = E2BIG,
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    62
        argument_out_of_domain = EDOM,
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    63
        bad_address = EFAULT,
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    64
        bad_file_descriptor = EBADF,
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    65
        bad_message = EBADMSG,
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    66
        broken_pipe = EPIPE,
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    67
        connection_aborted = ECONNABORTED,
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    68
        connection_already_in_progress = EALREADY,
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    69
        connection_refused = ECONNREFUSED,
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    70
        connection_reset = ECONNRESET,
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    71
        cross_device_link = EXDEV,
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    72
        destination_address_required = EDESTADDRREQ,
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    73
        device_or_resource_busy = EBUSY,
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    74
        directory_not_empty = ENOTEMPTY,
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    75
        executable_format_error = ENOEXEC,
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    76
        file_exists = EEXIST,
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    77
        file_too_large = EFBIG,
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    78
        filename_too_long = ENAMETOOLONG,
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    79
        function_not_supported = ENOSYS,
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    80
        host_unreachable = EHOSTUNREACH,
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    81
        identifier_removed = EIDRM,
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    82
        illegal_byte_sequence = EILSEQ,
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    83
        inappropriate_io_control_operation = ENOTTY,
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    84
        interrupted = EINTR,
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    85
        invalid_argument = EINVAL,
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    86
        invalid_seek = ESPIPE,
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    87
        io_error = EIO,
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    88
        is_a_directory = EISDIR,
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    89
        message_size = EMSGSIZE,
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    90
        network_down = ENETDOWN,
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    91
        network_reset = ENETRESET,
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    92
        network_unreachable = ENETUNREACH,
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    93
        no_buffer_space = ENOBUFS,
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    94
        no_child_process = ECHILD,
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    95
        no_link = ENOLINK,
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    96
        no_lock_available = ENOLCK,
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    97
        no_message_available = ENODATA,
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    98
        no_message = ENOMSG,
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    99
        no_protocol_option = ENOPROTOOPT,
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   100
        no_space_on_device = ENOSPC,
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   101
        no_stream_resources = ENOSR,
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   102
        no_such_device_or_address = ENXIO,
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   103
        no_such_device = ENODEV,
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   104
        no_such_file_or_directory = ENOENT,
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   105
        no_such_process = ESRCH,
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   106
        not_a_directory = ENOTDIR,
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   107
        not_a_socket = ENOTSOCK,
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   108
        not_a_stream = ENOSTR,
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   109
        not_connected = ENOTCONN,
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   110
        not_enough_memory = ENOMEM,
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   111
        not_supported = ENOTSUP,
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   112
        operation_canceled = ECANCELED,
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   113
        operation_in_progress = EINPROGRESS,
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   114
        operation_not_permitted = EPERM,
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   115
        operation_not_supported = EOPNOTSUPP,
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   116
        operation_would_block = EWOULDBLOCK,
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   117
        owner_dead = EOWNERDEAD,
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   118
        permission_denied = EACCES,
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   119
        protocol_error = EPROTO,
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   120
        protocol_not_supported = EPROTONOSUPPORT,
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   121
        read_only_file_system = EROFS,
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   122
        resource_deadlock_would_occur = EDEADLK,
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   123
        resource_unavailable_try_again = EAGAIN,
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   124
        result_out_of_range = ERANGE,
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   125
        state_not_recoverable = ENOTRECOVERABLE,
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   126
        stream_timeout = ETIME,
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   127
        text_file_busy = ETXTBSY,
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   128
        timed_out = ETIMEDOUT,
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   129
        too_many_files_open_in_system = ENFILE,
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   130
        too_many_files_open = EMFILE,
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   131
        too_many_links = EMLINK,
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   132
        too_many_synbolic_link_levels = ELOOP,
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   133
        value_too_large = EOVERFLOW,
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   134
        wrong_protocol_type = EPROTOTYPE
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   135
      };
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   136
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   137
    } // namespace errc
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   138
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   139
# ifndef BOOST_SYSTEM_NO_DEPRECATED
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   140
    namespace posix = errc;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   141
    namespace posix_error = errc;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   142
# endif
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   143
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   144
    template<> struct is_error_condition_enum<errc::errc_t>
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   145
      { static const bool value = true; };
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   146
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   147
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   148
    //  ----------------------------------------------------------------------//
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   149
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   150
    //  Operating system specific interfaces  --------------------------------//
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   151
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   152
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   153
    //  The interface is divided into general and system-specific portions to
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   154
    //  meet these requirements:
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   155
    //
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   156
    //  * Code calling an operating system API can create an error_code with
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   157
    //    a single category (system_category), even for POSIX-like operating
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   158
    //    systems that return some POSIX errno values and some native errno
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   159
    //    values. This code should not have to pay the cost of distinguishing
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   160
    //    between categories, since it is not yet known if that is needed.
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   161
    //
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   162
    //  * Users wishing to write system-specific code should be given enums for
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   163
    //    at least the common error cases.
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   164
    //
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   165
    //  * System specific code should fail at compile time if moved to another
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   166
    //    operating system.
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   167
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   168
    //  The system specific portions of the interface are located in headers
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   169
    //  with names reflecting the operating system. For example,
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   170
    //
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   171
    //       <boost/system/cygwin_error.hpp>
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   172
    //       <boost/system/linux_error.hpp>
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   173
    //       <boost/system/windows_error.hpp>
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   174
    //
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   175
    //  These headers are effectively empty for compiles on operating systems
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   176
    //  where they are not applicable.
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   177
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   178
    //  ----------------------------------------------------------------------//
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   179
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   180
    //  class error_category  ------------------------------------------------//
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   181
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   182
    class error_category : public noncopyable
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   183
    {
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   184
    public:
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   185
      virtual ~error_category(){}
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   186
      virtual inline const char *    name() const;  // see implementation note below
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   187
      virtual inline std::string     message( int ev ) const;   // see implementation note below
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   188
      virtual inline error_condition default_error_condition( int ev ) const;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   189
      virtual inline bool equivalent( int code, const error_condition & condition ) const;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   190
      virtual inline bool equivalent( const error_code & code, int condition ) const;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   191
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   192
      bool operator==(const error_category & rhs) const { return this == &rhs; }
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   193
      bool operator!=(const error_category & rhs) const { return this != &rhs; }
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   194
      bool operator<( const error_category & rhs ) const
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   195
      {
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   196
        return std::less<const error_category*>()( this, &rhs );
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   197
      }
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   198
    };
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   199
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   200
    //  predefined error categories  -----------------------------------------//
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   201
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   202
    BOOST_SYSTEM_DECL const error_category &  get_system_category();
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   203
    BOOST_SYSTEM_DECL const error_category &  get_generic_category();
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   204
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   205
    static const error_category &  system_category = get_system_category();
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   206
    static const error_category &  generic_category = get_generic_category();
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   207
    
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   208
# ifndef BOOST_SYSTEM_NO_DEPRECATED
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   209
    //  deprecated synonyms
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   210
    inline const error_category &  get_posix_category() { return get_generic_category(); }
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   211
    static const error_category &  posix_category = get_generic_category();
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   212
    static const error_category &  errno_ecat     = get_generic_category();
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   213
    static const error_category &  native_ecat    = get_system_category();
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   214
# endif
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   215
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   216
    //  class error_condition  -----------------------------------------------//
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   217
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   218
    //  error_conditions are portable, error_codes are system or library specific
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   219
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   220
    class error_condition
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   221
    {
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   222
    public:
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   223
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   224
      // constructors:
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   225
      error_condition() : m_val(0), m_cat(&get_generic_category()) {}
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   226
      error_condition( int val, const error_category & cat ) : m_val(val), m_cat(&cat) {}
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   227
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   228
      template <class ErrorConditionEnum>
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   229
        error_condition(ErrorConditionEnum e,
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   230
          typename boost::enable_if<is_error_condition_enum<ErrorConditionEnum> >::type* = 0)
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   231
      {
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   232
        *this = make_error_condition(e);
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   233
      }
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   234
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   235
      // modifiers:
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   236
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   237
      void assign( int val, const error_category & cat )
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   238
      { 
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   239
        m_val = val;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   240
        m_cat = &cat;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   241
      }
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   242
                                             
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   243
      template<typename ErrorConditionEnum>
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   244
        typename boost::enable_if<is_error_condition_enum<ErrorConditionEnum>, error_condition>::type &
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   245
          operator=( ErrorConditionEnum val )
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   246
      { 
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   247
        *this = make_error_condition(val);
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   248
        return *this;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   249
      }
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   250
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   251
      void clear()
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   252
      {
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   253
        m_val = 0;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   254
        m_cat = &get_generic_category();
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   255
      }
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   256
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   257
      // observers:
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   258
      int                     value() const    { return m_val; }
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   259
      const error_category &  category() const { return *m_cat; }
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   260
      std::string             message() const  { return m_cat->message(value()); }
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   261
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   262
      typedef void (*unspecified_bool_type)();
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   263
      static void unspecified_bool_true() {}
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   264
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   265
      operator unspecified_bool_type() const  // true if error
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   266
      { 
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   267
        return m_val == 0 ? 0 : unspecified_bool_true;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   268
      }
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   269
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   270
      bool operator!() const  // true if no error
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   271
      {
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   272
        return m_val == 0;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   273
      }
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   274
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   275
      // relationals:
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   276
      //  the more symmetrical non-member syntax allows enum
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   277
      //  conversions work for both rhs and lhs.
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   278
      inline friend bool operator==( const error_condition & lhs,
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   279
                                     const error_condition & rhs )
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   280
      {
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   281
        return lhs.m_cat == rhs.m_cat && lhs.m_val == rhs.m_val;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   282
      }                  
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   283
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   284
      inline friend bool operator<( const error_condition & lhs,
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   285
                                    const error_condition & rhs )
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   286
        //  the more symmetrical non-member syntax allows enum
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   287
        //  conversions work for both rhs and lhs.
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   288
      {
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   289
        return lhs.m_cat < rhs.m_cat
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   290
          || (lhs.m_cat == rhs.m_cat && lhs.m_val < rhs.m_val);
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   291
      }
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   292
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   293
    private:
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   294
      int                     m_val;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   295
      const error_category *  m_cat;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   296
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   297
    };
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   298
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   299
    //  class error_code  ----------------------------------------------------//
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   300
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   301
    //  We want error_code to be a value type that can be copied without slicing
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   302
    //  and without requiring heap allocation, but we also want it to have
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   303
    //  polymorphic behavior based on the error category. This is achieved by
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   304
    //  abstract base class error_category supplying the polymorphic behavior,
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   305
    //  and error_code containing a pointer to an object of a type derived
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   306
    //  from error_category.
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   307
    class error_code
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   308
    {
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   309
    public:
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   310
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   311
      // constructors:
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   312
      error_code() : m_val(0), m_cat(&get_system_category()) {}
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   313
      error_code( int val, const error_category & cat ) : m_val(val), m_cat(&cat) {}
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   314
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   315
      template <class ErrorCodeEnum>
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   316
        error_code(ErrorCodeEnum e,
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   317
          typename boost::enable_if<is_error_code_enum<ErrorCodeEnum> >::type* = 0)
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   318
      {
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   319
        *this = make_error_code(e);
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   320
      }
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   321
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   322
      // modifiers:
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   323
      void assign( int val, const error_category & cat )
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   324
      { 
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   325
        m_val = val;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   326
        m_cat = &cat;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   327
      }
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   328
                                             
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   329
      template<typename ErrorCodeEnum>
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   330
        typename boost::enable_if<is_error_code_enum<ErrorCodeEnum>, error_code>::type &
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   331
          operator=( ErrorCodeEnum val )
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   332
      { 
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   333
        *this = make_error_code(val);
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   334
        return *this;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   335
      }
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   336
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   337
      void clear()
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   338
      {
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   339
        m_val = 0;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   340
        m_cat = &get_system_category();
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   341
      }
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   342
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   343
      // observers:
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   344
      int                     value() const    { return m_val; }
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   345
      const error_category &  category() const { return *m_cat; }
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   346
      error_condition         default_error_condition() const  { return m_cat->default_error_condition(value()); }
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   347
      std::string             message() const  { return m_cat->message(value()); }
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   348
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   349
      typedef void (*unspecified_bool_type)();
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   350
      static void unspecified_bool_true() {}
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   351
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   352
      operator unspecified_bool_type() const  // true if error
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   353
      { 
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   354
        return m_val == 0 ? 0 : unspecified_bool_true;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   355
      }
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   356
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   357
      bool operator!() const  // true if no error
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   358
      {
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   359
        return m_val == 0;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   360
      }
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   361
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   362
      // relationals:
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   363
      inline friend bool operator==( const error_code & lhs,
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   364
                                     const error_code & rhs )
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   365
        //  the more symmetrical non-member syntax allows enum
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   366
        //  conversions work for both rhs and lhs.
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   367
      {
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   368
        return lhs.m_cat == rhs.m_cat && lhs.m_val == rhs.m_val;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   369
      }
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   370
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   371
      inline friend bool operator<( const error_code & lhs,
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   372
                                    const error_code & rhs )
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   373
        //  the more symmetrical non-member syntax allows enum
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   374
        //  conversions work for both rhs and lhs.
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   375
      {
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   376
        return lhs.m_cat < rhs.m_cat
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   377
          || (lhs.m_cat == rhs.m_cat && lhs.m_val < rhs.m_val);
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   378
      }
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   379
                  
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   380
      private:
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   381
      int                     m_val;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   382
      const error_category *  m_cat;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   383
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   384
    };
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   385
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   386
    //  predefined error_code object used as "throw on error" tag
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   387
    BOOST_SYSTEM_DECL extern error_code throws;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   388
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   389
    //  non-member functions  ------------------------------------------------//
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   390
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   391
    inline bool operator!=( const error_code & lhs,
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   392
                            const error_code & rhs )
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   393
    {
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   394
      return !(lhs == rhs);
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   395
    }
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   396
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   397
    inline bool operator!=( const error_condition & lhs,
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   398
                            const error_condition & rhs )
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   399
    {
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   400
      return !(lhs == rhs);
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   401
    }
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   402
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   403
    inline bool operator==( const error_code & code,
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   404
                            const error_condition & condition )
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   405
    {
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   406
      return code.category().equivalent( code.value(), condition )
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   407
        || condition.category().equivalent( code, condition.value() );
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   408
    }
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   409
                
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   410
    inline bool operator!=( const error_code & lhs,
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   411
                            const error_condition & rhs )
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   412
    {
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   413
      return !(lhs == rhs);
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   414
    }
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   415
                
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   416
    inline bool operator==( const error_condition & condition,
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   417
                            const error_code & code )
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   418
    {
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   419
      return condition.category().equivalent( code, condition.value() )
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   420
        || code.category().equivalent( code.value(), condition );
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   421
    }
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   422
                
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   423
    inline bool operator!=( const error_condition & lhs,
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   424
                            const error_code & rhs )
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   425
    {
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   426
      return !(lhs == rhs);
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   427
    }
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   428
                  
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   429
    // TODO: both of these may move elsewhere, but the LWG hasn't spoken yet.
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   430
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   431
    template <class charT, class traits>
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   432
    inline std::basic_ostream<charT,traits>&
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   433
      operator<< (std::basic_ostream<charT,traits>& os, error_code ec)
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   434
    {
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   435
      os << ec.category().name() << ':' << ec.value();
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   436
      return os;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   437
    }
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   438
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   439
    inline std::size_t hash_value( const error_code & ec )
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   440
    {
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   441
      return static_cast<std::size_t>(ec.value())
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   442
        + reinterpret_cast<std::size_t>(&ec.category());
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   443
    }
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   444
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   445
    //  make_* functions for errc::errc_t  -----------------------------//
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   446
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   447
    namespace errc
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   448
    {
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   449
      //  explicit conversion:
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   450
      inline error_code make_error_code( errc_t e )
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   451
        { return error_code( e, get_generic_category() ); }
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   452
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   453
      //  implicit conversion:
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   454
      inline error_condition make_error_condition( errc_t e )
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   455
        { return error_condition( e, get_generic_category() ); }
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   456
    }
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   457
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   458
    //  error_category default implementation  -------------------------------//
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   459
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   460
    inline error_condition error_category::default_error_condition( int ev ) const
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   461
    { 
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   462
      return error_condition( ev, *this );
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   463
    }
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   464
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   465
    inline bool error_category::equivalent( int code,
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   466
      const error_condition & condition ) const
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   467
    {
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   468
      return default_error_condition( code ) == condition;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   469
    }
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   470
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   471
    inline bool error_category::equivalent( const error_code & code,
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   472
      int condition ) const
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   473
    {
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   474
      return *this == code.category() && code.value() == condition;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   475
    }
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   476
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   477
    //  error_category implementation note: VC++ 8.0 objects to name() and
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   478
    //  message() being pure virtual functions. Thus these implementations.
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   479
    inline const char * error_category::name() const
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   480
    { 
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   481
      return "error: should never be called";
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   482
    }
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   483
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   484
    inline std::string error_category::message( int ) const
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   485
    { 
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   486
      static std::string s("error: should never be called");
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   487
      return s;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   488
    }
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   489
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   490
  } // namespace system
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   491
} // namespace boost
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   492
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   493
#include <boost/config/abi_suffix.hpp> // pops abi_prefix.hpp pragmas
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   494
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   495
# ifdef BOOST_ERROR_CODE_HEADER_ONLY
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   496
#   include <boost/../libs/system/src/error_code.cpp>
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   497
# endif
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   498
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   499
#endif // BOOST_ERROR_CODE_HPP
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   500
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   501