Coin Logo http://www.sim.no
http://www.coin3d.org

SoBase.h
1 #ifndef COIN_SOBASE_H
2 #define COIN_SOBASE_H
3 
4 /**************************************************************************\
5  *
6  * This file is part of the Coin 3D visualization library.
7  * Copyright (C) 1998-2007 by Systems in Motion. All rights reserved.
8  *
9  * This library is free software; you can redistribute it and/or
10  * modify it under the terms of the GNU General Public License
11  * ("GPL") version 2 as published by the Free Software Foundation.
12  * See the file LICENSE.GPL at the root directory of this source
13  * distribution for additional information about the GNU GPL.
14  *
15  * For using Coin with software that can not be combined with the GNU
16  * GPL, and for taking advantage of the additional benefits of our
17  * support services, please contact Systems in Motion about acquiring
18  * a Coin Professional Edition License.
19  *
20  * See http://www.coin3d.org/ for more information.
21  *
22  * Systems in Motion, Postboks 1283, Pirsenteret, 7462 Trondheim, NORWAY.
23  * http://www.sim.no/ sales@sim.no coin-support@coin3d.org
24  *
25 \**************************************************************************/
26 
27 #include <Inventor/SoType.h>
28 #include <Inventor/lists/SoAuditorList.h>
29 #include <Inventor/C/base/rbptree.h>
30 
31 // *************************************************************************
32 
33 class SbDict;
34 class SbString;
35 class SoBaseList;
36 class SoInput;
37 class SoOutput;
38 
39 // *************************************************************************
40 
41 class COIN_DLL_API SoBase {
42 
43 public:
44  static void initClass(void);
45 
46  void ref(void) const;
47  void unref(void) const;
48  void unrefNoDelete(void) const;
49  int32_t getRefCount(void) const;
50 
51  void touch(void);
52 
53  virtual SoType getTypeId(void) const = 0;
54  SbBool isOfType(SoType type) const;
55  static SoType getClassTypeId(void);
56 
57  virtual SbName getName(void) const;
58  virtual void setName(const SbName & newname);
59 
60  static void addName(SoBase * const base, const char * const name);
61  static void removeName(SoBase * const base, const char * const name);
62 
63  virtual void startNotify(void);
64  virtual void notify(SoNotList * l);
65 
66  void addAuditor(void * const auditor, const SoNotRec::Type type);
67  void removeAuditor(void * const auditor, const SoNotRec::Type type);
68  const SoAuditorList & getAuditors(void) const;
69 
70  virtual void addWriteReference(SoOutput * out, SbBool isfromfield = FALSE);
71  SbBool shouldWrite(void);
72 
73  static void incrementCurrentWriteCounter(void);
74  static void decrementCurrentWriteCounter(void);
75 
76  static SoBase * getNamedBase(const SbName & name, SoType type);
77  static int getNamedBases(const SbName & name, SoBaseList & baselist,
78  SoType type);
79 
80  static SbBool read(SoInput * in, SoBase *& base, SoType expectedtype);
81  static void setInstancePrefix(const SbString & c);
82 
83  static void setTraceRefs(SbBool trace);
84  static SbBool getTraceRefs(void);
85 
86  static SbBool connectRoute(SoInput * in,
87  const SbName & fromnodename, const SbName & fromfieldname,
88  const SbName & tonodename, const SbName & tofieldname);
89 
90  void assertAlive(void) const;
91  static SbBool readRoute(SoInput * in);
92 
93 protected:
94  // Note: these are bitflags.
95  enum BaseFlags { IS_ENGINE = 0x01, IS_GROUP = 0x02 };
96 
97  SoBase(void);
98  virtual ~SoBase();
99 
100  virtual void destroy(void);
101 
102  SbBool hasMultipleWriteRefs(void) const;
103  SbBool writeHeader(SoOutput * out, SbBool isgroup, SbBool isengine) const;
104  void writeFooter(SoOutput * out) const;
105  virtual const char * getFileFormatName(void) const;
106 
107  virtual SbBool readInstance(SoInput * in, unsigned short flags) = 0;
108 
109  static uint32_t getCurrentWriteCounter(void);
110  static void staticDataLock(void);
111  static void staticDataUnlock(void);
112 
113 private:
114  static SbBool readReference(SoInput * in, SoBase *& base);
115  static SbBool readBase(SoInput * in, SbName & classname, SoBase *& base);
116  static SbBool readBaseInstance(SoInput * in, const SbName & classname,
117  const SbName & refname, SoBase *& base);
118 
119  static SoBase * createInstance(SoInput * in, const SbName & classname);
120  static void flushInput(SoInput * in);
121 
122  static void cleanClass(void);
123 
124 // OBSOLETE! Just kept around for Coin 2.x ABI compatibility.
125  static void freeLists(unsigned long, void * value);
126 
127  static SoType classTypeId;
128 
129  struct {
130  int32_t referencecount : 27;
131  unsigned int ingraph : 1;
132  unsigned int alive : 4;
133  // The number of bits should sum up to 32, so we don't allocate
134  // more than one machine word on a 32-bit platform.
135  } objdata;
136 
137  void doNotify(SoNotList * l, const void * auditor, const SoNotRec::Type type);
138  static void rbptree_notify_cb(void * auditor, void * type, void * closure);
139  cc_rbptree auditortree;
140 
141  // OBSOLETE! Just kept around for Coin 2.x ABI compatibility.
142  static SbDict * name2obj;
143  static SbDict * obj2name;
144 
145  static SbString * refwriteprefix;
146 
147  static SbBool tracerefs;
148  static uint32_t writecounter;
149 };
150 
151 #endif // !COIN_SOBASE_H
SbPList::getLength
int getLength(void) const
Definition: SbPList.h:94
SoAuditorList::remove
void remove(const int index)
Definition: SoAuditorList.cpp:145
SoDB::getGlobalField
static SoField * getGlobalField(const SbName &name)
Definition: SoDB.cpp:1297
SoType::badType
static SoType badType(void)
Definition: SoType.cpp:664
SoInput::isFileVRML2
SbBool isFileVRML2(void)
Definition: SoInput.cpp:2730
SoBase::getNamedBase
static SoBase * getNamedBase(const SbName &name, SoType type)
Definition: SoBase.cpp:1072
SoBase::getFileFormatName
virtual const char * getFileFormatName(void) const
Definition: SoBase.cpp:1458
SoReadError::post
static void post(const SoInput *const in, const char *const format,...)
Definition: SoReadError.cpp:110
SbName::getLength
int getLength(void) const
Definition: SbName.cpp:287
SoField::getClassTypeId
static SoType getClassTypeId(void)
Definition: SoField.cpp:680
SoBase::destroy
virtual void destroy(void)
Definition: SoBase.cpp:405
SoBase::shouldWrite
SbBool shouldWrite(void)
Definition: SoBase.cpp:1040
SoType::fromName
static SoType fromName(const SbName name)
Definition: SoType.cpp:463
SbName
The SbName class stores strings by reference.
Definition: SbName.h:31
SoInput::findReference
virtual SoBase * findReference(const SbName &name) const
Definition: SoInput.cpp:1900
SoBaseList::append
void append(SoBase *ptr)
Definition: SoBaseList.cpp:94
SbPList::append
void append(void *item)
Definition: SbPList.h:78
SoDebugError::post
static void post(const char *const source, const char *const format,...)
Definition: SoDebugError.cpp:314
SoBaseList
The SoBaseList class is a container for pointers to SoBase derived objects.
Definition: SoBaseList.h:32
SoOutput::write
virtual void write(const char c)
Definition: SoOutput.cpp:757
SoOutput::indent
virtual void indent(void)
Definition: SoOutput.cpp:1074
SoOutput
The SoOutput class is an abstraction of an output stream.
Definition: SoOutput.h:42
SoBase::getCurrentWriteCounter
static uint32_t getCurrentWriteCounter(void)
Definition: SoBase.cpp:1467
SbPList
The SbPList class is a container class for void pointers.
Definition: SbPList.h:31
SoBase::getName
virtual SbName getName(void) const
Definition: SoBase.cpp:730
SoNotRec::Type
Type
Definition: SoNotRec.h:35
SbString::getSubString
SbString getSubString(int startidx, int endidx=-1) const
Definition: SbString.h:73
SoBase::removeAuditor
void removeAuditor(void *const auditor, const SoNotRec::Type type)
Definition: SoBase.cpp:948
SoBase::touch
void touch(void)
Definition: SoBase.cpp:700
SoBase::getClassTypeId
static SoType getClassTypeId(void)
Definition: SoBase.cpp:720
SoAuditorList::append
void append(void *const auditor, const SoNotRec::Type type)
Definition: SoAuditorList.cpp:75
SoDebugError::postWarning
static void postWarning(const char *const source, const char *const format,...)
Definition: SoDebugError.cpp:324
SoInput::getIVVersion
virtual float getIVVersion(void)
Definition: SoInput.cpp:1086
SoAuditorList
The SoAuditorList class is used to keep track of auditors for certain object classes.
Definition: SoAuditorList.h:43
SoBase::readInstance
virtual SbBool readInstance(SoInput *in, unsigned short flags)=0
SoNotRec
The SoNotRec class specifies records for notification lists.
Definition: SoNotRec.h:33
SoBase::notify
virtual void notify(SoNotList *l)
Definition: SoBase.cpp:909
SbList::append
void append(const Type item)
Definition: SbList.h:98
SbString
The SbString class is a string class with convenience functions for string operations.
Definition: SbString.h:42
SoInput::addReference
virtual void addReference(const SbName &name, SoBase *base, SbBool addToGlobalDict=1)
Definition: SoInput.cpp:1858
SoInput::addRoute
void addRoute(const SbName &fromnode, const SbName &fromfield, const SbName &tonode, const SbName &tofield)
Definition: SoInput.cpp:577
SoOutput::findReference
int findReference(const SoBase *base) const
Definition: SoOutput.cpp:1312
SoDB::endNotify
static void endNotify(void)
Definition: SoDB.cpp:1538
SoField::getContainer
SoFieldContainer * getContainer(void) const
Definition: SoField.cpp:1253
SoType::isDerivedFrom
SbBool isDerivedFrom(const SoType type) const
Definition: SoType.cpp:687
SoBase::BaseFlags
BaseFlags
Definition: SoBase.h:95
SoBase::writeHeader
SbBool writeHeader(SoOutput *out, SbBool isgroup, SbBool isengine) const
Definition: SoBase.cpp:1315
SoBase::unref
void unref(void) const
Definition: SoBase.cpp:627
SoField
The SoField class is the top-level abstract base class for fields.
Definition: SoField.h:38
SoBase::getNamedBases
static int getNamedBases(const SbName &name, SoBaseList &baselist, SoType type)
Definition: SoBase.cpp:1096
SoBase::getRefCount
int32_t getRefCount(void) const
Definition: SoBase.cpp:686
SoType
The SoType class is the basis for the run-time type system in Coin.
Definition: SoType.h:50
SoOutput::isBinary
virtual SbBool isBinary(void) const
Definition: SoOutput.cpp:650
SbList
The SbList class is a template container class for lists.
Definition: SoType.h:46
SoInput::removeReference
virtual void removeReference(const SbName &name)
Definition: SoInput.cpp:1876
SbName::getString
const char * getString(void) const
Definition: SbName.cpp:278
SoDebugError::postInfo
static void postInfo(const char *const source, const char *const format,...)
Definition: SoDebugError.cpp:334
SoDB::createRoute
static void createRoute(SoNode *from, const char *eventout, SoNode *to, const char *eventin)
Definition: SoDB.cpp:1934
SoDataSensor::notify
virtual void notify(SoNotList *l)
Definition: SoDataSensor.cpp:209
SoNotList::append
void append(SoNotRec *const rec)
Definition: SoNotification.cpp:66
SoBase::read
static SbBool read(SoInput *in, SoBase *&base, SoType expectedtype)
Definition: SoBase.cpp:1146
SoFieldContainer::initCopyDict
static void initCopyDict(void)
Definition: SoFieldContainer.cpp:744
SbList::getLength
int getLength(void) const
Definition: SbList.h:145
SoInput::putBack
virtual void putBack(const char c)
Definition: SoInput.cpp:1834
SoBase::addAuditor
void addAuditor(void *const auditor, const SoNotRec::Type type)
Definition: SoBase.cpp:933
SoInput::addProto
void addProto(SoProto *proto)
Definition: SoInput.cpp:611
SbName::isBaseNameStartChar
static SbBool isBaseNameStartChar(const char c)
Definition: SbName.cpp:355
SoNode::VRML2
@ VRML2
Definition: SoNode.h:62
SoBase::addWriteReference
virtual void addWriteReference(SoOutput *out, SbBool isfromfield=0)
Definition: SoBase.cpp:1002
SoType::getKey
int16_t getKey(void) const
Definition: SoType.h:110
SoBase
The SoBase class is the top-level superclass for a number of class-hierarchies.
Definition: SoBase.h:41
SoFieldContainer::copyDone
static void copyDone(void)
Definition: SoFieldContainer.cpp:929
SoBase::setTraceRefs
static void setTraceRefs(SbBool trace)
Definition: SoBase.cpp:1264
SoOutput::incrementIndent
void incrementIndent(const int levels=1)
Definition: SoOutput.cpp:1044
SoFieldContainer
The SoFieldContainer class is a base class for all classes that contain fields.
Definition: SoFieldContainer.h:35
SoBase::ref
void ref(void) const
Definition: SoBase.cpp:574
SoDataSensor
The SoDataSensor class is the abstract base class for sensors monitoring changes in a scene graph.
Definition: SoDataSensor.h:35
SbPList::remove
void remove(const int index)
Definition: SbPList.cpp:259
SoBase::setInstancePrefix
static void setInstancePrefix(const SbString &c)
Definition: SoBase.cpp:1248
SbName::isBaseNameChar
static SbBool isBaseNameChar(const char c)
Definition: SbName.cpp:387
SbDict
The SbDict class organizes a dictionary of keys and values.
Definition: SbDict.h:47
SoType::createInstance
void * createInstance(void) const
Definition: SoType.cpp:803
SoBase::startNotify
virtual void startNotify(void)
Definition: SoBase.cpp:857
SoField::getTypeId
virtual SoType getTypeId(void) const =0
SoBase::decrementCurrentWriteCounter
static void decrementCurrentWriteCounter(void)
Definition: SoBase.cpp:1058
SbString::sprintf
SbString & sprintf(const char *formatstr,...)
Definition: SbString.h:105
SoDB::startNotify
static void startNotify(void)
Definition: SoDB.cpp:1517
SoFieldContainer::notify
virtual void notify(SoNotList *l)
Definition: SoFieldContainer.cpp:562
SoBase::readRoute
static SbBool readRoute(SoInput *in)
Definition: SoBase.cpp:1876
SoBase::getTypeId
virtual SoType getTypeId(void) const =0
SoBase::~SoBase
virtual ~SoBase()
Definition: SoBase.cpp:339
SoOutput::getStage
Stage getStage(void) const
Definition: SoOutput.cpp:744
SoBase::SoBase
SoBase(void)
Definition: SoBase.cpp:298
SoInput::eof
virtual SbBool eof(void) const
Definition: SoInput.cpp:1796
SoType::createType
static const SoType createType(const SoType parent, const SbName name, const instantiationMethod method=(instantiationMethod) NULL, const uint16_t data=0)
Definition: SoType.cpp:256
SoBase::getTraceRefs
static SbBool getTraceRefs(void)
Definition: SoBase.cpp:1275
SoInput::read
virtual SbBool read(char &c)
Definition: SoInput.cpp:1180
SoInput::findProto
SoProto * findProto(const SbName &name)
Definition: SoInput.cpp:594
SoOutput::decrementIndent
void decrementIndent(const int levels=1)
Definition: SoOutput.cpp:1055
SoBase::writeFooter
void writeFooter(SoOutput *out) const
Definition: SoBase.cpp:1428
SoInput::isBinary
virtual SbBool isBinary(void)
Definition: SoInput.cpp:1096
SoBase::assertAlive
void assertAlive(void) const
Definition: SoBase.cpp:546
SbPList::find
int find(void *item) const
Definition: SbPList.cpp:212
SoInput
The SoInput class is an abstraction of file import functionality.
Definition: SoInput.h:55
SoBase::getAuditors
const SoAuditorList & getAuditors(void) const
Definition: SoBase.cpp:970
SoBase::isOfType
SbBool isOfType(SoType type) const
Definition: SoBase.cpp:710
SoNode
The SoNode class is the base class for nodes used in scene graphs.
Definition: SoNode.h:47
SoType::getName
SbName getName(void) const
Definition: SoType.cpp:628
SoInput::getCurrentProto
SoProto * getCurrentProto(void) const
Definition: SoInput.cpp:661
SoNotList::setLastType
void setLastType(const SoNotRec::Type type)
Definition: SoNotification.cpp:122
SoBase::staticDataUnlock
static void staticDataUnlock(void)
Definition: SoBase.cpp:2017
SoBase::initClass
static void initClass(void)
Definition: SoBase.cpp:455
SoField::isOfType
SbBool isOfType(const SoType type) const
Definition: SoField.cpp:690
SoBase::addName
static void addName(SoBase *const base, const char *const name)
Definition: SoBase.cpp:807
SbString::getLength
int getLength(void) const
Definition: SbString.h:63
SoBase::incrementCurrentWriteCounter
static void incrementCurrentWriteCounter(void)
Definition: SoBase.cpp:1049
SoBase::unrefNoDelete
void unrefNoDelete(void) const
Definition: SoBase.cpp:665
SbString::getString
const char * getString(void) const
Definition: SbString.h:71
SoNotList
The SoNotList class is a list of SoNotRec notification records.
Definition: SoNotification.h:34
SoBase::hasMultipleWriteRefs
SbBool hasMultipleWriteRefs(void) const
Definition: SoBase.cpp:1286
SoBase::removeName
static void removeName(SoBase *const base, const char *const name)
Definition: SoBase.cpp:831
SoNode::getByName
static SoNode * getByName(const SbName &name)
Definition: SoNode.cpp:729
SoBase::connectRoute
static SbBool connectRoute(SoInput *in, const SbName &fromnodename, const SbName &fromfieldname, const SbName &tonodename, const SbName &tofieldname)
Definition: SoBase.cpp:1853
SoBase::staticDataLock
static void staticDataLock(void)
Definition: SoBase.cpp:2007
SoAuditorList::getLength
int getLength(void) const
Definition: SoAuditorList.cpp:102
SoBase::setName
virtual void setName(const SbName &newname)
Definition: SoBase.cpp:763
SoType::canCreateInstance
SbBool canCreateInstance(void) const
Definition: SoType.cpp:786

Copyright © 1998-2007 by Systems in Motion AS. All rights reserved.

Generated on Mon Jul 27 2020 for Coin by Doxygen. 1.8.18