File: SoError.h

package info (click to toggle)
inventor 2.1.5-10%2Bdfsg-2
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 35,712 kB
  • sloc: ansic: 33,864; lisp: 7,361; cpp: 3,874; yacc: 369; sh: 360; perl: 234; awk: 141; makefile: 80; csh: 35; sed: 11
file content (189 lines) | stat: -rw-r--r-- 6,874 bytes parent folder | download | duplicates (11)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
/*
 *
 *  Copyright (C) 2000 Silicon Graphics, Inc.  All Rights Reserved. 
 *
 *  This library is free software; you can redistribute it and/or
 *  modify it under the terms of the GNU Lesser General Public
 *  License as published by the Free Software Foundation; either
 *  version 2.1 of the License, or (at your option) any later version.
 *
 *  This library is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 *  Lesser General Public License for more details.
 *
 *  Further, this software is distributed without any warranty that it is
 *  free of the rightful claim of any third person regarding infringement
 *  or the like.  Any license provided herein, whether implied or
 *  otherwise, applies only to this software file.  Patent licenses, if
 *  any, provided herein do not apply to combinations of this program with
 *  other software, or any other product whatsoever.
 * 
 *  You should have received a copy of the GNU Lesser General Public
 *  License along with this library; if not, write to the Free Software
 *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 *
 *  Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pkwy,
 *  Mountain View, CA  94043, or:
 * 
 *  http://www.sgi.com 
 * 
 *  For further information regarding this notice, see: 
 * 
 *  http://oss.sgi.com/projects/GenInfo/NoticeExplan/
 *
 */

//  -*- C++ -*-

/*
 * Copyright (C) 1990,91   Silicon Graphics, Inc.
 *
 _______________________________________________________________________
 ______________  S I L I C O N   G R A P H I C S   I N C .  ____________
 |
 |   $Revision: 1.2 $
 |
 |   Description:
 |	This file defines the base SoError class.
 |
 |   Classes:
 |	SoError
 |
 |   Author(s)		: Paul S. Strauss
 |
 ______________  S I L I C O N   G R A P H I C S   I N C .  ____________
 _______________________________________________________________________
 */

#ifndef  _SO_ERROR
#define  _SO_ERROR

//////////////////////////////////////////////////////////////////////////////
//
//  Class: SoError
//
//  This is the base class for all error classes, which provide error
//  handling for applications.
//
//  There are two facets to errors: posting and handling. An error is
//  posted when some bad condition occurs. Posting is done primarily
//  by the Inventor library itself, but extenders can post their own
//  errors. Posting an error creates an instance of the appropriate
//  error class (or subclass) and then passes it to the active error
//  handler. The default handler just prints an appropriate message to
//  stderr. Applications can override this behavior by supplying a
//  different handler (by specifying a callback function).
//
//  Each subclass of SoError supports the setHandlerCallback() method,
//  which is used to set the callback function to handle errors. The
//  callback for the most derived class of a specific error instance
//  is used to handle an event.
//
//  The error instance passed to a callback is deleted immediately
//  after the callback is called; an application that wishes to save
//  info from the instance has to copy it out first.
//
//  Each error class contains a run-time class type id (SoType) that
//  can be used to determine the type of an instance. The base class
//  defines a character string that represents a detailed error
//  message that is printed by the default handler.
//
//  All handlers are called by the SoError::handleError() method. When
//  debugging, you can set a breakpoint on this method to stop right
//  before an error is handled.
//
//////////////////////////////////////////////////////////////////////////////

#include <Inventor/SbString.h>
#include <Inventor/SoType.h>

class SoError;		// Forward reference

class SoBase;
class SoEngine;
class SoNode;
class SoPath;

// Error handling callbacks are of this type:
typedef void	SoErrorCB(const SoError *error, void *data);

// C-api: prefix=SoErr
class SoError {

  public:
    // Sets/returns handler callback for SoError class
    // C-api: name=setHndlrCB
    static void		setHandlerCallback(SoErrorCB *cb, void *data)
	{ handlerCB = cb; cbData = data; }
    // C-api: name=getHndlrCB
    static SoErrorCB *	getHandlerCallback()	{ return handlerCB; }
    // C-api: name=getHndlrData
    static void *	getHandlerData()	{ return cbData; }

    // Returns debug string containing full error info from instance
    // C-api: name=getDbgStr
    const SbString &	getDebugString() const { return debugString; }

    // Returns type identifier for SoError class
    static SoType	getClassTypeId()	{ return classTypeId; }

    // Returns type identifier for error instance
    // C-api: expose
    virtual SoType	getTypeId() const;

    // Returns TRUE if instance is of given type or is derived from it
    SbBool		isOfType(SoType type) const;

  SoEXTENDER public:
    // Posts an error. The debugString will be created from the given
    // arguments, which are in printf() format
    static void		post(const char *formatString ...);

    // These are convenience functions that return a printable string
    // representing the given object. For example, a node is
    // represented by name (if it has one) and by address; the
    // returned string will be something like:
    //    node named "squid" at address 0x1004dcba
    static SbString	getString(const SoNode *node);
    static SbString	getString(const SoPath *path);
    static SbString	getString(const SoEngine *engine);

  SoINTERNAL public:
    // Initializes SoError class
    static void		initClass();

    // Initialize ALL Inventor error classes
    static void		initClasses();

  protected:
    // The default error handler callback - it just prints to stderr
    static void		defaultHandlerCB(const SoError *error, void *data);

    // Returns handler callback (and data) to use for a given instance
    virtual SoErrorCB *	getHandler(void *&data) const;

    // Sets/appends to the debug string
    void		setDebugString(const char *string)
	{ debugString = string; }
    void		appendToDebugString(const char *string)
	{ debugString += string; }

    // Calls appropriate handler for an error instance. Application
    // writers can set breakpoints at this when debugging.
    void		handleError();

    virtual ~SoError() {}

  private:
    static SoType	classTypeId;	// Type id of SoError class
    static SoErrorCB	*handlerCB;	// Handler callback for SoError class
    static void		*cbData;	// User data for callback
    static SbBool	wasInitted;	// TRUE if error class initialized
    SbString		debugString;	// Detailed error message string

    // The getString() methods use this one
    static SbString	getBaseString(const SoBase *base, const char *what);
};

#endif /* _SO_ERROR */