Removed cds::Exception class, all exception from the library is based on different...
authorkhizmax <libcds.dev@gmail.com>
Sun, 30 Nov 2014 13:20:54 +0000 (16:20 +0300)
committerkhizmax <libcds.dev@gmail.com>
Sun, 30 Nov 2014 13:20:54 +0000 (16:20 +0300)
cds/details/defs.h
cds/memory/michael/bound_check.h
cds/threading/details/pthread_manager.h
cds/threading/details/wintls_manager.h
cds/urcu/options.h
tests/cppunit/cppunit_mini.h

index 29389c3..b9e51a0 100644 (file)
@@ -7,6 +7,7 @@
 #include <assert.h>
 #include <cstdint>
 #include <exception>
+#include <stdexcept>
 #include <string>
 #include <memory>
 
@@ -393,35 +394,6 @@ namespace cds {
 
 namespace cds {
 
-    /// Base of all exceptions in the library
-    class Exception: public std::exception
-    {
-    protected:
-        std::string    m_strMsg    ;    ///< Exception message
-    public:
-        /// Create empty exception
-        Exception()
-        {}
-        /// Create exception with message
-        explicit Exception( const char * pszMsg )
-            : m_strMsg( pszMsg )
-        {}
-        /// Create exception with message
-        explicit Exception( const std::string& strMsg )
-            :m_strMsg( strMsg )
-        {}
-
-        /// Destructor
-        virtual ~Exception() throw()
-        {}
-
-        /// Return exception message
-        virtual const char * what( ) const throw()
-        {
-            return m_strMsg.c_str();
-        }
-    };
-
     /// any_type is used as a placeholder for auto-calculated type (usually in \p rebind templates)
     struct any_type {};
 
index 02cc7bc..06cb843 100644 (file)
@@ -72,19 +72,18 @@ namespace cds { namespace memory { namespace michael {
     typedef cds::opt::none  debug_bound_checking;
 #endif
 
-    /// %Exception of \ref strong_bound_checking bound checker
-    class bound_checker_exception: public std::exception
+    /// Exception of \ref strong_bound_checking bound checker
+    class bound_checker_exception: public std::out_of_range
     {
     //@cond
     public:
-        virtual const char * what() const throw()
-        {
-            return "Memory bound checking violation";
-        }
+        bound_checker_exception()
+            : std::out_of_range( "Memory bound checking violation" )
+        {}
     //@endcond
     };
 
-    /// %Exception throwing bound checker
+    /// Exception throwing bound checker
     /**
         This is one of value of opt::check_bounds option for Michael's \ref Heap memory allocator.
         It is intended for debug and release mode.
@@ -103,7 +102,6 @@ namespace cds { namespace memory { namespace michael {
                 throw bound_checker_exception();
             }
         }
-
     //@endcond
     };
 
index ab7b6a8..fe4e017 100644 (file)
@@ -3,6 +3,7 @@
 #ifndef __CDS_THREADING_DETAILS_PTHREAD_MANAGER_H
 #define __CDS_THREADING_DETAILS_PTHREAD_MANAGER_H
 
+#include <system_error>
 #include <stdio.h>
 #include <pthread.h>
 #include <cds/threading/details/_common.h>
@@ -23,18 +24,13 @@ namespace cds { namespace threading {
             typedef int pthread_error_code;
 
             /// pthread exception
-            class pthread_exception: public cds::Exception {
-            public:
-                const pthread_error_code    m_errCode   ;   ///< pthread error code, -1 if no pthread error code
+            class pthread_exception: public std::system_error
+            {
             public:
                 /// Exception constructor
-                pthread_exception( pthread_error_code nCode, const char * pszFunction )
-                    : m_errCode( nCode )
-                {
-                    char buf[256];
-                    sprintf( buf, "Pthread error %i [function %s]", nCode, pszFunction );
-                    m_strMsg = buf;
-                }
+                pthread_exception( int nCode, const char * pszFunction )
+                    : std::system_error( nCode, std::system_category(), pszFunction )
+                {}
             };
 
             /// pthread TLS key holder
index 5ffdc98..58137ef 100644 (file)
@@ -3,6 +3,7 @@
 #ifndef __CDS_THREADING_DETAILS_WINTLS_MANAGER_H
 #define __CDS_THREADING_DETAILS_WINTLS_MANAGER_H
 
+#include <system_error>
 #include <stdio.h>
 #include <cds/threading/details/_common.h>
 
@@ -22,22 +23,13 @@ namespace cds { namespace threading {
             typedef DWORD api_error_code;
 
             /// TLS API exception
-            class api_exception: public cds::Exception {
-            public:
-                const api_error_code    m_errCode   ;   ///< error code
+            class api_exception : public std::system_error
+            {
             public:
                 /// Exception constructor
                 api_exception( api_error_code nCode, const char * pszFunction )
-                    : m_errCode( nCode )
-                {
-                    char buf[256];
-#           if CDS_OS_TYPE == CDS_OS_MINGW
-                    sprintf( buf, "Win32 TLS API error %lu [function %s]", nCode, pszFunction );
-#           else
-                    sprintf_s( buf, sizeof(buf)/sizeof(buf[0]), "Win32 TLS API error %lu [function %s]", nCode, pszFunction );
-#           endif
-                    m_strMsg = buf;
-                }
+                    : std::system_error( static_cast<int>(nCode), std::system_category(), pszFunction )
+                {}
             };
 
             //@cond
index c38e7c6..d1bc8b0 100644 (file)
@@ -11,13 +11,12 @@ namespace cds { namespace urcu {
         This exception is raised when \p cds::opt::v::rcu_throw_deadlock deadlock checking policy
         is used, see \p cds::opt::rcu_check_deadlock option.
     */
-    class rcu_deadlock: public cds::Exception
+    class rcu_deadlock: public std::logic_error
     {
         //@cond
-        typedef cds::Exception base_class;
     public:
         rcu_deadlock()
-            : base_class( "RCU deadlock detected")
+            : std::logic_error( "RCU deadlock detected" )
         {}
         //@endcond
     };
index 81e8501..198f8f0 100644 (file)
@@ -266,7 +266,7 @@ namespace CppUnitMini
           X(); \
         } \
         catch(...) { \
-          Base::error("Test Failed: An Exception was thrown.", #X, __FILE__, __LINE__); \
+          Base::error("Test Failed: An exception was thrown.", #X, __FILE__, __LINE__); \
         } \
       } \
       tearDown(); \