00001 /*00002 * The Software License00003 * =================================================================================00004 * Copyright (c) 2003-.The Terimber Corporation. All rights reserved.00005 * =================================================================================00006 * Redistributions of source code must retain the above copyright notice, 00007 * this list of conditions and the following disclaimer.00008 * Redistributions in binary form must reproduce the above copyright notice, 00009 * this list of conditions and the following disclaimer in the documentation 00010 * and/or other materials provided with the distribution.00011 * The end-user documentation included with the redistribution, if any, 00012 * must include the following acknowledgment:00013 * "This product includes software developed by the Terimber Corporation."00014 * =================================================================================00015 * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESSED OR IMPLIED WARRANTIES, 00016 * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY 00017 * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 00018 * IN NO EVENT SHALL THE TERIMBER CORPORATION OR ITS CONTRIBUTORS BE LIABLE FOR 00019 * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 00020 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 00021 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 00022 * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT00023 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE00024 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.00025 * ================================================================================00026 */00027
00028 #ifndef _terimber_except_h_00029 #define _terimber_except_h_00030
00031 #include "base/string.h"00032
00033 BEGIN_TERIMBER_NAMESPACE00034 #pragma pack(4)00035
00038class exception_item00039 {
00040 public:
00042 booloperator <(constexception_item& x) const;
00044 booloperator ==(constexception_item& x ) const;
00045
00046size_t_code;
00047constchar* _desc;
00048 };
00049
00052struct exception_table00053 {
00055 exception_table(exception_item* items
00056 );
00058 constchar*
00059 get_error( size_t code
00060 );
00061
00062 private:
00063exception_item* _items;
00064size_t_len;
00065 };
00066
00069class exception00070 {
00071 public:
00073 exception( size_tid,
00074 constwchar_t* desc
00075 );
00077 exception( size_tid,
00078 constchar* desc
00079 );
00081 virtual~exception();
00083 size_t00084 get_code() const;
00087 static00088 void00089 extract_os_error(size_t code,
00090 string_t& err
00091 );
00095 static00096 void00097 _throw( size_t code,
00098 exception_table* table
00099 );
00102 static00103 void00104 _throw( constwchar_t* desc
00105 );
00108 static00109 void00110 _throw( constchar* desc
00111 );
00114 constchar*
00115 what() const;
00116 private:
00117size_t_id;
00118string_t_reason;
00119 };
00120
00121 #pragma pack()00122 END_TERIMBER_NAMESPACE00123
00124 #endif // _terimber_except_h_00125