00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #ifndef WT_ERROR_H
00023 #define WT_ERROR_H
00024
00025 #include <string>
00026 #include <iostream>
00027
00035 namespace Wefts {
00036
00044 class Error
00045 {
00046 private:
00047 int m_osCode;
00048 std::string m_descr;
00049
00050 public:
00055 Error( int code=0, std::string descr="Generic low-level error" );
00056
00061 int osCode() const { return m_osCode; }
00062
00064 virtual const std::string &description() const { return m_descr; }
00065
00067 virtual const std::string className() const { return "Wefts::Error"; }
00068
00072 friend std::ostream& operator<<( std::ostream &stream, Error &err );
00073 };
00074
00075
00077 class NotJoinableError: public Error
00078 {
00079 public:
00084 NotJoinableError( int code=0, std::string descr = "Can't join target thread" );
00085
00087 virtual const std::string className() const { return "Wefts::NotJoinableError"; }
00088
00089 };
00090
00092 class InvalidError: public Error
00093 {
00094 public:
00099 InvalidError( int code=0, std::string descr="Using an object in an invalid state" );
00100
00102 virtual const std::string className() const { return "Wefts::InvalidError"; }
00103
00104 };
00105
00107 class InitError: public Error
00108 {
00109 public:
00114 InitError( int code=0, std::string descr="Object cannot be initialized" );
00115
00117 virtual const std::string className() const { return "Wefts::InitError"; }
00118
00119 };
00120
00122 class StartError: public Error
00123 {
00124 public:
00129 StartError( int code=0, std::string descr="Can't start OS thread" );
00130
00132 virtual const std::string className() const { return "Wefts::StartError"; }
00133
00134 };
00135
00140 }
00141
00142 #endif
00143
00144