Coin
4.0.3
Coin3D core library
Loading...
Searching...
No Matches
ScXMLSubObject.h
1
#ifndef COIN_SCXMLSUBOBJECT_H
2
#define COIN_SCXMLSUBOBJECT_H
3
4
/**************************************************************************\
5
* Copyright (c) Kongsberg Oil & Gas Technologies AS
6
* All rights reserved.
7
*
8
* Redistribution and use in source and binary forms, with or without
9
* modification, are permitted provided that the following conditions are
10
* met:
11
*
12
* Redistributions of source code must retain the above copyright notice,
13
* this list of conditions and the following disclaimer.
14
*
15
* Redistributions in binary form must reproduce the above copyright
16
* notice, this list of conditions and the following disclaimer in the
17
* documentation and/or other materials provided with the distribution.
18
*
19
* Neither the name of the copyright holder nor the names of its
20
* contributors may be used to endorse or promote products derived from
21
* this software without specific prior written permission.
22
*
23
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
24
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
25
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
26
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
27
* HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
28
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
29
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
30
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
31
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
32
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
33
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
34
\**************************************************************************/
35
36
#include <Inventor/SbName.h>
37
38
/*
39
* This file contains macros for setting up the classes in the ScXML
40
* subsystem (Statechart XML) in Coin. They loosely follow the macros
41
* design for nodes and nodekits and engines, etc.
42
*/
43
44
// *************************************************************************
45
46
#define SCXML_OBJECT_HEADER(classname) \
47
public: \
48
static SoType getClassTypeId(void); \
49
virtual SoType getTypeId(void) const; \
50
static void * createInstance(void); \
51
private: \
52
static SoType classTypeId;
53
54
// *************************************************************************
55
56
#define SCXML_OBJECT_ABSTRACT_HEADER(classname) \
57
public: \
58
static SoType getClassTypeId(void); \
59
virtual SoType getTypeId(void) const = 0; \
60
private: \
61
static SoType classTypeId;
62
63
// *************************************************************************
64
65
#define SCXML_ELEMENT_ABSTRACT_HEADER(classname) \
66
SCXML_OBJECT_ABSTRACT_HEADER(classname)
67
68
// *************************************************************************
69
70
// FIXME: element-reader must be reenatrant/threadsafe
71
#define SCXML_ELEMENT_HEADER(classname) \
72
public: \
73
static ScXMLEltReader * getElementReader(void); \
74
private: \
75
static ScXMLEltReader * elementReader; \
76
SCXML_OBJECT_HEADER(classname)
77
78
// *************************************************************************
79
80
#define SCXML_OBJECT_SOURCE(classname) \
81
\
82
SoType classname::classTypeId = SoType::badType(); \
83
\
84
SoType \
85
classname::getClassTypeId(void) \
86
{ \
87
return classname::classTypeId; \
88
} \
89
\
90
SoType \
91
classname::getTypeId(void) const \
92
{ \
93
return classname::classTypeId; \
94
} \
95
\
96
void * \
97
classname::createInstance(void) \
98
{ \
99
return new classname; \
100
}
101
102
// *************************************************************************
103
104
#define SCXML_OBJECT_ABSTRACT_SOURCE(classname) \
105
\
106
SoType classname::classTypeId = SoType::badType(); \
107
\
108
SoType \
109
classname::getClassTypeId(void) \
110
{ \
111
return classname::classTypeId; \
112
}
113
114
#define SCXML_ELEMENT_ABSTRACT_SOURCE(classname) \
115
SCXML_OBJECT_ABSTRACT_SOURCE(classname)
116
117
#define SCXML_ELEMENT_SOURCE(classname) \
118
ScXMLEltReader * classname::elementReader = NULL; \
119
\
120
ScXMLEltReader * \
121
classname::getElementReader(void) \
122
{ \
123
return classname::elementReader; \
124
} \
125
\
126
SCXML_OBJECT_SOURCE(classname)
127
128
// *************************************************************************
129
130
#define SCXML_OBJECT_INIT_CLASS(thisclass, parentclass, parentname) \
131
do { \
132
SoType parenttype = SoType::fromName(SO__QUOTE(parentclass)); \
133
assert(parenttype != SoType::badType()); \
134
thisclass::classTypeId = \
135
SoType::createType(parenttype, \
136
SbName(SO__QUOTE(thisclass)), \
137
thisclass::createInstance); \
138
/* ScXMLObject::registerClassType(xmlns, xmlclass, \
139
thisclass::classTypeId); */
\
140
} while ( FALSE )
141
142
143
#define SCXML_ELEMENT_REGISTER_READER(thisclass, xmlelement, classname) \
144
do { \
145
thisclass::elementReader = new classname; \
146
} while ( FALSE )
147
148
#define SCXML_ELEMENT_UNREGISTER_READER(thisclass) \
149
do { \
150
delete thisclass::elementReader; \
151
thisclass::elementReader = NULL; \
152
} while ( FALSE )
153
154
// *************************************************************************
155
156
#define SCXML_OBJECT_INIT_ABSTRACT_CLASS(thisclass, parentclass, parentname) \
157
do { \
158
SoType parenttype = SoType::fromName(SO__QUOTE(parentclass)); \
159
assert(parenttype != SoType::badType()); \
160
thisclass::classTypeId = \
161
SoType::createType(parenttype, SbName(SO__QUOTE(thisclass))); \
162
} while ( FALSE )
163
164
// *************************************************************************
165
166
#define SCXML_INVOKE_INIT_CLASS(thisclass, parentclass, xmlns, targettype, source) \
167
do { \
168
SoType parenttype = SoType::fromName(SO__QUOTE(parentclass)); \
169
assert(parenttype != SoType::badType()); \
170
thisclass::classTypeId = \
171
SoType::createType(parenttype, \
172
SbName(SO__QUOTE(thisclass)), \
173
thisclass::createInstance); \
174
ScXMLObject::registerInvokeClassType(xmlns, targettype, source, \
175
thisclass::classTypeId); \
176
} while ( FALSE )
177
178
// *************************************************************************
179
180
181
#endif
// !COIN_SCXMLSUBOBJECT_H
include
Inventor
scxml
ScXMLSubObject.h
Generated on Sun Nov 17 2024 22:57:40 for Coin by
1.10.0