mirror of
https://github.com/boostorg/system.git
synced 2025-12-25 08:18:05 +01:00
Compare commits
14 Commits
feature/st
...
feature/st
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
7a72aee355 | ||
|
|
a8df99e927 | ||
|
|
85c7d92302 | ||
|
|
4c201d26b2 | ||
|
|
1659dfbeba | ||
|
|
d2b8b54356 | ||
|
|
41f7ea49cb | ||
|
|
0b22dc595f | ||
|
|
aab58b0d5b | ||
|
|
ad66ea43a3 | ||
|
|
811564f186 | ||
|
|
a7e4879e55 | ||
|
|
9b11d864be | ||
|
|
cc6a61b6c5 |
@@ -20,7 +20,6 @@
|
||||
|
||||
namespace boost
|
||||
{
|
||||
|
||||
namespace system
|
||||
{
|
||||
|
||||
@@ -91,7 +90,6 @@ inline char const * error_category::message( int ev, char * buffer, std::size_t
|
||||
}
|
||||
|
||||
} // namespace system
|
||||
|
||||
} // namespace boost
|
||||
|
||||
// interoperability with std::error_code, std::error_condition
|
||||
@@ -100,36 +98,54 @@ inline char const * error_category::message( int ev, char * buffer, std::size_t
|
||||
|
||||
#include <boost/system/detail/std_category.hpp>
|
||||
|
||||
inline boost::system::error_category::operator std::error_category const & () const
|
||||
namespace boost
|
||||
{
|
||||
if( id_ == boost::system::detail::generic_category_id )
|
||||
namespace system
|
||||
{
|
||||
|
||||
inline error_category::operator std::error_category const & () const
|
||||
{
|
||||
if( id_ == detail::generic_category_id )
|
||||
{
|
||||
// This condition must be the same as the one in error_condition.hpp
|
||||
#if defined(BOOST_GCC) && BOOST_GCC < 50000
|
||||
|
||||
static const boost::system::detail::std_category generic_instance( this, 0x1F4D3 );
|
||||
return generic_instance;
|
||||
static const boost::system::detail::std_category generic_instance( this, 0x1F4D3 );
|
||||
return generic_instance;
|
||||
|
||||
#else
|
||||
|
||||
return std::generic_category();
|
||||
return std::generic_category();
|
||||
|
||||
#endif
|
||||
}
|
||||
|
||||
if( id_ == boost::system::detail::system_category_id )
|
||||
if( id_ == detail::system_category_id )
|
||||
{
|
||||
static const boost::system::detail::std_category system_instance( this, 0x1F4D7 );
|
||||
return system_instance;
|
||||
// This condition must be the same as the one in error_code.hpp
|
||||
#if defined(__CYGWIN__) || defined(__MINGW32__) || (defined(_MSC_VER) && _MSC_VER == 1800) || (defined(BOOST_GCC) && BOOST_GCC < 50000)
|
||||
|
||||
// Under Cygwin (and MinGW!), std::system_category() is POSIX
|
||||
// Under VS2013, std::system_category() isn't quite right
|
||||
|
||||
static const boost::system::detail::std_category system_instance( this, 0x1F4D7 );
|
||||
return system_instance;
|
||||
|
||||
#else
|
||||
|
||||
return std::system_category();
|
||||
|
||||
#endif
|
||||
}
|
||||
|
||||
boost::system::detail::std_category* p = ps_.load( std::memory_order_acquire );
|
||||
detail::std_category* p = ps_.load( std::memory_order_acquire );
|
||||
|
||||
if( p != 0 )
|
||||
{
|
||||
return *p;
|
||||
}
|
||||
|
||||
boost::system::detail::std_category* q = new detail::std_category( this, 0 );
|
||||
detail::std_category* q = new detail::std_category( this, 0 );
|
||||
|
||||
if( ps_.compare_exchange_strong( p, q, std::memory_order_release, std::memory_order_acquire ) )
|
||||
{
|
||||
@@ -142,6 +158,9 @@ inline boost::system::error_category::operator std::error_category const & () co
|
||||
}
|
||||
}
|
||||
|
||||
} // namespace system
|
||||
} // namespace boost
|
||||
|
||||
#endif // #if defined(BOOST_SYSTEM_HAS_SYSTEM_ERROR)
|
||||
|
||||
#endif // #ifndef BOOST_SYSTEM_DETAIL_ERROR_CATEGORY_IMPL_HPP_INCLUDED
|
||||
|
||||
@@ -504,8 +504,16 @@ public:
|
||||
}
|
||||
else if( lc_flags_ == 0 )
|
||||
{
|
||||
//return std::error_code();
|
||||
// This condition must be the same as the one in error_category_impl.hpp
|
||||
#if defined(__CYGWIN__) || defined(__MINGW32__) || (defined(_MSC_VER) && _MSC_VER == 1800) || (defined(BOOST_GCC) && BOOST_GCC < 50000)
|
||||
|
||||
return std::error_code( 0, boost::system::system_category() );
|
||||
|
||||
#else
|
||||
|
||||
return std::error_code();
|
||||
|
||||
#endif
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
@@ -222,7 +222,23 @@ public:
|
||||
|
||||
operator std::error_condition () const
|
||||
{
|
||||
// This condition must be the same as the one in error_category_impl.hpp
|
||||
#if defined(BOOST_GCC) && BOOST_GCC < 50000
|
||||
|
||||
return std::error_condition( value(), category() );
|
||||
|
||||
#else
|
||||
|
||||
if( cat_ )
|
||||
{
|
||||
return std::error_condition( val_, *cat_ );
|
||||
}
|
||||
else
|
||||
{
|
||||
return std::error_condition( val_, std::generic_category() );
|
||||
}
|
||||
|
||||
#endif
|
||||
}
|
||||
|
||||
inline friend bool operator==( std::error_code const & lhs, error_condition const & rhs ) BOOST_NOEXCEPT
|
||||
|
||||
@@ -8,7 +8,6 @@
|
||||
|
||||
#include <boost/system/errc.hpp>
|
||||
#include <boost/system/detail/error_code.hpp>
|
||||
#include <boost/system/detail/snprintf.hpp>
|
||||
#include <string>
|
||||
#include <stdexcept>
|
||||
#include <cassert>
|
||||
@@ -26,14 +25,6 @@ private:
|
||||
|
||||
private:
|
||||
|
||||
static std::string to_string( int v )
|
||||
{
|
||||
char buffer[ 32 ];
|
||||
detail::snprintf( buffer, sizeof( buffer ), "%d", v );
|
||||
|
||||
return buffer;
|
||||
}
|
||||
|
||||
static std::string build_message( char const * prefix, error_code const & ec )
|
||||
{
|
||||
std::string r;
|
||||
@@ -51,23 +42,8 @@ private:
|
||||
r += " [";
|
||||
r += ec.to_string();
|
||||
r += " at ";
|
||||
|
||||
boost::source_location loc = ec.location();
|
||||
|
||||
r += loc.file_name();
|
||||
|
||||
r += ':';
|
||||
r += to_string( loc.line() );
|
||||
|
||||
if( loc.column() != 0 )
|
||||
{
|
||||
r += ':';
|
||||
r += to_string( loc.column() );
|
||||
}
|
||||
|
||||
r += " in function '";
|
||||
r += loc.function_name();
|
||||
r += "\']";
|
||||
r += ec.location().to_string();
|
||||
r += "]";
|
||||
}
|
||||
|
||||
return r;
|
||||
|
||||
@@ -104,6 +104,7 @@ boost_test(TYPE run SOURCES ec_location_test.cpp)
|
||||
boost_test(TYPE run SOURCES error_condition_test3.cpp)
|
||||
boost_test(TYPE run SOURCES error_code_test2.cpp)
|
||||
boost_test(TYPE run SOURCES system_error_test2.cpp)
|
||||
boost_test(TYPE run SOURCES std_interop_test10.cpp)
|
||||
|
||||
# result
|
||||
|
||||
|
||||
@@ -126,6 +126,7 @@ run ec_location_test.cpp ;
|
||||
run error_condition_test3.cpp ;
|
||||
run error_code_test2.cpp ;
|
||||
run system_error_test2.cpp ;
|
||||
run std_interop_test10.cpp ;
|
||||
|
||||
# result
|
||||
|
||||
|
||||
@@ -83,34 +83,13 @@ static void test_system_category()
|
||||
|
||||
BOOST_TEST_CSTR_EQ( bt.name(), st.name() );
|
||||
|
||||
for( int ev = 1; ev < 6; ++ev )
|
||||
{
|
||||
int ev = 5;
|
||||
BOOST_TEST_EQ( bt.message( ev ), st.message( ev ) );
|
||||
std::string bm = bt.message( ev );
|
||||
std::string sm = st.message( ev );
|
||||
|
||||
{
|
||||
boost::system::error_code bc( ev, bt );
|
||||
|
||||
BOOST_TEST_EQ( bc.value(), ev );
|
||||
BOOST_TEST_EQ( &bc.category(), &bt );
|
||||
|
||||
std::error_code sc( bc );
|
||||
|
||||
BOOST_TEST_EQ( sc.value(), ev );
|
||||
BOOST_TEST_EQ( &sc.category(), &st );
|
||||
}
|
||||
|
||||
{
|
||||
boost::system::error_condition bn = bt.default_error_condition( ev );
|
||||
BOOST_TEST( bt.equivalent( ev, bn ) );
|
||||
|
||||
std::error_condition sn( bn );
|
||||
BOOST_TEST( st.equivalent( ev, sn ) );
|
||||
}
|
||||
}
|
||||
|
||||
{
|
||||
int ev = 4;
|
||||
BOOST_TEST_EQ( bt.message( ev ), st.message( ev ) );
|
||||
// We strip whitespace and the trailing dot, MSVC not so much
|
||||
BOOST_TEST_EQ( bm, sm.substr( 0, bm.size() ) );
|
||||
|
||||
{
|
||||
boost::system::error_code bc( ev, bt );
|
||||
|
||||
66
test/std_interop_test10.cpp
Normal file
66
test/std_interop_test10.cpp
Normal file
@@ -0,0 +1,66 @@
|
||||
// Copyright 2021 Peter Dimov.
|
||||
// Distributed under the Boost Software License, Version 1.0.
|
||||
// http://www.boost.org/LICENSE_1_0.txt
|
||||
|
||||
#include <boost/system/error_code.hpp>
|
||||
#include <boost/core/lightweight_test.hpp>
|
||||
#include <boost/config/pragma_message.hpp>
|
||||
#include <cerrno>
|
||||
|
||||
#if !defined(BOOST_SYSTEM_HAS_SYSTEM_ERROR)
|
||||
|
||||
BOOST_PRAGMA_MESSAGE( "BOOST_SYSTEM_HAS_SYSTEM_ERROR not defined, test will be skipped" )
|
||||
int main() {}
|
||||
|
||||
#else
|
||||
|
||||
#include <system_error>
|
||||
|
||||
int main()
|
||||
{
|
||||
{
|
||||
boost::system::error_code e1;
|
||||
boost::system::error_code e2( 0, boost::system::system_category() );
|
||||
|
||||
BOOST_TEST_EQ( e1, e2 );
|
||||
|
||||
std::error_code e3( e1 );
|
||||
std::error_code e4( e2 );
|
||||
|
||||
BOOST_TEST_EQ( e3, e4 );
|
||||
}
|
||||
|
||||
{
|
||||
boost::system::error_code e1;
|
||||
|
||||
std::error_code e2( e1 );
|
||||
std::error_code e3( e1.value(), e1.category() );
|
||||
|
||||
BOOST_TEST_EQ( e2, e3 );
|
||||
}
|
||||
|
||||
{
|
||||
boost::system::error_condition e1;
|
||||
boost::system::error_condition e2( 0, boost::system::generic_category() );
|
||||
|
||||
BOOST_TEST_EQ( e1, e2 );
|
||||
|
||||
std::error_condition e3( e1 );
|
||||
std::error_condition e4( e2 );
|
||||
|
||||
BOOST_TEST( e3 == e4 );
|
||||
}
|
||||
|
||||
{
|
||||
boost::system::error_condition e1;
|
||||
|
||||
std::error_condition e2( e1 );
|
||||
std::error_condition e3( e1.value(), e1.category() );
|
||||
|
||||
BOOST_TEST( e2 == e3 );
|
||||
}
|
||||
|
||||
return boost::report_errors();
|
||||
}
|
||||
|
||||
#endif
|
||||
@@ -30,6 +30,11 @@ int main()
|
||||
BOOST_TEST_EQ( e2, e1 );
|
||||
BOOST_TEST_NOT( e2 != e1 );
|
||||
|
||||
#if defined(_LIBCPP_VERSION)
|
||||
|
||||
// Under MS STL and libstdc++, std::error_code() does not compare
|
||||
// equal to std::error_condition(). Go figure.
|
||||
|
||||
BOOST_TEST_EQ( e2, en );
|
||||
BOOST_TEST_NOT( e2 != en );
|
||||
|
||||
@@ -37,6 +42,8 @@ int main()
|
||||
|
||||
BOOST_TEST_EQ( e3, en );
|
||||
BOOST_TEST_NOT( e3 != en );
|
||||
|
||||
#endif
|
||||
}
|
||||
|
||||
{
|
||||
@@ -51,6 +58,8 @@ int main()
|
||||
BOOST_TEST_EQ( e2, e1 );
|
||||
BOOST_TEST_NOT( e2 != e1 );
|
||||
|
||||
#if defined(_LIBCPP_VERSION)
|
||||
|
||||
BOOST_TEST_EQ( e2, en );
|
||||
BOOST_TEST_NOT( e2 != en );
|
||||
|
||||
@@ -58,6 +67,8 @@ int main()
|
||||
|
||||
BOOST_TEST_EQ( e3, en );
|
||||
BOOST_TEST_NOT( e3 != en );
|
||||
|
||||
#endif
|
||||
}
|
||||
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user