"Fossies" - the Fresh Open Source Software Archive 
Member "qdiff-0.9.1/texception.h" (21 Oct 2008, 4940 Bytes) of package /linux/privat/old/qdiff-0.9.1.tar.gz:
As a special service "Fossies" has tried to format the requested source page into HTML format using (guessed) C and C++ source code syntax highlighting (style:
standard) with prefixed line numbers and
code folding option.
Alternatively you can here
view or
download the uninterpreted source code file.
For more information about "texception.h" see the
Fossies "Dox" file reference documentation.
1 /*GPL*START*
2 *
3 * texception - basic exceptions
4 *
5 * Copyright (C) 1998 by Johannes Overmann <Johannes.Overmann@gmx.de>
6 *
7 * This program is free software; you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation; either version 2 of the License, or
10 * (at your option) any later version.
11 *
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
16 *
17 * You should have received a copy of the GNU General Public License
18 * along with this program; if not, write to the Free Software
19 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
20 * *GPL*END*/
21
22 #ifndef _ngw_texception_h_
23 #define _ngw_texception_h_
24
25 #include "config.h"
26
27 extern "C" {
28 #include <stdio.h>
29 #include <stdarg.h>
30 #include <string.h>
31 #include <errno.h>
32 }
33
34 // history:
35 // 1999:
36 // 17:02 04 Jun derived from terror.h
37 // 2000:
38 // 11:10 09 Jul tbaseexception and texception merged, message() and name() added
39 // 00:50 09 Jul internal error added
40
41 #define TExceptionN(n) public: virtual const char *name() const { return #n; }
42 #define TExceptionM(m) public: virtual const char *message() const { return m; }
43 #define TExceptionM1(m,a) public: virtual const char *message() const { char *buf; asprintf(&buf, m, a); return buf; }
44 #define TExceptionM2(m,a,b) public: virtual const char *message() const { char *buf; asprintf(&buf, m, a,b); return buf; }
45 #define TExceptionM3(m,a,b,c) public: virtual const char *message() const { char *buf; asprintf(&buf, m, a,b,c); return buf; }
46 #define TExceptionM4(m,a,b,c,d) public: virtual const char *message() const { char *buf; asprintf(&buf, m, a,b,c,d); return buf; }
47
48 // base class of all exceptions
49 class TException {
50 TExceptionN(TException);
51 virtual ~TException() {}
52 TExceptionM("(no message available)");
53 #ifndef __USE_GNU
54 static void asprintf(char **strp, const char *format, ...) {
55 va_list ap;
56 va_start(ap, format);
57 *strp = new char[1024];
58 vsprintf(*strp, format, ap);
59 va_end(ap);
60 }
61 #endif
62 #if !(defined HAVE_STRDUP)
63 static char *strdup(const char *str) { char *buf; vasprintf(&buf, "%s", str); return buf; }
64 #endif
65 };
66
67
68 // general exceptions, also base classes
69 class TIndexOutOfRangeException: public TException {
70 TExceptionN(TIndexOutOfRangeException);
71 TIndexOutOfRangeException(int lower_, int index_, int upper_):
72 lower(lower_), index(index_), upper(upper_) {}
73 TExceptionM3("index %d not in [%d..%d]", index, lower, upper);
74 int lower, index, upper;
75 };
76
77
78 class TZeroBasedIndexOutOfRangeException: public TIndexOutOfRangeException {
79 TExceptionN(TZeroBasedIndexOutOfRangeException);
80 TZeroBasedIndexOutOfRangeException(int index_, int total_num_): TIndexOutOfRangeException(0, index_, total_num_-1) {}
81 };
82
83
84 class TErrnoException: public TException {
85 TExceptionN(TErrnoException);
86 TErrnoException(int error = -1): err(error) { if(err < 0) err = errno; }
87 const char *str() const { if(err >= 0) return strerror(err); else return "(no error)"; }
88 int err;
89 TExceptionM2("%s (errno #%d)", str(), err);
90 };
91
92
93 class TOperationErrnoException: public TErrnoException {
94 TExceptionN(TOperationErrnoException);
95 TOperationErrnoException(const char *operation_, int error = -1): TErrnoException(error), operation(operation_) {}
96 const char *operation;
97 TExceptionM3("%s: %s (errno #%d)", operation, str(), err);
98 };
99
100
101 class TNotFoundException: public TException {
102 TExceptionN(TNotFoundException);
103 };
104
105
106 class TFileOperationErrnoException: public TErrnoException {
107 TExceptionN(TFileOperationErrnoException);
108 TFileOperationErrnoException(const char *filename_, const char *operation_, int err_ = -1):
109 TErrnoException(err_), filename(strdup(filename_)), operation(strdup(operation_)) {}
110 // virtual ~TFileOperationErrnoException() { free(filename); free(operation); }
111 const char *filename;
112 const char *operation;
113 TExceptionM3("%s: %s (during %s)", filename, TErrnoException::message(), operation);
114 // TExceptionM2("%s: %s (during )", filename, operation);
115 // TExceptionM("toll");
116 };
117
118
119 class TInternalErrorException: public TException {
120 TExceptionN(TInternalErrorException);
121 TInternalErrorException(const char *error_ = "unspecific error"): error(strdup(error_)) {}
122 // ~TInternalErrorException() { free(error); }
123 char *error;
124 TExceptionM1("internal error: %s", error);
125 };
126
127 class TNotInitializedException: public TInternalErrorException {
128 TExceptionN(TNotInitializedException);
129 TNotInitializedException(const char *type_name_): type_name(type_name_) {}
130 TExceptionM1("internal_error: object of type '%s' is not initialized", type_name ? type_name : "<unknown>");
131 const char *type_name;
132 };
133
134
135 #endif /* texception.h */