30#ifndef INC_CINOSCONTAINER_H
31#define INC_CINOSCONTAINER_H
39#define ER_INOS_CONTAINER_OK 0x00000000
40#define ER_INOS_CONTAINER_REJECTED 0x00000001
41#define ER_INOS_CONTAINER_FAILED 0x00000002
42#define ER_INOS_CONTAINER_TYPE_UNKNOWN 0x00000003
43#define ER_INOS_CONTAINER_CHECK_FAILED 0x00000004
52#include <cinoseventlogger.h>
113 CINOSContainer(
const char* apName,
const char* apElementBases,
void* apParent);
130 uint32
Create(
const char* apName,
const char* apType);
132 uint32
Create(
const char* apName,
const char* apType,
const char* apParam);
137 uint32
Check(
const char* apType,
const char* apParam);
140 virtual void Add(T* apEntity);
142 virtual void Remove(T* apEntity,
bool abDelete=
true);
145 virtual T*
Find(
const char* apName);
151 typedef int(*tForEach)(T&,
void *);
152 virtual void ForEach( tForEach cond,
void *args );
153 template <
typename F>
154 void ForEach( F cond );
210typedef void* (*TCreateEntity)(
const char* apName,
const char* apParam);
211typedef bool (*TCheckCheckTarget)(
const char* apParam);
223 friend class CINOSHwTarget;
232 TCreateEntity m_pCreate;
234 TCheckCheckTarget m_pCheck;
245 const char* apType,
const char* apBase, TCheckCheckTarget apCheck=0);
247 static void* GetInstance(
const char* apName,
const char* apType,
248 const char* apParam,
const char* apAllowedBases = NULL);
250 static uint32 Check(
const char* apType,
const char* apParam,
const char* apAllowedBases = NULL);
263 : CINCOObject(&m_cName[0], apData, 0, defCharObjectOwnBitmap),
264 m_bIsFolder(abIsFolder)
267 inos_strncpy(m_cName, apName,
sizeof(m_cName));
271 virtual bool IsContainerFolder() {
return m_bIsFolder; };
280 const char* apElementBases)
301 const char* apElementBases,
void* apParent)
326 T* entity = m_pEntities->GetAt(0);
328 Destroy(entity->GetName());
329 entity = m_pEntities->GetAt(0);
343 m_pParent = apParent;
349 inos_strncpy(m_cBase, apElementBases,
sizeof(m_cBase));
355 ASSERT_ALWAYS(m_pEntity &&
"INCOObject not created. Did you forget to call GetRegister?");
356 CINCOObject* obj = m_pEntity;
357 char* name = (
char *) apEntity->GetName();
360 char* p = strchr(name,
'.');
367 CINCOItem* tmp = obj->Find(name);
368 if (tmp && (tmp->GetType() == defType_Object)){
370 obj = (CINCOObject*) tmp;
375 obj->Add(o, m_iOrder++);
383 ASSERT_ALWAYS(obj->Find(name) == NULL &&
"It is not allowed to add a container element with a name that is already used as parent of another container element.")
387 obj->Add(o, m_iOrder++);
388 apEntity->GetRegister(o);
391 m_pEntities->Add(apEntity);
402 inos_strncpy(cName, apEntity->GetName(),
sizeof(cName));
403 char* p = strrchr(cName,
'.');
409 CINCOObject* obj = (CINCOObject *) m_pEntity->Find(cName);
411 CINCOObject* sub = (CINCOObject *) obj->Find(++p);
412 bool bDelete = sub && sub->IsContainerFolder()
413 && sub->GetBinaryTree()->GetItemsInContainer() == 0;
415 obj->Remove(p, bDelete);
417 if (obj->GetBinaryTree()->mItemsInContainer){
423 p = strrchr(cName,
'.');
426 m_pEntity->Remove(cName);
440 m_pEntity->Remove((
char *) apEntity->GetName(),
false);
444 m_pEntities->Remove(apEntity, abDelete);
450 return m_pEntities->Find(apName);
456 return m_pEntities->GetAt(auIndex);
462 return (uint32)m_pEntities->GetItemsInContainer();
467 m_pEntities->ForEach(cond, args);
472 m_pEntities->ForEach(cond);
478 m_pHookObj = apObject;
479 m_pHookMtd = apMethod;
485 return Create(apName, m_cBase);
494 return Create(apName, apType, 0);
500 const char* apType,
const char* apParam)
503 if (!apName || !*apName){
505 return ER_INOS_CONTAINER_FAILED;
510 if (apParam && strstr(apParam,
"NoD")){
515 T* ent = m_pEntities->Find(apName);
531 ent = (T*) CINOSContainerEntityRegister::GetInstance(apName, apType,
538 ent->PostCreate(m_pParent);
540 if (m_pHookObj && m_pHookMtd){
542 INOSCallClassMember(m_pHookObj, m_pHookMtd, (uintptr) ent);
549 return ER_INOS_CONTAINER_FAILED;
558 if (!apName || !*apName){
560 return ER_INOS_CONTAINER_FAILED;
564 T* ent = m_pEntities->Find(apName);
567 bool bDeleteSelf =
false;
568 if (!ent->PreDestroy(bDeleteSelf)){
570 return ER_INOS_CONTAINER_REJECTED;
573 Remove(ent, !bDeleteSelf);
578 uint32 l = (uint32)strlen(apName);
583 T* ent = m_pEntities->GetAt(i);
585 if (strncmp(apName, ent->GetName(), l)==0){
588 bool bDeleteSelf =
false;
589 if (!ent->PreDestroy(bDeleteSelf)){
591 return ER_INOS_CONTAINER_REJECTED;
594 Remove(ent, !bDeleteSelf);
613 return ER_INOS_CONTAINER_FAILED;
627 return CINOSContainerEntityRegister::Check(apType, apParam, m_cBase);
643 m_pRegister =
new CINCOObject((
char*) &m_cName[0],
this, 0, defCharObjectOwnBitmap);
644 m_pRegister->Add(
new CINCOuint32((
char*) &m_cName[0], &m_pEntities->mItemsInContainer,
645 0,0,
"", defCharShowDec | defCharReadOnly));
649 m_pEntity =
new CINCOObject(
"Entity", 0);
650 m_pRegister->Add(m_pEntity);
652 m_pCmd =
new CINCOObject(
"Cmd", 0);
653 m_pRegister->Add(m_pCmd);
656 CINCOObject* cmdCreate =
new CINCOObject(
"Create", 0);
657 cmdCreate->Add(
new CINCOProcedure(REG_TYP_CLS_FCT_NAME_OVLD(Create,
659 cmdCreate->Add(
new CINCOstring(
"Name", m_ceName,
sizeof(m_ceName)), 0);
660 m_pCmd->Add(cmdCreate);
662 cmdCreate =
new CINCOObject(
"Create", 0);
663 cmdCreate->Add(
new CINCOProcedure(REG_TYP_CLS_FCT_NAME_OVLD(Create,
665 cmdCreate->Add(
new CINCOstring(
"Name", m_ceName,
sizeof(m_ceName)), 0);
666 cmdCreate->Add(
new CINCOstring(
"Type", m_ceType,
sizeof(m_ceType)), 1);
667 m_pCmd->Add(cmdCreate);
669 cmdCreate =
new CINCOObject(
"Create", 0);
670 cmdCreate->Add(
new CINCOProcedure(REG_TYP_CLS_FCT_NAME_OVLD(Create,
671 CINOSContainer<T>,
this, uint32, Create,(
const char*,
const char*,
const char*))), 0);
672 cmdCreate->Add(
new CINCOstring(
"Name", m_ceName,
sizeof(m_ceName)), 0);
673 cmdCreate->Add(
new CINCOstring(
"Type", m_ceType,
sizeof(m_ceType)), 1);
674 cmdCreate->Add(
new CINCOstring(
"Param", m_ceParam,
sizeof(m_ceParam)), 2);
675 m_pCmd->Add(cmdCreate);
678 CINCOObject* cmdDestroy =
new CINCOObject(
"Destroy", 0);
679 m_pCmd->Add(cmdDestroy);
680 cmdDestroy->Add(
new CINCOProcedure(REG_TYP_CLS_FCT_NAME_OVLD(Destroy,
682 cmdDestroy->Add(
new CINCOstring(
"Name", m_ceName,
sizeof(m_ceName)), 0);
685 m_pProp=
new CINCOObject(
"Prop", 0);
686 m_pRegister->Add(m_pProp);
687 m_pProp->Add(
new CINCOstring(
"Base", m_cBase,
sizeof(m_cBase)), 0);
692 m_pEntity = m_pRegister;
720#define INOS_CONTAINER_CLASS(aClass,aType,aBase) \
721 void* Create##aClass(const char* apName, const char* apParam) \
722 { return new aClass(apName, apParam);}; \
723 static CINOSContainerEntityRegister l_##aClass##Create(Create##aClass, aType, aBase);
720#define INOS_CONTAINER_CLASS(aClass,aType,aBase) \ …
724#define INOS_CONTAINER_CLASS_CHECK(aClass,aType,aBase) \
725 void* Create##aClass(const char* apName, const char* apParam) \
726 { return new aClass(apName, apParam);}; \
727 static CINOSContainerEntityRegister l_##aClass##Create(Create##aClass, aType, aBase, &aClass::CheckTarget);
737#define INOS_CONTAINER_CLASS_MI(aClass,aBaseClass,aType,aBase) \
738 template <typename T> \
739 void* Create##aClass(const char* apName, const char* apParam) \
741 { return static_cast<T*>(new aClass(apName, apParam));}; \
742 static CINOSContainerEntityRegister l_##aClass##Create(Create##aClass<aBaseClass>, aType, aBase);
737#define INOS_CONTAINER_CLASS_MI(aClass,aBaseClass,aType,aBase) \ …
145 virtual T*
Find(
const char* apName); {
…}
142 virtual void Remove(T* apEntity,
bool abDelete=
true); {
…}
140 virtual void Add(T* apEntity); {
…}
137 uint32
Check(
const char* apType,
const char* apParam); {
…}
132 uint32
Create(
const char* apName,
const char* apType,
const char* apParam); {
…}
130 uint32
Create(
const char* apName,
const char* apType); {
…}
#define DECLARE_DYNAMIC_T(aClass, aT)
Definition cinospartitionmemory.h:330
#define DECLARE_DYNAMIC(aClass)
Definition cinospartitionmemory.h:328
#define IMPLEMENT_DYNAMIC_T(aClass, aT)
Definition cinospartitionmemory.h:363
Definition cinoscontainer.h:258
Definition cinoscontainer.h:220
Definition cinoscontainer.h:104
void * m_pHookMtd
pointer to hook method
Definition cinoscontainer.h:178
CINOSContainer(const char *apName, const char *apElementBases)
Definition cinoscontainer.h:279
virtual uint32 GetNumber()
return number of entities
Definition cinoscontainer.h:459
int16 m_iOrder
inco tree order
Definition cinoscontainer.h:190
void * m_pParent
pointer to container parent
Definition cinoscontainer.h:174
virtual void Remove(T *apEntity, bool abDelete=true)
remove entity from container
Definition cinoscontainer.h:398
uint32 Destroy(const char *apName)
destroy entity
Definition cinoscontainer.h:555
CINCOObject * GetRegister(bool abLight=false)
get pointer to inco registration
Definition cinoscontainer.h:634
uint32 Create(const char *apName)
create entity
Definition cinoscontainer.h:482
uint32 Create(const char *apName, const char *apType)
create entity
Definition cinoscontainer.h:490
char m_ceType[32]
entity type
Definition cinoscontainer.h:195
virtual T * GetAt(uint32 auIndex)
return pointer to entity auIndex
Definition cinoscontainer.h:453
TINOSNameBalancedBinaryTree< T > * m_pEntities
pool of all entities
Definition cinoscontainer.h:180
uint32 Create(const char *apName, const char *apType, const char *apParam)
create entity
Definition cinoscontainer.h:499
virtual void Add(T *apEntity)
add entity to container
Definition cinoscontainer.h:352
CINCOObject * m_pRegister
pointer to inco registration
Definition cinoscontainer.h:182
CINCOObject * m_pCmd
pointer to command folder
Definition cinoscontainer.h:184
CINCOObject * m_pProp
Pointer to prop folder.
Definition cinoscontainer.h:188
char m_cName[32]
container name
Definition cinoscontainer.h:170
void SetParent(void *apParent)
set container parent
Definition cinoscontainer.h:340
void SetBase(const char *apElementBases)
Definition cinoscontainer.h:346
CINCOObject * m_pEntity
pointer to entity folder
Definition cinoscontainer.h:186
void SetName(const char *apName)
Set different name for registration. Only works prior to registration.
Definition cinoscontainer.h:123
virtual ~CINOSContainer()
destructor
Definition cinoscontainer.h:321
char m_cBase[256]
pointer to string of all supported base types
Definition cinoscontainer.h:172
uint32 Check(const char *apType, const char *apParam)
check if it is allowed to create entity of apType
Definition cinoscontainer.h:625
char m_ceName[64]
entity name
Definition cinoscontainer.h:193
void * m_pHookObj
pointer to hook object
Definition cinoscontainer.h:176
virtual T * Find(const char *apName)
return pointer to entity 'apName'
Definition cinoscontainer.h:447
void RegisterHook(void *apObject, void *apMethod)
register event hook
Definition cinoscontainer.h:475
char m_ceParam[256]
entity param's
Definition cinoscontainer.h:197
#define ASSERT_ALWAYS(f)
Definition inosmacro.h:696