3DCoat Core API
The 3DCoat API documentation.
Loading...
Searching...
No Matches
Public Member Functions | List of all members
ClassArray< X > Class Template Reference

The array of elements derived from the BaseClass. If you create ClassArray and register if with the REG_AUTO the class may be easily serialized. This is the easiest way to serialize array of elements of show it in the UI. More...

#include <classlist.h>

Inheritance diagram for ClassArray< X >:
BaseClass

Public Member Functions

 ClassArray (const ClassArray< X > &src)
 
void operator= (const ClassArray< X > &src)
 
virtual void reset_class (void *ptr)
 Clearing all registered content of the class. If DataPtr is nullptr, this class will be cleared.
 
void Clear ()
 
const char * GetClassName () const override
 return class name there if need. Usually you don't need, if you are using AUTONEW or SERIALIZE
 
int GetAmountOfElements () override
 return complete amount of elements. Even invisible, masked and non-serialized elements will be counted
 
virtual void CountObjects (int &required_index, int *counter, HashSummator *hash, BaseClassElement *result, const std::function< bool(BaseClassElement *)> *ForEachElem, bool OnlyPointersMode) override
 This is the main function used for the access to class members. Each class that has SERIALIZE section creates this function automatically.
It may count members, return hash, give element-wise access to any member. Instead of keeping registered fields that routine gives fast dynamic access to any member.
If you making own container, you should create this function as well, othervice your class will not be serialized correctly even if you will make GetElement(...) function.
 
X * End () const
 
int Add (X *V)
 
int Add (X *V, int N)
 
bool Insert (int pos, X *V)
 
virtual bool Load (TagsList &xml, void *ClassPtr, void *Extra=NULL) override
 Load the class from the XML structure.
 
virtual bool IsArray () const override
 
virtual int ExpandWith (const char *ElmName, void *base)
 Expand array with class ElmName.
 
virtual bool DelElement (int index)
 removes element if the operation supported
 
void Del (int index, int n)
 
virtual bool CheckDirectCasting () const override
 
virtual bool FullCopy (const void *SrcData, const void *SrcDataExtra, BaseClass *Dest, void *DestData, void *DestExtraPtr, CECopyContext *C) override
 Fast copy from one BaseClass to another. Names and types correspondence used to copy.
 
virtual void SaveBin (void *Data, void *Extra, BinStream *Out, Enumerator *ExDictionary, Enumerator *SkipList) override
 Save in binaly form. Use only for temporary storage in memory!!!
 
virtual void LoadBin (void *Data, void *Extra, BinStream *In, Enumerator *ExDictionary) override
 Load the class from the memory. Use only for temporary storage in memory!!!
 
X * GetLast ()
 
 AUTONEW (ClassArray)
 
- Public Member Functions inherited from BaseClass
BaseClassGetRoot ()
 BaseClass is like a tree, and you always can get the root of the tree using this function.
 
 BaseClass (const BaseClass &)
 
virtual ~BaseClass ()
 virtual destructor
 
