#include <ClassNode.h>
Inherits NamedObject.
Inherited by BaseContext.
Definition at line 63 of file ClassNode.h.
Public Types | |
enum | eVedaUpdate { eVedaUpdate_NoUpdate = 0, eVedaUpdate_MemberIsGoingToChange, eVedaUpdate_MemberChanged, eVedaUpdate_MemberChangedBecauseOfUndo, eVedaUpdate_MemberDestroyed, eVedaUpdate_ObjectNew, eVedaUpdate_ObjectDestroyed, eVedaUpdate_ObjectReCreated, eVedaUpdate_ObjectClosed, eVedaUpdate_NewRegisteredClass } |
enum used by BaseContext::NotifyObjectChange() to describe the notification meaning. Used by interfaces to monitor a context. More... | |
Public Member Functions | |
ClassNode (BaseObject::ClassDescription const &_classDescription) | |
Constructor. Need a BaseObject::m_Descriptor static member. _classDescription The static Class description structure. | |
virtual | ~ClassNode (void) |
Destructor. | |
void | CloseAllObjects () |
Declare all objects as if each were used with BaseObject::Close(). This can be used to force a re-creation of the whole context. | |
virtual const unsigned char * | Serialize_In (const unsigned char *_pDescriptionChunk) |
Read the object description from a byte chunk. Could crash if chunk not valid. It serializes first the class name, the number of object instancied, then then all object instancied, then all subclasses recursively. | |
virtual unsigned int | GetSerializedDescriptionSize (void) |
get the size of the whole byte chunk that will be written by Serialize_Out(). | |
virtual unsigned char * | Serialize_Out (unsigned char *_pDescriptionChunkToFill) |
write the Current object definition to a Chunk using private packed types, recursively. | |
BaseObject * | GetBaseObject (const char *_ObjectName) |
Find an Object instancied from that class or another subclass. It is needed in non-editable mode to get a given object in the context base. | |
BaseObject * | NewObject (const char *_ObjectName=0L) |
Factory Method to create a new Object in the context. All object members should be inited to default, then use BaseObject's Set methods in editable mode. This method is used in editable mode, but in serialize_in only mode, it does not compute a new name. | |
void | RegisterClassList (const BaseObject::ClassDescription *const *_ppclassDescriptionList) |
Register a 0-ended list of static class descriptors ( BaseObject::ClassDescription ) from objects inherited from BaseObject, to the context, down the class tree. It is used by to register the classes in a context, before any serialization or context edition. IMPORTANT: You must register the classes in an order so that the inherited classes are set after their parents. BaseContext registers BaseObject itself in its constructor. It can look like:. | |
void | DestroyManagedObject (BaseObject *_objectToDelete) |
In editable mode, it is possible to destroy an object from the context base: This should be only used privately by BaseContext. This version can only destroy objects managed by this ClassNode. This method is only compiled in editable mode. | |
virtual const char * | GetDisplayClassName () const |
return an explicit name for the class the object is instancied. | |
virtual const char * | GetDefaultObjectName () const |
return the default name that is set to new objects if not specified. | |
virtual const char * | GetClassHelpDescription () const |
return an explicit name for the class the object is instancied. | |
ClassNode * | GetSubClassNodeByDescription (const BaseObject::ClassDescription *_classDescription) |
Find a Son ClassNode by its static description. It looks recursively in all branches of the context. | |
const ClassNode * | GetFirstSonClassNode () const |
get the first son classnode if not a leaf class, else NULL.Used by editors. | |
const ClassNode * | GetNextBrotherClassNode () const |
get the next brother classnode. If we are the last broteher, NULL.Used by editors. | |
const PackList * | GetObjectList () const |
get the managed object list, in a read only way: you can get the object, edit the objects, but can't edit the list. Used by editors. | |
bool | IsAbstract () const |
false if class is able to create objects, true if virtual. | |
bool | IsUseful () const |
return true if this class has at least one object created, or got an inherited class that has at least an object created. false if it is not currently used. this method is used by serialize_out() to check if a class should be written. | |
virtual const unsigned char * | MergeSerialize_In (const unsigned char *_pDescriptionChunk, const char *_pendName=0L) |
Acts like Serialize_In() but keep all previous objects. So you can load and mix 2 or more context this way. | |
unsigned int | SetObjectsUniqueReferenceIndex (unsigned int _FirstnumberToSet=1, int _increment=1) |
reset a new unique index for PackObjectReference serialization. It does recursively in all branches of the context. This reference index is only valid during serialization. 1 is the minimum | |
virtual void | FlushNames () |
Set all object managed's name to "" (empty string) in order to same memory in the context. It is recursive to other sub classnodes. | |
BaseObject * | GetBaseObjectBySerializedIndex (unsigned int _index) |
Find an Object instancied from that class or another subclass by its serialized index. Should only be used by BaseContext::Serialize_In. | |
virtual const char * | GetClassID () const |
Each BaseType's inherited classes must explicit an ID for their class, or let use one of the super class at least through this virtual method. This is needed by GUIs to detect the types of each sub-members, and shape an interface for each Object according to their member list. | |
void | ExportCPPClassDescription (PackString &_fileTextImage) const |
tool for BaseContext::ExportAsCPPTableFile() , recursive write of a .cpp definition of a class description. | |
void | ExportCPPClassDescriptionLine (PackString &_fileTextImage) const |
tool for BaseContext::ExportAsCPPTableFile() , recursive write of a .cpp definition of a class description. | |
const BaseObject::ClassDescription * | CheckClassListError () const |
If RegisterClassList() detected something wrong about the class list, the faulty class is reported here. From now on, the only possible error is: 2 class have the same serializer ID, on the same hierarchy level. | |
unsigned int | GetChunkLength () |
the chunk length once serialized. should be valid just after in or out serialisation, but not if the object was modified. use GetSerializedDescriptionSize() instead. | |
const char * | GetName (void) const |
Return the name of the object as a character string. | |
void | SetName (const char *_pname) |
set the name of the object as a character string. This is copied of course. | |
virtual void | SetObjectThatManagesThis (BaseObject *_pManager) |
The Object this one belong to as a member. Should only be used at init. | |
virtual const char * | ValueToString () |
convert the value of this object to an explicit string. The object manages the string privately, so just read it or copy it. the string would be destroyed with the objects, and changed when using Set() methods. Note: this is not virtual, but each class can manage m_pValueString or not. | |
virtual Cell * | AddElement (int _indexWhereToInsert=-1, BaseType *_pObjectToAdd=0L) |
Add a new element, at the given index. | |
BaseType * | Get (unsigned int _index) |
get an element at a given index. | |
virtual void | DeleteElement (unsigned int _index) |
delete an element at a given object of the cell to destroy. does not destroy the object. | |
Cell * | GetFirstCell () const |
FirstCell or null if empty. | |
Cell * | GetLastCell () const |
the Last Cell or null if empty | |
unsigned int | GetNumberOfCell () const |
return the number of cell. | |
void | DeleteAllElements (void) |
close and destroy the whole list. | |
virtual unsigned int | WriteFile (const char *_pFileName) |
write a serialized form, using GetSerializedDescriptionSize() and Serialize_Out(). | |
virtual unsigned int | ReadFile (const char *_pFileName) |
Try to read a serialized form, using Serialize_In(). | |
void | SetMemberName (const char *_MemberName) |
Explicits the name of an object when used as a class member. It exists only in editable mode, and then can be used by any GUI. A member with an infoString not NULL, should be drawn in a GUI and receive updates. an object member with GetMemberName() returning NULL should not be edited by an interface or undo-managed. Use REGISTER_MEMBER macros family: it registers the members and use SetMemberName() automatically (or not, according to the compilation mode). | |
const char * | GetMemberName () const |
Explicits the name of an object when used as a class member. It exists only in editable mode, and then can be used by any GUI. A member with an infoString not NULL, should be drawn in a GUI and receive updates. an object member with GetMemberName() to NULL should not be edited by an interface or undo-managed. set with SetMemberName(). | |
void | SetMemberInfo (const char *_MemberInfo) |
Explicits the use of an object when used as a class member. It should explain what the member does for the object. It exists only in editable mode,and can be used by any GUI. Don't use html tags , only \n are allowed. Use REGISTER_MEMBER_INFO macro after the REGISTER_MEMBER macro in the constructors. It can be left NULL. | |
const char * | GetMemberInfo () const |
Explicits the use of an object when used as a class member. It exists only in editable mode and can be used by any GUI. It should explain what the member does for the object. | |
BaseObject * | GetObjectThatManagesThis () |
If there is any, get the object that manages this one as a member. | |
void | MakeCloneOf (BaseType &_ModelObject) |
Tool that makes an object take the values of another using serialization. Use with care: You got to clone a PackUlong with a PackULong, a PackString with a PackString: Clone Object of the same type or it will crash . A test is done at the beginning to check that for both types are the sames, if not it does nothing. however it may still crash with 2 objects from unherited classes. Also, some type like PackObjectReference, will not clone its value by copying a pointer.Reference member clonage is done with BaseObject::Clone(). | |
Protected Types | |
enum | eSerializationError |
an enum used by serialization. More... | |
Protected Member Functions | |
void | DestroyAllManagedObjects () |
Destroy all managed object. Used to clean up the whole context. | |
void | ProtectedDestroyAllObjects () |
Destroy all managed object, and all object of all subclasses recursively. | |
void | ProtectedDestroyAllIndependantObjects (BaseObject *_pObjectWhichAllOtherShouldDependOn) |
Remove all objects that are not refered directly or indirectly by the object passed. | |
void | ProtectedAddSameClasses (BaseContext *_pContextToAddManagement) |
register management of the same classes to another context. (and so create another ClassNodes to it.) Used by BaseContext::CloneClassesAndObjects(). | |
void | RegisterSerializableMember (BaseType &_object) |
Register any serializable object to serialize for read or write operation, Use it in objects constructors. The object are serialized in the file in the same order as they are given by this method. | |
void | BeginChangeNotification () |
In edition mode, when a member of an object is changed (like in a Set()), you got to use BeginChangeNotification(), make your changes, and then EndChangeNotification(), so that the edition of this object and member is known by the context, and allows it to manage a GUI update and the undo stack. | |
void | EndChangeNotification () |
In edition mode, when a member of an object is changed (like in a Set()), you got to use BeginChangeNotification(), make your changes, and then EndChangeNotification(), so that the edition of this object and member is known by the context, and allows it to manage a GUI update and the undo stack. | |
Protected Attributes | |
const BaseObject::ClassDescription * | m_ClassDescription |
reference to the static class descriptor. This classNode manages this class in this context. | |
unsigned int | m_NumberOfObjectInstancied |
Serializable member that stands for the number of objects instancied. | |
eSerializationError | m_SerializationState |
this explicit the state after the last Serialize_In() done. | |
PackList | m_BaseObjectList |
object that handle the object list: it is serialized without registration | |
ClassNode * | m_pNextBrotherClassNode |
pointer to Next class which inherit from the same upper class, or NULL (if it ends the list) . | |
ClassNode * | m_pFirstSonClassNode |
pointer to the First classNode which class managed inherit from the class managed here, or NULL. | |
volatile bool | m_OwnerThreadIsCurrentlyManagingObjects |
Thread management: lock from the thread editing objects:. | |
volatile int | m_TESTDEBUG_CONTEXTLOCK_ID |
test debug member, to check the lock state of a context if a crash occurs because of a bad lock. | |
volatile unsigned int | m_NumberOfThreadsCurrentlyLockingTheContext |
Thread management: number of threads currently using objects. This should come back to zero most of the times. | |
const BaseObject::ClassDescription * | m_pLastClassDescWithFaultySerializer |
if a faulty class descriptor was registered, report it: It's a developper debugger feature. | |
PackULong | mSerUlong_ChunkLength |
all named objects, ClassNode and BaseObjects, has the ability to jump over the chunk without reading it: | |
PackString | mSerStr_ObjectName |
BaseContext * | m_pBaseContext |
an object can belong (or not) to a BaseContext, as an object. | |
Cell * | m_pFirstCell |
member that manages the list of members to serialize automatically. | |
Cell * | m_pLastCell |
another member that manages the list of members to serialize automatically, and allow to grow the list by the end. | |
unsigned int | m_NumberOfCell |
the number of cell. | |
BaseObject * | m_pObjectThatManagesThis |
an object can belong (or not) to a BaseObject,( and to a BaseContext through it). | |
const char * | m_pMemberName |
If used as a member in an object, the member name, or NULL (not editable member). | |
const char * | m_pMemberInfo |
a short string explaining what's the object for in editable mode. OK if NULL (no info). | |
PackString * | m_pValueString |
a string standing for an expression of the value of the object: | |
unsigned char * | m_pPreviousValueShape |
used as a temp for object change notification in Begin/EndChangeNotification(): | |
unsigned int | m_PreviousValueShapeLength |
|
an enum used by serialization.
Definition at line 315 of file ClassNode.h. |
|
enum used by BaseContext::NotifyObjectChange() to describe the notification meaning. Used by interfaces to monitor a context.
Definition at line 194 of file BaseType.h. |
|
Constructor. Need a BaseObject::m_Descriptor static member. _classDescription The static Class description structure.
|
|
Destructor.
|
|
Add a new element, at the given index.
Reimplemented in PackList, PackList_TimeBlockTrack, and PackList_TimeTrack. |
|
In edition mode, when a member of an object is changed (like in a Set()), you got to use BeginChangeNotification(), make your changes, and then EndChangeNotification(), so that the edition of this object and member is known by the context, and allows it to manage a GUI update and the undo stack.
|
|
If RegisterClassList() detected something wrong about the class list, the faulty class is reported here. From now on, the only possible error is: 2 class have the same serializer ID, on the same hierarchy level.
|
|
close and destroy the whole list.
|
|
delete an element at a given object of the cell to destroy. does not destroy the object.
Reimplemented in PackList. |
|
Destroy all managed object. Used to clean up the whole context.
|
|
In editable mode, it is possible to destroy an object from the context base: This should be only used privately by BaseContext. This version can only destroy objects managed by this ClassNode. This method is only compiled in editable mode.
|
|
In edition mode, when a member of an object is changed (like in a Set()), you got to use BeginChangeNotification(), make your changes, and then EndChangeNotification(), so that the edition of this object and member is known by the context, and allows it to manage a GUI update and the undo stack.
|
|
tool for BaseContext::ExportAsCPPTableFile() , recursive write of a .cpp definition of a class description.
|
|
tool for BaseContext::ExportAsCPPTableFile() , recursive write of a .cpp definition of a class description.
|
|
Set all object managed's name to "" (empty string) in order to same memory in the context. It is recursive to other sub classnodes.
|
|
get an element at a given index.
|
|
Find an Object instancied from that class or another subclass. It is needed in non-editable mode to get a given object in the context base.
|
|
Find an Object instancied from that class or another subclass by its serialized index. Should only be used by BaseContext::Serialize_In.
|
|
the chunk length once serialized. should be valid just after in or out serialisation, but not if the object was modified. use GetSerializedDescriptionSize() instead.
Definition at line 65 of file NamedObject.h. References PackULong::Get(), and NamedObject::mSerUlong_ChunkLength. |
|
return an explicit name for the class the object is instancied.
Definition at line 186 of file ClassNode.h. References m_ClassDescription, and BaseObject::ClassDescription::m_ClassHelpDescription. |
|
Each BaseType's inherited classes must explicit an ID for their class, or let use one of the super class at least through this virtual method. This is needed by GUIs to detect the types of each sub-members, and shape an interface for each Object according to their member list.
Reimplemented from PackStruct. Reimplemented in BaseContext. Definition at line 274 of file ClassNode.h. |
|
return the default name that is set to new objects if not specified.
Definition at line 179 of file ClassNode.h. References m_ClassDescription, and BaseObject::ClassDescription::m_DefaultObjectName. |
|
return an explicit name for the class the object is instancied.
Definition at line 172 of file ClassNode.h. References m_ClassDescription, and BaseObject::ClassDescription::m_DisplayClassName. |
|
FirstCell or null if empty.
Definition at line 171 of file PackStruct.h. References PackStruct::m_pFirstCell. Referenced by LightModel::GetFirstDifuseLight(), and LightModel::GetFirstLinearLight(). |
|
get the first son classnode if not a leaf class, else NULL.Used by editors.
Definition at line 200 of file ClassNode.h. References m_pFirstSonClassNode. |
|
the Last Cell or null if empty
Definition at line 176 of file PackStruct.h. References PackStruct::m_pLastCell. Referenced by PackList_TimeTrack::GetEndTime(). |
|
Explicits the use of an object when used as a class member. It exists only in editable mode and can be used by any GUI. It should explain what the member does for the object.
Definition at line 144 of file BaseType.h. References BaseType::m_pMemberInfo. |
|
Explicits the name of an object when used as a class member. It exists only in editable mode, and then can be used by any GUI. A member with an infoString not NULL, should be drawn in a GUI and receive updates. an object member with GetMemberName() to NULL should not be edited by an interface or undo-managed. set with SetMemberName().
Definition at line 123 of file BaseType.h. References BaseType::m_pMemberName. |
|
Return the name of the object as a character string.
Definition at line 71 of file NamedObject.h. References PackString::Get(), and NamedObject::mSerStr_ObjectName. |
|
get the next brother classnode. If we are the last broteher, NULL.Used by editors.
Definition at line 207 of file ClassNode.h. References m_pNextBrotherClassNode. |
|
return the number of cell.
Definition at line 181 of file PackStruct.h. References PackStruct::m_NumberOfCell. |
|
get the managed object list, in a read only way: you can get the object, edit the objects, but can't edit the list. Used by editors.
Definition at line 214 of file ClassNode.h. References m_BaseObjectList. |
|
If there is any, get the object that manages this one as a member.
Definition at line 170 of file BaseType.h. References BaseType::m_pObjectThatManagesThis. |
|
get the size of the whole byte chunk that will be written by Serialize_Out().
Reimplemented from NamedObject. Reimplemented in BaseContext. |
|
Find a Son ClassNode by its static description. It looks recursively in all branches of the context.
|
|
false if class is able to create objects, true if virtual.
Definition at line 221 of file ClassNode.h. References m_ClassDescription, and BaseObject::ClassDescription::m_NewMethod. |
|
return true if this class has at least one object created, or got an inherited class that has at least an object created. false if it is not currently used. this method is used by serialize_out() to check if a class should be written.
|
|
Tool that makes an object take the values of another using serialization. Use with care: You got to clone a PackUlong with a PackULong, a PackString with a PackString: Clone Object of the same type or it will crash . A test is done at the beginning to check that for both types are the sames, if not it does nothing. however it may still crash with 2 objects from unherited classes. Also, some type like PackObjectReference, will not clone its value by copying a pointer.Reference member clonage is done with BaseObject::Clone().
|
|
Acts like Serialize_In() but keep all previous objects. So you can load and mix 2 or more context this way.
Reimplemented in BaseContext. |
|
Factory Method to create a new Object in the context. All object members should be inited to default, then use BaseObject's Set methods in editable mode. This method is used in editable mode, but in serialize_in only mode, it does not compute a new name.
|
|
register management of the same classes to another context. (and so create another ClassNodes to it.) Used by BaseContext::CloneClassesAndObjects().
|
|
Remove all objects that are not refered directly or indirectly by the object passed.
|
|
Destroy all managed object, and all object of all subclasses recursively.
|
|
Try to read a serialized form, using Serialize_In().
|
|
Register any serializable object to serialize for read or write operation, Use it in objects constructors. The object are serialized in the file in the same order as they are given by this method.
|
|
Read the object description from a byte chunk. Could crash if chunk not valid. It serializes first the class name, the number of object instancied, then then all object instancied, then all subclasses recursively.
Reimplemented from NamedObject. Reimplemented in BaseContext. |
|
write the Current object definition to a Chunk using private packed types, recursively.
Reimplemented from NamedObject. Reimplemented in BaseContext. |
|
Explicits the use of an object when used as a class member. It should explain what the member does for the object. It exists only in editable mode,and can be used by any GUI. Don't use html tags , only \n are allowed. Use REGISTER_MEMBER_INFO macro after the REGISTER_MEMBER macro in the constructors. It can be left NULL.
|
|
Explicits the name of an object when used as a class member. It exists only in editable mode, and then can be used by any GUI. A member with an infoString not NULL, should be drawn in a GUI and receive updates. an object member with GetMemberName() returning NULL should not be edited by an interface or undo-managed. Use REGISTER_MEMBER macros family: it registers the members and use SetMemberName() automatically (or not, according to the compilation mode).
|
|
set the name of the object as a character string. This is copied of course.
|
|
reset a new unique index for PackObjectReference serialization. It does recursively in all branches of the context. This reference index is only valid during serialization. 1 is the minimum
|
|
The Object this one belong to as a member. Should only be used at init.
Reimplemented from BaseType. Reimplemented in PackResource. |
|
convert the value of this object to an explicit string. The object manages the string privately, so just read it or copy it. the string would be destroyed with the objects, and changed when using Set() methods. Note: this is not virtual, but each class can manage m_pValueString or not.
Reimplemented from BaseType. Reimplemented in PackDynamicType. |
|
write a serialized form, using GetSerializedDescriptionSize() and Serialize_Out().
|
|
object that handle the object list: it is serialized without registration
Definition at line 323 of file ClassNode.h. Referenced by GetObjectList(). |
|
reference to the static class descriptor. This classNode manages this class in this context.
Definition at line 308 of file ClassNode.h. Referenced by GetClassHelpDescription(), GetDefaultObjectName(), GetDisplayClassName(), and IsAbstract(). |
|
the number of cell.
Definition at line 197 of file PackStruct.h. Referenced by PackStruct::GetNumberOfCell(). |
|
Serializable member that stands for the number of objects instancied.
Definition at line 311 of file ClassNode.h. |
|
Thread management: number of threads currently using objects. This should come back to zero most of the times.
Definition at line 337 of file ClassNode.h. |
|
Thread management: lock from the thread editing objects:.
Definition at line 333 of file ClassNode.h. |
|
an object can belong (or not) to a BaseContext, as an object.
Definition at line 93 of file NamedObject.h. Referenced by BaseObject::GetContext(). |
|
member that manages the list of members to serialize automatically.
Definition at line 193 of file PackStruct.h. Referenced by PackStruct::GetFirstCell(). |
|
pointer to the First classNode which class managed inherit from the class managed here, or NULL.
Definition at line 329 of file ClassNode.h. Referenced by GetFirstSonClassNode(). |
|
another member that manages the list of members to serialize automatically, and allow to grow the list by the end.
Definition at line 195 of file PackStruct.h. Referenced by PackStruct::GetLastCell(). |
|
if a faulty class descriptor was registered, report it: It's a developper debugger feature.
Definition at line 341 of file ClassNode.h. |
|
a short string explaining what's the object for in editable mode. OK if NULL (no info).
Definition at line 259 of file BaseType.h. Referenced by BaseType::GetMemberInfo(). |
|
If used as a member in an object, the member name, or NULL (not editable member).
Definition at line 255 of file BaseType.h. Referenced by BaseType::GetMemberName(). |
|
pointer to Next class which inherit from the same upper class, or NULL (if it ends the list) .
Definition at line 326 of file ClassNode.h. Referenced by GetNextBrotherClassNode(). |
|
an object can belong (or not) to a BaseObject,( and to a BaseContext through it).
Definition at line 251 of file BaseType.h. Referenced by BaseType::GetObjectThatManagesThis(). |
|
used as a temp for object change notification in Begin/EndChangeNotification():
Definition at line 269 of file BaseType.h. |
|
a string standing for an expression of the value of the object:
Definition at line 264 of file BaseType.h. |
|
this explicit the state after the last Serialize_In() done.
Definition at line 320 of file ClassNode.h. |
|
test debug member, to check the lock state of a context if a crash occurs because of a bad lock.
Definition at line 335 of file ClassNode.h. |
|
Serializable member that stands for the name of the object, and can be used to reference it in the context database. A name should not (and can't) be used twice in the whole context. Definition at line 90 of file NamedObject.h. Referenced by NamedObject::GetName(). |
|
all named objects, ClassNode and BaseObjects, has the ability to jump over the chunk without reading it:
Definition at line 86 of file NamedObject.h. Referenced by NamedObject::GetChunkLength(). |
/\/\ 4 N k ! N D _______ _ __ ___ _____ ___ _ _ ____ ___________ __//___ /________ |/ / ___________\_______/ \ / _ _ \/ _ / _ / _/_/____/ _ __ / / / / / / / \ \/ / / \ \ / \\___/___/___/ ¯ _____/_____/ ______\___/_____/\________\\ \________/_ ___ __ l____\ /elD! http://www.m4nkind.com \____/