00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #ifndef __GZ_NODE_H__
00023 #define __GZ_NODE_H__
00024
00030 #include "gzObject.h"
00031 #include "gzMatrix.h"
00032 #include "gzState.h"
00033 #include "gzDbFlags.h"
00034
00035 class gzContext;
00036 class gzNode;
00037
00038
00039
00040 const gzDebugFlags GZ_DEBUG_RECURSIVE =(gzDebugFlags)(1<<0);
00041 const gzDebugFlags GZ_DEBUG_SHOW_ATTRIBUTES =(gzDebugFlags)(1<<1);
00042 const gzDebugFlags GZ_DEBUG_SHOW_GEOMETRY =(gzDebugFlags)(1<<2);
00043 const gzDebugFlags GZ_DEBUG_SHOW_USERDATA =(gzDebugFlags)(1<<3);
00044 const gzDebugFlags GZ_DEBUG_SHOW_STATE =(gzDebugFlags)(1<<4);
00045 const gzDebugFlags GZ_DEBUG_SHOW_NODE_ACTIONS =(gzDebugFlags)(1<<5);
00046
00047
00049 enum gzIntersectMaskValue
00050 {
00052 GZ_INTERSECT_MASK_GROUND = (1<<1) ,
00053
00055 GZ_INTERSECT_MASK_WATER = (1<<2) ,
00056
00058 GZ_INTERSECT_MASK_MAP_SURFACE = GZ_INTERSECT_MASK_GROUND | GZ_INTERSECT_MASK_WATER ,
00059
00060
00062 GZ_INTERSECT_MASK_BUILDING = (1<<3) ,
00063
00065 GZ_INTERSECT_MASK_FOREST = (1<<4) ,
00066
00068 GZ_INTERSECT_MASK_STATIC_OBJECT = GZ_INTERSECT_MASK_FOREST | GZ_INTERSECT_MASK_BUILDING ,
00069
00070
00072 GZ_INTERSECT_MASK_HUMAN = (1<<5) ,
00073
00075 GZ_INTERSECT_MASK_ANIMAL = (1<<6) ,
00076
00078 GZ_INTERSECT_MASK_VEHICLE = (1<<7) ,
00079
00081 GZ_INTERSECT_MASK_DYNAMIC_OBJECT = GZ_INTERSECT_MASK_HUMAN | GZ_INTERSECT_MASK_ANIMAL ,
00082
00083
00085 GZ_INTERSECT_MASK_OVERLAY_OBJECTS = (1<<8) ,
00086
00088 GZ_INTERSECT_MASK_UNDERLAY_OBJECTS = (1<<9) ,
00089
00091 GZ_INTERSECT_MASK_SCREEN_OBJECT = GZ_INTERSECT_MASK_OVERLAY_OBJECTS | GZ_INTERSECT_MASK_UNDERLAY_OBJECTS ,
00092
00094 GZ_INTERSECT_MASK_ALL = -1 ,
00095
00097 GZ_INTERSECT_MASK_NOTHING = 0
00098 };
00099
00100 GZ_USE_BIT_LOGIC(gzIntersectMaskValue);
00101
00102 enum gzCullMaskValue
00103 {
00104 GZ_CULL_MASK_ALL = -1,
00105 GZ_CULL_MASK_NOTHING = 0
00106 };
00107
00108 GZ_USE_BIT_LOGIC(gzCullMaskValue);
00109
00110
00111
00112 const gzString GZ_SECTION_RENDER ="_render";
00113 const gzString GZ_SECTION_CULL ="_cull";
00114 const gzString GZ_SECTION_NODE_DATA ="_node_upd";
00115 const gzString GZ_SECTION_DYNLOAD ="_dynload";
00116 const gzString GZ_SECTION_REFRESH ="_refresh";
00117 const gzString GZ_SECTION_FINISH ="_finish";
00118 const gzString GZ_SECTION_SHADOW_VOLUME_CREATE ="_shad_vol_cr";
00119 const gzString GZ_SECTION_SHADOW_VOLUME_RENDER ="_shad_vol_re";
00120
00121
00122
00123
00124
00125
00126
00127
00128
00129
00130
00131
00132
00133
00134
00135 class GZ_GRAPH_EXPORT gzIntersectMask
00136 {
00137 public:
00138
00139 inline gzIntersectMask():m_mask(GZ_INTERSECT_MASK_ALL){}
00140
00141 inline virtual ~gzIntersectMask(){}
00142
00143 inline gzVoid setIntersectMask( const gzIntersectMaskValue & mask )
00144 {
00145 m_mask=mask;
00146 }
00147
00148 inline gzIntersectMaskValue getIntersectMask()
00149 {
00150 return m_mask;
00151 }
00152
00153 inline gzBool isIntersecting( const gzIntersectMaskValue & mask )
00154 {
00155 return (mask&m_mask)!=0;
00156 }
00157
00158 inline gzBool isIntersecting( gzIntersectMask * imask )
00159 {
00160 return (m_mask&imask->m_mask)!=0;
00161 }
00162
00163 private:
00164
00165 gzIntersectMaskValue m_mask;
00166 };
00167
00168
00169
00170
00171
00172
00173
00174
00175
00176
00177
00178
00179
00180
00181
00182 class GZ_GRAPH_EXPORT gzCullMask
00183 {
00184 public:
00185
00186 inline gzCullMask():m_mask(GZ_CULL_MASK_NOTHING){}
00187
00188 inline virtual ~gzCullMask(){}
00189
00190 inline gzVoid setCullMask( const gzCullMaskValue & mask )
00191 {
00192 m_mask=mask;
00193 }
00194
00195 inline gzCullMaskValue getCullMask()
00196 {
00197 return m_mask;
00198 }
00199
00200 inline gzBool isCulled( const gzCullMaskValue & mask )
00201 {
00202 return (mask&m_mask)!=0;
00203 }
00204
00205 inline gzBool isCulled( gzCullMask * mask )
00206 {
00207 return (m_mask&mask->m_mask)!=0;
00208 }
00209
00210 private:
00211
00212 gzCullMaskValue m_mask;
00213 };
00214
00215
00220 const gzCopyMode GZ_CLONE_SHARE_STATE = (gzCopyMode)(1<<0);
00221 const gzCopyMode GZ_CLONE_SHARE_GEOMETRY = (gzCopyMode)(1<<1);
00222 const gzCopyMode GZ_CLONE_SHARE_TEXTURE = (gzCopyMode)(1<<2);
00223 const gzCopyMode GZ_CLONE_SHARE_MATERIAL = (gzCopyMode)(1<<3);
00224 const gzCopyMode GZ_CLONE_SHARE_TEXENV = (gzCopyMode)(1<<4);
00225 const gzCopyMode GZ_CLONE_SHARE_TEXGEN = (gzCopyMode)(1<<5);
00226 const gzCopyMode GZ_CLONE_SHARE_GFX_PROGRAM = (gzCopyMode)(1<<6);
00227 const gzCopyMode GZ_CLONE_SHARE_FONT = (gzCopyMode)(1<<7);
00228
00229
00230
00231
00232
00233
00234
00235
00236
00237
00238
00239
00240
00241
00242
00243
00247 class GZ_GRAPH_EXPORT gzNodeLock
00248 {
00249 public:
00250
00252 static gzVoid waitLockRender();
00253
00255 static gzVoid waitLockEdit();
00256
00258 static gzBool tryLockRender();
00259
00261 static gzBool tryLockEdit();
00262
00264 static gzVoid unLock();
00265
00267 static gzBool isLocked();
00268
00270 static gzBool isLockedRender();
00271
00273 static gzBool isLockedEdit();
00274
00276 static gzULong getLockedEditThreadID();
00277
00278 private:
00279
00280 static gzSemaphore g_lock;
00281 };
00282
00283
00284
00285
00286
00287
00288
00289
00290
00291
00292
00293
00294
00295
00296
00297
00298
00299 class gzTraverseAction : public gzTypeInterface
00300 {
00301 public:
00302
00303 GZ_DECLARE_TYPE_INTERFACE_EXPORT(GZ_GRAPH_EXPORT);
00304
00305 GZ_GRAPH_EXPORT gzVoid traverse(gzNode *node,gzContext *context);
00306
00307 GZ_GRAPH_EXPORT virtual gzBool traverseTransform(){ return TRUE; }
00308
00309 protected:
00310
00311 GZ_GRAPH_EXPORT virtual gzBool checkBoundary(gzContext *context, gzNode *node) { return TRUE; }
00312
00313 GZ_GRAPH_EXPORT virtual gzVoid preTraverseAction( gzNode *node , gzContext *context);
00314 GZ_GRAPH_EXPORT virtual gzVoid postTraverseAction( gzNode *node , gzContext *context);
00315 };
00316
00317 enum gzBoundaryMode
00318 {
00319 GZ_BOUNDARY_DEFAULT,
00320 GZ_BOUNDARY_ZERO_Y
00321 };
00322
00323
00324
00325
00326
00327
00328
00329
00330
00331
00332
00333
00334
00335
00336
00337 class gzBoundary
00338 {
00339 public:
00340
00341 GZ_GRAPH_EXPORT gzBoundary(): m_center(gzVec3(0,0,0)),m_baseOffset(0),m_radius(0.0f),m_mode(GZ_BOUNDARY_DEFAULT),m_accumIncludeBoundary(FALSE),
00342 m_recursiveIncludeBoundary(FALSE),m_childRecursiveIncludeBoundary(FALSE),m_isReset(TRUE),m_localIncludeBoundary(FALSE),m_useRadius(TRUE){}
00343
00344 GZ_GRAPH_EXPORT virtual ~gzBoundary(){};
00345
00346 GZ_GRAPH_EXPORT const gzVec3 & getBoundaryCenter() const { return m_center; }
00347 GZ_GRAPH_EXPORT const gzReal & getBoundaryRadius() const { return m_radius; }
00348
00349 GZ_GRAPH_EXPORT gzVoid setBoundaryCenter( gzVec3 center );
00350
00351 GZ_GRAPH_EXPORT gzVoid setBoundaryRadius( gzReal radius );
00352
00353 GZ_GRAPH_EXPORT gzVoid resetBoundary() { m_isReset = TRUE ; m_radius=GZ_FLOAT_ZERO; m_center=gzVec3(0,0,0); m_childRecursiveIncludeBoundary=FALSE; m_accumIncludeBoundary=m_recursiveIncludeBoundary|m_localIncludeBoundary; }
00354
00355 GZ_GRAPH_EXPORT gzVoid unResetBoundary() { m_isReset = FALSE; }
00356
00357 GZ_GRAPH_EXPORT gzVoid includeBoundary(const gzVec3 ¢er , const gzReal &radius );
00358
00359 GZ_GRAPH_EXPORT gzVoid includeMaxBoundary(const gzVec3 ¢er , const gzReal &radius , const gzVec3 &offset=gzVec3(0,0,0));
00360
00361 GZ_GRAPH_EXPORT gzVoid includeBoundary(const gzBoundary *boundary , gzMatrix4 *transform , gzReal maxScale);
00362
00363 GZ_GRAPH_EXPORT gzVoid includeMaxBoundary(const gzBoundary *boundary , gzMatrix4 *transform, gzReal maxScale , const gzVec3 &offset=gzVec3(0,0,0));
00364
00365
00367 GZ_GRAPH_EXPORT inline gzBool getRecursiveIncludeBoundary() const { return m_recursiveIncludeBoundary|m_childRecursiveIncludeBoundary; }
00368
00370 GZ_GRAPH_EXPORT inline gzBool getForceRecursiveIncludeBoundary() const { return m_recursiveIncludeBoundary; }
00371
00373 GZ_GRAPH_EXPORT inline gzBool getForceChildRecursiveIncludeBoundary() const { return m_childRecursiveIncludeBoundary; }
00374
00376 GZ_GRAPH_EXPORT inline gzBool getForceLocalIncludeBoundary() const { return m_localIncludeBoundary; }
00377
00379 GZ_GRAPH_EXPORT inline gzBool getForceIncludeBoundary() const { return m_accumIncludeBoundary; }
00380
00382 GZ_GRAPH_EXPORT gzVoid setForceRecursiveIncludeBoundary(gzBool on) { m_recursiveIncludeBoundary=on; m_accumIncludeBoundary=m_recursiveIncludeBoundary|m_childRecursiveIncludeBoundary|m_localIncludeBoundary; }
00383
00385 GZ_GRAPH_EXPORT gzVoid setForceChildRecursiveIncludeBoundary(gzBool on) { m_childRecursiveIncludeBoundary=on; m_accumIncludeBoundary=m_recursiveIncludeBoundary|m_childRecursiveIncludeBoundary|m_localIncludeBoundary; }
00386
00388 GZ_GRAPH_EXPORT gzVoid setForceLocalIncludeBoundary(gzBool on) { m_localIncludeBoundary = on; m_accumIncludeBoundary=m_recursiveIncludeBoundary|m_childRecursiveIncludeBoundary|m_localIncludeBoundary; }
00389
00390
00391 GZ_GRAPH_EXPORT gzVoid setBaseOffsetBoundary(gzReal offset) { m_baseOffset=offset; }
00392
00393 GZ_GRAPH_EXPORT gzReal getBaseOffsetBoundary() { return m_baseOffset; }
00394
00395 GZ_GRAPH_EXPORT gzVoid setBoundaryMode(gzBoundaryMode mode) { m_mode=mode; }
00396
00397 GZ_GRAPH_EXPORT gzVoid adjustBoundary();
00398
00399
00400
00402 GZ_GRAPH_EXPORT gzVoid useRadius(gzBool on) { m_useRadius=on; }
00403
00404 GZ_GRAPH_EXPORT inline gzBool useRadius() const { return m_useRadius; }
00405
00406
00407 private:
00408
00409 gzVec3 m_center;
00410 gzReal m_baseOffset;
00411 gzReal m_radius;
00412
00413 gzBoundaryMode m_mode;
00414
00415 gzBool m_accumIncludeBoundary:1;
00416 gzBool m_recursiveIncludeBoundary:1;
00417 gzBool m_childRecursiveIncludeBoundary:1;
00418 gzBool m_isReset:1;
00419 gzBool m_localIncludeBoundary:1;
00420 gzBool m_useRadius:1;
00421 };
00422
00424 enum gzNodeActionEvent
00425 {
00426
00427 GZ_NODE_ACTION_BEFORE_PRE_TRAVERSE = 0 ,
00428 GZ_NODE_ACTION_AFTER_PRE_TRAVERSE ,
00429 GZ_NODE_ACTION_BEFORE_POST_TRAVERSE ,
00430 GZ_NODE_ACTION_AFTER_POST_TRAVERSE ,
00431 GZ_NODE_ACTION_BEFORE_RENDER ,
00432 GZ_NODE_ACTION_AFTER_RENDER ,
00433
00434 GZ_NODE_ACTION_BEFORE_SCENE_RENDER ,
00435 GZ_NODE_ACTION_AFTER_SCENE_RENDER ,
00436
00437 GZ_NODE_ACTION_BEFORE_SCENE_UPDATE_NODE_DATA ,
00438 GZ_NODE_ACTION_AFTER_SCENE_UPDATE_NODE_DATA ,
00439
00440 GZ_NODE_ACTION_BEFORE_NODE_DATA_UPDATE ,
00441 GZ_NODE_ACTION_AFTER_NODE_DATA_UPDATE ,
00442
00443 GZ_NODE_ACTION_REF ,
00444 GZ_NODE_ACTION_UNREF ,
00445 GZ_NODE_ACTION_NODE_ID_CHANGE ,
00446
00447
00448
00449 GZ_NODE_ACTION_COUNT ,
00450
00451
00452 GZ_NODE_ACTION_ADD ,
00453 GZ_NODE_ACTION_REMOVE
00454 };
00455
00456 class gzNodeActionInterface;
00457
00458
00459
00460
00461
00462
00463
00464
00465
00466
00467
00468
00469
00470
00471
00472 class gzNodeActionInterfaceHandle
00473 {
00474 public:
00475
00476 gzRefPointer<gzNodeActionInterface> receiver;
00477 gzVoid *userdata;
00478 };
00479
00480
00481
00482
00483
00484
00485
00486
00487
00488
00489
00490
00491
00492
00493
00494 class gzNodeActionProvider : public gzObject
00495 {
00496 public:
00497
00498 GZ_GRAPH_EXPORT gzNodeActionProvider();
00499
00500 GZ_GRAPH_EXPORT virtual ~gzNodeActionProvider();
00501
00502 GZ_GRAPH_EXPORT gzNodeActionProvider(const gzNodeActionProvider & copy);
00503
00504 GZ_GRAPH_EXPORT gzNodeActionProvider &operator=(const gzNodeActionProvider & copy);
00505
00506 GZ_GRAPH_EXPORT virtual gzVoid ref();
00507 GZ_GRAPH_EXPORT virtual gzVoid unref();
00508
00509
00510
00511 GZ_GRAPH_EXPORT gzVoid action(gzNodeActionEvent action , gzContext *context ,gzTraverseAction *actionclass);
00512
00513 GZ_GRAPH_EXPORT gzBool hasActiveActions() { return m_receivers!=NULL; }
00514
00515 GZ_GRAPH_EXPORT gzBool hasActiveAction(gzNodeActionEvent action);
00516
00517 GZ_GRAPH_EXPORT gzVoid addActionInterface(gzNodeActionInterface *receiver , gzNodeActionEvent action , gzVoid *userdata=NULL);
00518 GZ_GRAPH_EXPORT gzVoid removeActionInterface(gzNodeActionInterface *receiver , gzNodeActionEvent action );
00519 GZ_GRAPH_EXPORT gzVoid removeAllActionInterfaces(gzType *type=NULL);
00520 GZ_GRAPH_EXPORT gzBool hasActionInterfaceType(gzType *type);
00521
00522 GZ_GRAPH_EXPORT gzArray<gzNodeActionInterfaceHandle> getActionInterfaces(gzNodeActionEvent action);
00523
00524
00525
00526
00527
00528
00529 GZ_GRAPH_EXPORT virtual gzVoid debugOutput(gzString base , gzString anchor , gzDebugFlags features);
00530
00531
00532 private:
00533
00534 gzList<gzNodeActionInterfaceHandle> *m_receivers;
00535 };
00536
00537
00538
00539
00540
00541
00542
00543
00544
00545
00546
00547
00548
00549
00550
00551 class gzNodeActionInterface : public gzReference
00552 {
00553 public:
00554
00555 GZ_GRAPH_EXPORT gzNodeActionInterface():m_activeProviders(NULL){};
00556
00557 GZ_GRAPH_EXPORT gzNodeActionInterface(const gzNodeActionInterface ©);
00558
00559 GZ_GRAPH_EXPORT gzNodeActionInterface & operator=(const gzNodeActionInterface ©);
00560
00561 GZ_GRAPH_EXPORT virtual ~gzNodeActionInterface();
00562
00563 GZ_GRAPH_EXPORT virtual gzVoid onAction(gzNodeActionEvent action , gzContext *context , gzNodeActionProvider *trigger , gzTraverseAction *actionclass , gzVoid *userdata){};
00564
00565 GZ_GRAPH_EXPORT gzList<gzNodeActionProvider> * getActionProviderInterfaces();
00566
00567 GZ_GRAPH_EXPORT gzVoid removeAllActions();
00568
00569 private:
00570
00571 friend class gzNodeActionProvider;
00572
00573 gzList<gzNodeActionProvider> *m_activeProviders;
00574 };
00575
00576
00577
00578 class gzGroup;
00579
00580
00581 template <> inline gzVoid gzList<gzGroup>::clearAndDestroy()
00582 {
00583 }
00584
00585
00586
00587
00588
00589
00590
00591
00592
00593
00594
00595
00596
00597
00598
00599 class gzNode : public gzBoundary , public gzNodeActionProvider ,
00600 public gzNameInterface , public gzDebugInterface ,
00601 public gzIntersectMask , public gzUpdateIDInterface ,
00602 public gzCullMask
00603 {
00604 public:
00605
00606 GZ_GRAPH_EXPORT gzNode(const gzString & name=GZ_EMPTY_STRING);
00607 GZ_GRAPH_EXPORT virtual ~gzNode();
00608
00609 GZ_GRAPH_EXPORT gzNode(const gzNode ©);
00610 GZ_GRAPH_EXPORT gzNode & operator=(const gzNode ©);
00611
00612
00613 GZ_DECLARE_TYPE_INTERFACE_EXPORT(GZ_GRAPH_EXPORT);
00614
00615
00616 GZ_GRAPH_EXPORT virtual gzReference* clone() const;
00617 GZ_GRAPH_EXPORT virtual gzVoid setCopyMode(gzCopyMode mode);
00618 GZ_GRAPH_EXPORT virtual gzBool useDeepCopy();
00619
00620
00621
00622 GZ_GRAPH_EXPORT virtual gzVoid preTraverseAction( gzTraverseAction *actionclass , gzContext *context) {};
00623 GZ_GRAPH_EXPORT virtual gzVoid postTraverseAction( gzTraverseAction *actionclass , gzContext *context) {};
00624 GZ_GRAPH_EXPORT virtual gzActionStage useActionStage( gzTraverseAction *actionclass , gzContext *context) { return GZ_ACTION_STAGE_TRAVERSE; }
00625 GZ_GRAPH_EXPORT virtual gzBool isGroupNode() { return FALSE; }
00626
00627
00628
00629 GZ_GRAPH_EXPORT gzVoid setState( gzState *state );
00630 GZ_GRAPH_EXPORT gzState *getState();
00631
00632 GZ_GRAPH_EXPORT virtual gzNode *find(const gzString &path,gzBool recursive=TRUE);
00633
00634
00635
00636 GZ_GRAPH_EXPORT gzVoid removeFromParents();
00637 GZ_GRAPH_EXPORT gzList<gzGroup> & getParentGroupList();
00638 GZ_GRAPH_EXPORT gzULong getNumberOfParents();
00639 GZ_GRAPH_EXPORT gzBool isShared();
00640 GZ_GRAPH_EXPORT gzBool isHierarchicalChildOf(gzGroup *group);
00641
00642
00643
00644 GZ_GRAPH_EXPORT virtual gzVoid debugOutput(gzString base , gzString anchor , gzDebugFlags features);
00645
00646
00647
00648 GZ_GRAPH_EXPORT virtual gzVoid write(gzSerializeAdapter *adapter);
00649 GZ_GRAPH_EXPORT virtual gzVoid read(gzSerializeAdapter *adapter);
00650 GZ_GRAPH_EXPORT virtual gzULong getDataSize(gzSerializeAdapter *adapter) const;
00651
00652
00653
00654
00655 GZ_GRAPH_EXPORT gzBool registerNodeID(gzULong id);
00656 GZ_GRAPH_EXPORT gzBool unregisterNodeID();
00657 GZ_GRAPH_EXPORT gzBool getNodeId(gzULong &id);
00658 static GZ_GRAPH_EXPORT gzNode *findNode(gzULong id);
00659 static GZ_GRAPH_EXPORT gzULong getMaxUsedNodeId();
00660 static GZ_GRAPH_EXPORT gzVoid preAllocateNodeId(gzULong id);
00661
00662
00663
00665 GZ_GRAPH_EXPORT virtual gzVoid updateNode() {};
00666
00668 GZ_GRAPH_EXPORT virtual gzVoid updateNodeData(gzBool forceBoundaryUpdate=FALSE);
00669
00670 GZ_GRAPH_EXPORT gzVoid setDirtyNodeData(gzBool dirty);
00671 GZ_GRAPH_EXPORT gzBool hasDirtyNodeData();
00672 GZ_GRAPH_EXPORT gzVoid enableNodeDataUpdate(gzBool on);
00673 GZ_GRAPH_EXPORT gzBool doUpdateNodeData();
00674
00675 protected:
00676
00677
00678
00679 friend class gzGroup;
00680
00681 GZ_GRAPH_EXPORT gzVoid addParentGroup(gzGroup *parent);
00682 GZ_GRAPH_EXPORT gzVoid removeParentGroup(gzGroup *parent);
00683
00684 private:
00685
00686 gzBool getNodeId_unsafe(gzULong &id);
00687
00688
00689
00690 gzRefPointer<gzState> m_state;
00691
00692
00693
00694 gzList<gzGroup> m_parents;
00695 gzULong m_nodeID;
00696 gzUByte m_dirtyNodeData:1;
00697 gzUByte m_updateNodeData:1;
00698
00699
00700
00701 static gzMutex nodeIdLocker;
00702 static gzDict<gzULongCompareInterface,gzNode> nodeIdStorage;
00703 static gzDict<gzInstanceCompareInterface,gzVoid> idNodeStorage;
00704
00705 };
00706
00707
00708 GZ_DECLARE_REFPTR(gzNode);
00709
00710
00711
00712
00713
00714
00715
00716
00717
00718
00719
00720
00721
00722
00723
00724 class gzDbManager : public gzReference
00725 {
00726 public:
00727
00728 GZ_GRAPH_EXPORT virtual ~gzDbManager(){};
00729
00730 GZ_GRAPH_EXPORT static gzVoid registerManager(gzDbManager *manager);
00731
00732 GZ_GRAPH_EXPORT static gzVoid unregisterManager(gzDbManager *manager);
00733
00734 GZ_GRAPH_EXPORT static gzVoid unregisterManagers();
00735
00736 GZ_GRAPH_EXPORT static gzNode *loadDB(const gzString &url , gzString extension=GZ_EVALUATE_EXTENSION , gzSerializeAdapterFlags flags=GZ_DB_FLAGS_DEFAULT , gzULong version=0 , const gzString &password=GZ_EMPTY_STRING);
00737
00738 GZ_GRAPH_EXPORT virtual gzNode *loadDB(gzSerializeAdapter *adapter );
00739
00740 GZ_GRAPH_EXPORT static gzBool saveDB(gzNode *node , const gzString &url , gzString extension=GZ_EVALUATE_EXTENSION , gzSerializeAdapterFlags flags=GZ_DB_FLAGS_DEFAULT, gzULong version=0 , const gzString &password=GZ_EMPTY_STRING);
00741
00742 GZ_GRAPH_EXPORT virtual gzBool saveDB(gzNode *node , gzSerializeAdapter *adapter);
00743
00745 GZ_GRAPH_EXPORT virtual gzString getExtensions()=0;
00746
00748 GZ_GRAPH_EXPORT virtual gzULong getVersion(const gzString &extension)=0;
00749
00750 GZ_GRAPH_EXPORT static gzString getAllExtensions();
00751
00752 protected:
00753
00755 GZ_GRAPH_EXPORT virtual gzVoid registerManager(const gzString &extension);
00756
00757
00758 static gzRefDict<gzString,gzDbManager> s_registeredDbManagers;
00759 };
00760
00761 #endif // __GZ_NODE_H__
00762