virtual DWORD GetClassMask ()
 Masking elements of class. Each member has mask. Element is serializable/visible only if (it's_mask & hosting_class_mask) != 0.
 
DWORD & ClassMask ()
 
virtual void reset_class (void *DataPtr=nullptr)
 Clearing all registered content of the class. If DataPtr is nullptr, this class will be cleared.
 
virtual void CountObjects (int &required_index, int *counter, HashSummator *hash, BaseClassElement *result, const std::function< bool(BaseClassElement *)> *ForEachElem=nullptr, bool OnlyPointersMode=false)
 This is the main function used for the access to class members. Each class that has SERIALIZE section creates this function automatically.
It may count members, return hash, give element-wise access to any member. Instead of keeping registered fields that routine gives fast dynamic access to any member.
If you making own container, you should create this function as well, othervice your class will not be serialized correctly even if you will make GetElement(...) function.
 
void ForEach (const std::function< bool(BaseClassElement *el)> &fn, bool OnlyPointsers=false)
 Calls function for each class member. This function used in _EACH ... _EACH_END cycle.
 
virtual bool CopyBaseClass (BaseClass *Dest, bool Add=false)
 Copy base class to other class uning names correspondence.
 
virtual void Save (TagsList &xml, void *ClassPtr, void *Extra=NULL)
 Save class to the XML structure.
 
virtual bool Load (TagsList &xml, void *ClassPtr, void *Extra=NULL)
 Load the class from the XML structure.
 
virtual bool FullCopy (const void *SrcData, const void *SrcDataExtra, BaseClass *Dest, void *DestData, void *DstDataExtra, CECopyContext *C)
 Fast copy from one BaseClass to another. Names and types correspondence used to copy.
 
virtual void SaveBin (void *Data, void *Extra, BinStream *Out, Enumerator *ExDictionary, Enumerator *SkipList)
 Save in binaly form. Use only for temporary storage in memory!!!
 
virtual void LoadBin (void *Data, void *Extra, BinStream *In, Enumerator *ExDictionary)
 Load the class from the memory. Use only for temporary storage in memory!!!
 
virtual void UpdateHash (HashSummator &S, void *data=nullptr, void *extra=nullptr)
 returns hash value dependent on data fields of this class
 
virtual int GetAmountOfElementsInUI ()
 return amount of elements represented in UI
 
virtual int GetAmountOfElementsInXML ()
 return amount of elements taht will be stored in XML
 
virtual cStruct * pySerialize ()
 returns a list of python-generated properties for serialization and UI
 
virtual const char * GetClassName () const
 return class name there if need. Usually you don't need, if you are using AUTONEW or SERIALIZE
 
virtual void RegisterMembers ()
 Reload this function to register members. Usually you don't need to do this if you are using any of SERIALIZE methods of registration.
 
virtual int GetAmountOfElements ()
 return complete amount of elements. Even invisible, masked and non-serialized elements will be counted
 
virtual bool CheckDirectCasting () const
 
virtual int GetClassSize () const
 return actual size of this class
 
virtual BaseClassnew_element () const
 construct pointer to class of the same type like this. Elements will not be copied into the new place
 
virtual bool GetElement (BaseClassElement &res, int idx, const void *Ptr=nullptr, const void *Extra=nullptr)
 
bool GetElementByName (const char *Name, void *Ptr, void *Extra, BaseClassElement &res, bool UI=false, bool Serialize=true)
 The function returns complete information about the member by it's name.
 
bool GetElementByNameAndType (const char *Name, const char *Type, void *Ptr, void *Extra, BaseClassElement &res, bool UI=false, bool Serialize=true)
 
void DeleteDefaultSubFields (TagsList &xml, void *ClassPtr, void *Extra=NULL)
 Short form saving. Fields that are unchanged in comparison to default will be skipped in XML.
 
virtual bool ShouldSaveInShortForm ()
 Return true if class should be saved in short form mandatory.
 
virtual int ExpandWith (const char *ElmName, void *base)
 Expand array with class ElmName.
 
virtual bool DelElement (int Index)
 removes element if the operation supported
 
template<class Type = BaseClass>
bool valid () const
 call it to check if this BaseClass pointer is valid
 
template<>
bool valid () const
 
BaseClassauto_cast (void *ptr) const
 if class is directly castable the function returns ptr cased to BaseClass, othervice this pointrer returned. If NULL returned - something is wrong.
 
virtual bool ReadFromFile (const char *Name, bool very_safe_with_backup=false)
 Save the object to file or binary stream. Example.
 
virtual bool WriteToFile (const char *Name)
 
virtual bool WriteToFileIfChanged (const char *Name)
 
virtual void ToBS (BinStream &bs, bool IncludeLength)
 
virtual void FromBS (BinStream &bs)
 
virtual void ToBS (BinStream &bs, void *data, void *extra, bool IncludeLength)
 
virtual void FromBS (BinStream &bs, void *data, void *extra)
 
virtual void ToStr (comms::cStr &bs)
 
virtual void FromStr (const comms::cStr &bs)
 
virtual bool CheckIfFunction () const
 Special function for integrating in editor.
 
virtual int condition_call (void *ptr)
 return -1 to do nothing, 0 if you want to hide everything after this registered member, 1 if you want to show
 
virtual BaseClassGetParent () const
 
template<typename type >
type * FindParent ()
 
virtual void SetParent (BaseClass *Parent)
 set parent recursively
 
virtual void SimplySetParent (BaseClass *Parent)
 set parent directly to this, not affecting members
 
virtual bool MayBeParent ()
 
virtual bool CheckCompartabilityWith (const char *TypeName, int TypeSize)
 Checking for errors of registration.
 
virtual bool ProcessInEditor (BaseClass *Parent)
 Editor will call next function always when it is visible in tree. Return true if overriden.
 
virtual bool RenderInScene (BaseClass *Parent)
 Editor will call next function to render in-scene controls always when it is visible in tree. Return true if overriden.
 
virtual bool HandleKey (int code)
 Editor will call next function when key pressed.
 
virtual bool OnChangeMember (BaseClass *MembClass, void *MembPtr, void *MembExtra, const char *MembName)
 Editor will call it every time when member changes and editor is able to recognise it.
 
virtual void BeforeChangeMember (BaseClass *MembClass, void *MembPtr, void *MembExtra, const char *MembName)
 Editor will call it every time before the changes.
 
virtual int GetElementLevel (const char *EName)
 
virtual BaseWidget * OnCreateControlFromScratch (const ClassEditorContext &Context, Rct &Rect)
 Create completely own control for ClassEditor.
 
virtual void OnModifyControl (const char *FieldName, BaseWidget *W, ClassEditorContext &Context)
 Call for every member of registered class registered class.
 
virtual bool CanBeDragged (const char *MemberID, int &dx, int &dy)
 Use it for build a Drag & Drop element.
 
virtual bool CanAcceptDrag (const char *MemberID)
 
virtual bool OnStartDrag (const char *MemberID)
 
virtual bool OnEndDrag (const char *MemberID)
 
virtual bool OnAcceptDrag (BaseClass *DraggedItemParent, const char *DraggedMemberID, const char *AcceptorMemberID, iRct MyRect)
 
virtual bool UsePointerInHashCalculation ()
 
virtual bool SkipHash ()
 
virtual bool IsArray () const
 
virtual const char * GetCmdID ()
 
void SetParents ()
 set parents to this for all child members
 
void SetParentsSafe ()
 set parents to this for all child members, each child will be tested for validity
 
virtual void UpdateClassMembersAndMask (bool recursive)
 
virtual bool CallFromScript () const
 
virtual void CallFromScript (const bool &b)
 

Additional Inherited Members

- Static Public Member Functions inherited from BaseClass
static const char * GetCurrentSaveFile ()
 
static bool & UI_definition ()
 
static bool & Serialization ()
 
- Static Public Attributes inherited from BaseClass
static const char * CurrentSaveFile
 If user triggers saving class to file, last filename stored there.
 
static bool SaveInShortForm
 
- Protected Member Functions inherited from BaseClass
void test_presence_integrity ()
 
void register_this ()
 
void remove_this ()
 
- Protected Attributes inherited from BaseClass
BaseClassParentBC
 pointer to the parent class in the tree
 
DWORD _ClassMask
 Result of GetClassMask() written there. GetClassMask() is not const, so can't use it in const functions. The field introduced to use masking in const functions.
 
bool bCallFromScript
 
- Static Protected Attributes inherited from BaseClass
static std::mutex * pmutex
 mutex for register_this / remove_this
 
static uni_hash< _empty, cPtrDiff,(1<< 18), 2048 > * presence
 each BaseClass registered in this list
 

Detailed Description

template<class X>
class ClassArray< X >

The array of elements derived from the BaseClass. If you create ClassArray and register if with the REG_AUTO the class may be easily serialized. This is the easiest way to serialize array of elements of show it in the UI.

Template Parameters
X
Examples
square_volume.cpp.

Member Function Documentation

◆ CheckDirectCasting()

template<class X >
virtual bool ClassArray< X >::CheckDirectCasting ( ) const
inlineoverridevirtual

BaseClass corresponds to some other data type. For example _int correctonds to int, etc... In this case you can't cast pointer to data to BaseClass*. But in some cases BaseClass may be directlt castable, for example if it has registered members, or it is ClassArray. This function is to define if class is directly castable.

Returns
Return true if void* ClassPtr may be directly casted to BaseClass*

Reimplemented from BaseClass.

◆ CountObjects()

template<class X >
virtual void ClassArray< X >::CountObjects ( int &  required_index,
int *  counter,
HashSummator *  hash,
BaseClassElement *  result,
const std::function< bool(BaseClassElement *)> *  ForEachElem,
bool  OnlyPointersMode 
)
inlineoverridevirtual

This is the main function used for the access to class members. Each class that has SERIALIZE section creates this function automatically.
It may count members, return hash, give element-wise access to any member. Instead of keeping registered fields that routine gives fast dynamic access to any member.
If you making own container, you should create this function as well, othervice your class will not be serialized correctly even if you will make GetElement(...) function.

Parameters
required_indexIndex of required element if result != nullptr
counterif nonzero, the elements count returned there.
hashif nonzero, returns hash value for this class.
resultif nonzero, gives access to the member with index required_index.
ForEachElemif nonzero, the function will be called for each class element.
OnlyPointersModeIf true, the field name will not be filled for speed purposes.

Reimplemented from BaseClass.

◆ DelElement()

template<class X >
virtual bool ClassArray< X >::DelElement ( int  Index)
inlinevirtual

removes element if the operation supported

Reimplemented from BaseClass.

◆ ExpandWith()

template<class X >
virtual int ClassArray< X >::ExpandWith ( const char *  ElmName,
void *  base 
)
inlinevirtual

Expand array with class ElmName.

Reimplemented from BaseClass.

◆ FullCopy()

template<class X >
virtual bool ClassArray< X >::FullCopy ( const void *  SrcData,
const void *  SrcDataExtra,
BaseClass Dest,
void *  DestData,
void *  DstDataExtra,
CECopyContext *  C 
)
inlineoverridevirtual

Fast copy from one BaseClass to another. Names and types correspondence used to copy.

Parameters
SrcDataData data pointer
SrcDataExtraSrc extra
DestDestination class
DestDataDestination data
DstDataExtraDestination extra
Ccopy context
Returns
true if successful

Reimplemented from BaseClass.

◆ GetAmountOfElements()

template<class X >
int ClassArray< X >::GetAmountOfElements ( )
inlineoverridevirtual

return complete amount of elements. Even invisible, masked and non-serialized elements will be counted

Reimplemented from BaseClass.

◆ GetClassName()

template<class X >
const char * ClassArray< X >::GetClassName ( ) const
inlineoverridevirtual

return class name there if need. Usually you don't need, if you are using AUTONEW or SERIALIZE

Reimplemented from BaseClass.

◆ IsArray()

template<class X >
virtual bool ClassArray< X >::IsArray ( ) const
inlineoverridevirtual

Reimplemented from BaseClass.

◆ Load()

template<class X >
virtual bool ClassArray< X >::Load ( TagsList xml,
void *  ClassPtr,
void *  Extra = NULL 
)
inlineoverridevirtual

Load the class from the XML structure.

Parameters
xmlThe source XML
ClassPtrThe pointer to the data, equals to this if class is directly castable
ExtraExtra data pointer
Returns
true if successful

Reimplemented from BaseClass.

◆ LoadBin()

template<class X >
virtual void ClassArray< X >::LoadBin ( void *  Data,
void *  Extra,
BinStream *  In,
Enumerator *  ExDictionary 
)
inlineoverridevirtual

Load the class from the memory. Use only for temporary storage in memory!!!

Parameters
DataPointer to the class data
ExtraExtra data
Inbinary stream to read data from
ExDictionaryAdditional dictionary

Reimplemented from BaseClass.

◆ reset_class()

template<class X >
virtual void ClassArray< X >::reset_class ( void *  DataPtr)
inlinevirtual

Clearing all registered content of the class. If DataPtr is nullptr, this class will be cleared.

Reimplemented from BaseClass.

◆ SaveBin()

template<class X >
virtual void ClassArray< X >::SaveBin ( void *  Data,
void *  Extra,
BinStream *  Out,
Enumerator *  ExDictionary,
Enumerator *  SkipList 
)
inlineoverridevirtual

Save in binaly form. Use only for temporary storage in memory!!!

Parameters
Datadata pointer
Extraextra pointer
OutOutput stream
ExDictionaryDictionary for enumerators
SkipListSkip list for enumerators

Reimplemented from BaseClass.


The documentation for this class was generated from the following file: