Main Page | Class Hierarchy | Class List | Directories | File List | Class Members

Define_RO.h

00001 /* START_LICENSE_HEADER
00002 
00003 Copyright (C) 2000 Martin Piper, original design and program code
00004 Copyright (C) 2001-2005 Replica Software
00005 
00006 This program file is copyright (C) Replica Software and can only be used under license.
00007 For more information visit: http://www.replicanet.com/
00008 Or email: info@replicanet.com
00009 
00010 END_LICENSE_HEADER */
00011 #ifndef __DEFINE_RO_H__
00012 #define __DEFINE_RO_H__
00013 #include "RNPlatform/Inc/DLLExportAPI.h"
00014 #include "RNReplicaNet/Inc/DataBlock.h"
00015 #include "RNReplicaNet/Inc/ROConstants.h"
00016 #ifdef REPLICANET_VISUALDEBUGGER
00017 #include "RNXPURL/Inc/XPURL.h"
00018 #include "RNXPURL/Inc/DebugHandler.h"
00019 #include "RNReplicaNet/Inc/RO_RegistryBlock.h"
00020 #include "RNReplicaNet/Inc/ReplicaNet.h"
00021 #endif
00022 
00023 #define _MAKE_BASE(x) x
00024 #define _MAKE_RO(x) _RO_##x
00025 #define _GET_RO(x) ::_RO_##x
00026 #define _MAKE_RO_ALLOCFUNC(x) _RO_AllocateFunc_##x
00027 #define _MAKE_RO_DELETEFUNC(x) _RO_DeleteFunc_##x
00028 #define _MAKE_RO_SETCLASSIDFUNC(x) _RO_SetClassIDFunc_##x
00029 #define _MAKE_RO_REGISTERFUNC(x) _RO_RegisterFunc_##x
00030 
00031 
00032 
00033 #ifdef REPLICANET_VISUALDEBUGGER
00034 #define _RO_DODEBUGNAME()   \
00035     if (RNReplicaNet::XPURL::GetDebugHandler() && GetRegistryBlock() && GetRegistryBlock()->GetName())  \
00036     {   \
00037         _Internal_SetFullyQualifiedName(GetRegistryBlock()->GetName()); \
00038     }
00039 #else
00040 #define _RO_DODEBUGNAME()
00041 #endif
00042 
00043 
00044 /* _RO_DO_STD_FRAMEWORK macro starts here */
00045 #define _RO_DO_STD_FRAMEWORK(x) \
00046 _RO_BEGINCTOR(x);   \
00047 _Internal_GetUpdateType();  \
00048 _Internal_SetupLoadBalance();   \
00049 _Internal_SetupLoadBalanceScore();  \
00050 _Internal_SetupLoadBalanceDefault();    \
00051 _Internal_SetupLoadBalanceScoreDefault();   \
00052 _Internal_SetupPropagateDistance(); \
00053 _Internal_SetupPropagateDistanceDefault();  \
00054 _RO_DODEBUGNAME();  \
00055 _RO_ENDCTOR(x); \
00056 _RO_DTOR(x);    \
00057 _RO_DO_ALLOCATE(x); \
00058 _RO_DO_ALLOCATEFUNC(x);
00059 /* _RO_DO_STD_FRAMEWORK macro ends here */
00060 
00061 
00062 /* _RO_STD_FRAMEWORK macro starts here */
00063 #define _RO_STD_FRAMEWORK(x)    \
00064 public: \
00065 _MAKE_RO(x)();  \
00066 virtual ~_MAKE_RO(x)(); \
00067 _RO_DEF_ALLOCATE(x);    \
00068 _RO_DO_REGISTER(x); \
00069 _RO_DO_IDS(x);  \
00070 _RO_DO_ALLOW_FRIEND(x); \
00071 private:
00072 /* _RO_STD_FRAMEWORK macro ends here */
00073 
00074 /* _RO_BEGINCTOR macro starts here */
00075 #define _RO_BEGINCTOR(x)    \
00076 int _MAKE_RO(x)::mClassID = kReplicaObjectUnknownClassID;   \
00077 RNReplicaNet::s_RO_RegistryBlock *_MAKE_RO(x)::mBoundRegistryBlock = 0; \
00078 bool _MAKE_RO(x)::mRegistered = false;  \
00079 _MAKE_RO(x)::_MAKE_RO(x)()  \
00080 {
00081 /* _RO_BEGINCTOR macro ends here */
00082 
00083 /* _RO_ENDCTOR macro starts here */
00084 #define _RO_ENDCTOR(x)  \
00085 }
00086 /* _RO_ENDCTOR macro ends here */
00087 
00088 /* _RO_DTOR macro starts here */
00089 #define _RO_DTOR(x) \
00090 _MAKE_RO(x)::~_MAKE_RO(x)() \
00091 {   \
00092 }
00093 /* _RO_DTOR macro ends here */
00094 
00095 /* ReplicaObject reliable macros go here */
00096 
00097 /* _RO_DO_REPLICAOBJECT_MAKERELIABLE macro starts here */
00098 #define _RO_DO_REPLICAOBJECT_MAKERELIABLE() \
00099 protected:  \
00100 virtual void _Internal_GetUpdateType(void)  \
00101 {   \
00102     UpdateSetReliable();    \
00103 }   \
00104 public:
00105 /* _RO_DO_REPLICAOBJECT_MAKERELIABLE macro ends here */
00106 
00107 /* _RO_DO_REPLICAOBJECT_MAKECERTAIN macro starts here */
00108 #define _RO_DO_REPLICAOBJECT_MAKECERTAIN()  \
00109 protected:  \
00110 virtual void _Internal_GetUpdateType(void)  \
00111 {   \
00112     UpdateSetCertain(); \
00113 }   \
00114 public:
00115 /* _RO_DO_REPLICAOBJECT_MAKECERTAIN macro ends here */
00116 
00117 /* _RO_DO_REPLICAOBJECT_MAKEUNRELIABLE macro starts here */
00118 #define _RO_DO_REPLICAOBJECT_MAKEUNRELIABLE()   \
00119 protected:  \
00120 virtual void _Internal_GetUpdateType(void)  \
00121 {   \
00122     UpdateSetUnreliable();  \
00123 }   \
00124 public:
00125 /* _RO_DO_REPLICAOBJECT_MAKEUNRELIABLE macro ends here */
00126 
00127 
00128 
00129 
00130 /* _RO_DEF_ALLOCATEFUNC macro starts here */
00131 #define _RO_DEF_ALLOCATEFUNC(x) \
00132 extern RNReplicaNet::ReplicaObject * _MAKE_RO_ALLOCFUNC(x)(void);   \
00133 extern void _MAKE_RO_DELETEFUNC(x)(RNReplicaNet::ReplicaObject *object);    \
00134 extern void _MAKE_RO_SETCLASSIDFUNC(x)(int classid,RNReplicaNet::s_RO_RegistryBlock *theBlock); \
00135 extern void _MAKE_RO_REGISTERFUNC(x)(void);
00136 /* _RO_DEF_ALLOCATEFUNC macro ends here */
00137 
00138 /* _RO_DO_ALLOCATEFUNC macro starts here */
00139 #define _RO_DO_ALLOCATEFUNC(x)  \
00140 RNReplicaNet::ReplicaObject * _MAKE_RO_ALLOCFUNC(x)(void)   \
00141 {   \
00142     return _MAKE_BASE(x)::AllocateForReplicaNet();  \
00143 }   \
00144 void _MAKE_RO_DELETEFUNC(x)(RNReplicaNet::ReplicaObject *object)    \
00145 {   \
00146     _MAKE_BASE(x)::DeleteForReplicaNet(object); \
00147 }   \
00148 void _MAKE_RO_SETCLASSIDFUNC(x)(int classid,RNReplicaNet::s_RO_RegistryBlock *theBlock) \
00149 {   \
00150     _MAKE_RO(x)::StaticSetClassID(classid,theBlock);    \
00151 }   \
00152 void _MAKE_RO_REGISTERFUNC(x)(void) \
00153 {   \
00154     _MAKE_RO(x)::StaticSetRegistered(true); \
00155 }
00156 /* _RO_DO_ALLOCATEFUNC macro ends here */
00157 
00158 /* _RO_DEF_ALLOCATE macro starts here */
00159 #define _RO_DEF_ALLOCATE(x) \
00160 static _MAKE_BASE(x)* _MAKE_RO(x)::AllocateForReplicaNet(); \
00161 static void _MAKE_RO(x)::DeleteForReplicaNet(RNReplicaNet::ReplicaObject *object);
00162 /* _RO_DEF_ALLOCATE macro ends here */
00163 
00164 /* _RO_DO_ALLOCATE macro starts here */
00165 #define _RO_DO_ALLOCATE(x)  \
00166 _MAKE_BASE(x)* _MAKE_RO(x)::AllocateForReplicaNet() \
00167 {   \
00168     return new _MAKE_BASE(x);   \
00169 }   \
00170 void _MAKE_RO(x)::DeleteForReplicaNet(RNReplicaNet::ReplicaObject *object)  \
00171 {   \
00172     delete object;  \
00173 }
00174 /* _RO_DO_ALLOCATE macro ends here */
00175 
00176 /* _RO_REGISTER macro starts here */
00177 #define _RO_DO_REGISTER(x)  \
00178 public: \
00179 virtual void SetRegistered(bool flag = true)    \
00180 {   \
00181      mRegistered = flag;    \
00182 }   \
00183 static void StaticSetRegistered(bool flag = true)   \
00184 {   \
00185      mRegistered = flag;    \
00186 }   \
00187 virtual bool GetRegistered(void)    \
00188 {   \
00189     return mRegistered; \
00190 }   \
00191 private:    \
00192     static bool mRegistered;    \
00193 public:
00194 /* _RO_REGISTER macro ends here */
00195 
00196 /* _RO_DO_IDS macro starts here */
00197 #define _RO_DO_IDS(x)   \
00198 static void StaticSetClassID(const int class_id,RNReplicaNet::s_RO_RegistryBlock *theBlock) \
00199 {   \
00200     mClassID = class_id;    \
00201     mBoundRegistryBlock = theBlock; \
00202 }   \
00203 virtual const int GetClassID(void)  \
00204 {   \
00205     return mClassID;    \
00206 }   \
00207 RNReplicaNet::s_RO_RegistryBlock *GetRegistryBlock(void) const  \
00208 {   \
00209     return mBoundRegistryBlock; \
00210 }   \
00211 static int StaticGetClassID(void)   \
00212 {   \
00213     return mClassID;    \
00214 }   \
00215 static RNReplicaNet::s_RO_RegistryBlock *StaticGetRegistryBlock(void)   \
00216 {   \
00217     return mBoundRegistryBlock; \
00218 }   \
00219 private:    \
00220     static int mClassID;    \
00221     static RNReplicaNet::s_RO_RegistryBlock *mBoundRegistryBlock;   \
00222 public:
00223 /* _RO_DO_IDS macro ends here */
00224 
00225 /* _RO_DO_ALLOW_PUBLIC macro starts here */
00226 #define _RO_DO_ALLOW_PUBLIC()   \
00227 public:
00228 /* _RO_DO_ALLOW_PUBLIC macro ends here */
00229 
00230 /* _RO_DO_MAKE_PRIVATE macro starts here */
00231 #define _RO_DO_MAKE_PRIVATE()   \
00232 private:
00233 /* _RO_DO_MAKE_PRIVATE macro ends here */
00234 
00235 /* _RO_DO_ALLOW_FRIEND macro starts here */
00236 #define _RO_DO_ALLOW_FRIEND(x)  \
00237 friend class _MAKE_BASE(x);
00238 /* _RO_DO_ALLOW_FRIEND macro ends here */
00239 
00240 /* _RO_DO_ALLOW_FRIEND_RO macro starts here */
00241 #define _RO_DO_ALLOW_FRIEND_RO(x)   \
00242 friend class _MAKE_RO(x);
00243 /* _RO_DO_ALLOW_FRIEND_RO macro ends here */
00244 
00245 /* _RO_DO_PUBLIC_RO macro starts here */
00246 #define _RO_DO_PUBLIC_RO(x) \
00247 public _MAKE_RO(x)
00248 /* _RO_DO_PUBLIC_RO macro ends here */
00249 
00250 /* _RO_DO_APPROVEFAULT macro starts here */
00251 #define _RO_DO_APPROVEFAULT()   \
00252 public: \
00253 virtual bool ApproveFault(void) \
00254 {   \
00255     return true;    \
00256 }   \
00257 private:
00258 /* _RO_DO_APPROVEFAULT macro ends here */
00259 
00260 /* _RO_DO_APPROVEMIGRATION macro starts here */
00261 #define _RO_DO_APPROVEMIGRATION()   \
00262 public: \
00263 virtual bool ApproveMigration(void) \
00264 {   \
00265     return true;    \
00266 }   \
00267 private:
00268 /* _RO_DO_APPROVEMIGRATION macro ends here */
00269 
00270 
00271 /* _RO_DO_SETUPLOADBALANCE macro starts here */
00272 #define _RO_DO_SETUPLOADBALANCE(x)  \
00273 public: \
00274 virtual void _Internal_SetupLoadBalance(void)   \
00275 {   \
00276     SetLoadBalancing(x);    \
00277 }   \
00278 private:
00279 /* _RO_DO_SETUPLOADBALANCE macro ends here */
00280 
00281 /* _RO_DO_SETUPLOADBALANCEDEFAULT macro starts here */
00282 #define _RO_DO_SETUPLOADBALANCEDEFAULT(x)   \
00283 public: \
00284 virtual void _Internal_SetupLoadBalanceDefault(void)    \
00285 {   \
00286     SetLoadBalancingDefault(x); \
00287 }   \
00288 private:
00289 /* _RO_DO_SETUPLOADBALANCEDEFAULT macro ends here */
00290 
00291 /* _RO_DO_SETUPLOADBALANCESCORE macro starts here */
00292 #define _RO_DO_SETUPLOADBALANCESCORE(x) \
00293 public: \
00294 virtual void _Internal_SetupLoadBalanceScore(void)  \
00295 {   \
00296     SetLoadScore(x);    \
00297 }   \
00298 private:
00299 /* _RO_DO_SETUPLOADBALANCESCORE macro ends here */
00300 
00301 /* _RO_DO_SETUPLOADBALANCESCOREDEFAULT macro starts here */
00302 #define _RO_DO_SETUPLOADBALANCESCOREDEFAULT(x)  \
00303 public: \
00304 virtual void _Internal_SetupLoadBalanceScoreDefault(void)   \
00305 {   \
00306     SetLoadScoreDefault(x); \
00307 }   \
00308 private:
00309 /* _RO_DO_SETUPLOADBALANCESCOREDEFAULT macro ends here */
00310 
00311 
00312 // Distance propagate functions
00313 
00314 /* _RO_DO_SETUPPROPAGATEDISTANCE macro starts here */
00315 #define _RO_DO_SETUPPROPAGATEDISTANCE(x)    \
00316 public: \
00317 virtual void _Internal_SetupPropagateDistance(void) \
00318 {   \
00319     SetPropagateToSessionDistance(x);   \
00320 }   \
00321 private:
00322 /* _RO_DO_SETUPPROPAGATEDISTANCE macro ends here */
00323 
00324 /* _RO_DO_SETUPPROPAGATEDISTANCEDEFAULT macro starts here */
00325 #define _RO_DO_SETUPPROPAGATEDISTANCEDEFAULT(x) \
00326 public: \
00327 virtual void _Internal_SetupPropagateDistanceDefault(void)  \
00328 {   \
00329     SetPropagateToSessionDistanceDefault(x);    \
00330 }   \
00331 private:
00332 /* _RO_DO_SETUPPROPAGATEDISTANCEDEFAULT macro ends here */
00333 
00334 
00335 // Register DataBlocks functions
00336 
00337 /* _RO_DEF_REGISTERDATABLOCKS macro starts here */
00338 #define _RO_DEF_REGISTERDATABLOCKS(x)   \
00339 void _MAKE_RO(x)::RegisterDataBlocks(void);
00340 /* _RO_DEF_REGISTERDATABLOCKS macro ends here */
00341 
00342 /* _RO_DO_BEGINREGISTERDATABLOCKS macro starts here */
00343 #define _RO_DO_BEGINREGISTERDATABLOCKS(x)   \
00344 void _MAKE_RO(x)::RegisterDataBlocks(void)  \
00345 {   \
00346     _MAKE_BASE(x) *basepoint = (_MAKE_BASE(x) *)this;   \
00347     basepoint = basepoint;
00348 /* _RO_DO_BEGINREGISTERDATABLOCKS macro ends here */
00349 
00350 
00351 // Include visual debugger information if required
00352 /* _RO_DO_SETDATABLOCKVARIABLENAME macro starts here */
00353 #ifdef REPLICANET_VISUALDEBUGGER
00354 #define _RO_DO_SETDATABLOCKVARIABLENAME(x)  \
00355     datablock->SetVariableName(#x);
00356 #else
00357 #define _RO_DO_SETDATABLOCKVARIABLENAME(x)
00358 #endif
00359 /* _RO_DO_SETDATABLOCKVARIABLENAME macro starts here */
00360 
00361 
00362 /* _RO_DO_DATABLOCK_MAKERELIABLE macro starts here */
00363 #define _RO_DO_DATABLOCK_MAKERELIABLE() \
00364 datablock->SetReliableFlag(true);   \
00365 datablock->SetCertainFlag(false);
00366 /* _RO_DO_DATABLOCK_MAKERELIABLE macro ends here */
00367 
00368 /* _RO_DO_DATABLOCK_MAKECERTAIN macro starts here */
00369 #define _RO_DO_DATABLOCK_MAKECERTAIN()  \
00370 datablock->SetReliableFlag(false);  \
00371 datablock->SetCertainFlag(true);
00372 /* _RO_DO_DATABLOCK_MAKECERTAIN macro ends here */
00373 
00374 /* _RO_DO_DATABLOCK_MAKEUNRELIABLE macro starts here */
00375 #define _RO_DO_DATABLOCK_MAKEUNRELIABLE()   \
00376 datablock->SetReliableFlag(false);  \
00377 datablock->SetCertainFlag(false);
00378 /* _RO_DO_DATABLOCK_MAKEUNRELIABLE macro ends here */
00379 
00380 /* _RO_DO_DATABLOCK_MAKEAUTOMATIC macro starts here */
00381 #define _RO_DO_DATABLOCK_MAKEAUTOMATIC()    \
00382 datablock->SetAutomaticUpdatesFlag(true);
00383 /* _RO_DO_DATABLOCK_MAKEAUTOMATIC macro ends here */
00384 
00385 /* _RO_DO_DATABLOCK_MAKEMANUAL macro starts here */
00386 #define _RO_DO_DATABLOCK_MAKEMANUAL()   \
00387 datablock->SetAutomaticUpdatesFlag(false);
00388 /* _RO_DO_DATABLOCK_MAKEMANUAL macro ends here */
00389 
00390 /* _RO_DO_DATABLOCK_SETUPDATEDELAYMINIMUM macro starts here */
00391 #define _RO_DO_DATABLOCK_SETUPDATEDELAYMINIMUM(x)   \
00392 datablock->SetUpdateDelayMinimum(x);
00393 /* _RO_DO_DATABLOCK_SETUPDATEDELAYMINIMUM macro ends here */
00394 
00395 /* _RO_DO_DATABLOCK_SETFORCESENDMAXIMUMUPDATES macro starts here */
00396 #define _RO_DO_DATABLOCK_SETFORCESENDMAXIMUMUPDATES(x)  \
00397 datablock->SetForceSendMaximumUpdates(x);
00398 /* _RO_DO_DATABLOCK_SETFORCESENDMAXIMUMUPDATES macro ends here */
00399 
00400 /* _RO_DO_DATABLOCK_SETFORCESENDTIMEDELAY macro starts here */
00401 #define _RO_DO_DATABLOCK_SETFORCESENDTIMEDELAY(x)   \
00402 datablock->SetForceSendTimeDelay(x);
00403 /* _RO_DO_DATABLOCK_SETFORCESENDTIMEDELAY macro ends here */
00404 
00405 
00406 /* _RO_DO_ENDREGISTERDATABLOCKS macro starts here */
00407 #define _RO_DO_ENDREGISTERDATABLOCKS(x) \
00408 }
00409 /* _RO_DO_ENDREGISTERDATABLOCKS macro ends here */
00410 
00411 // The macros that handle individual data block registrations are in each data block include file
00412 
00413 /* _RO_DO_DEFBLOCK_FUNCTION_VAR macro starts here */
00414 #define _RO_DO_DEFBLOCK_FUNCTION_VAR(x) \
00415     void *mDataBlockFunction_##x;   \
00416     static void x(void *classp,void *opaque_message);
00417 /* _RO_DO_DEFBLOCK_FUNCTION_VAR macro ends here */
00418 
00419 /* GLOBAL_FUNCTION_CALL macro starts here */
00420 #define GLOBAL_FUNCTION_CALL(x) \
00421 {##x    ;}  \
00422 {Call_##x   ;};
00423 /* GLOBAL_FUNCTION_CALL macro ends here */
00424 
00425 /* ALL_REPLICAS_FUNCTION_CALL macro starts here */
00426 #define ALL_REPLICAS_FUNCTION_CALL(x)   \
00427 {Call_##x   ;};
00428 /* ALL_REPLICAS_FUNCTION_CALL macro ends here */
00429 
00430 /* MASTER_FUNCTION_CALL macro starts here */
00431 #define MASTER_FUNCTION_CALL(x) \
00432 {Call_##x   ;};
00433 /* MASTER_FUNCTION_CALL macro ends here */
00434 
00435 /* NOMINATED_REPLICAS_FUNCTION_CALL macro starts here */
00436 #define NOMINATED_REPLICAS_FUNCTION_CALL(a,b,x) \
00437 DataBlock_Function::SetSessionIDFilter(a,b);    \
00438 {Call_##x   ;};
00439 /* NOMINATED_REPLICAS_FUNCTION_CALL macro ends here */
00440 
00441 /* Macros used outside of object classes */
00442 #ifdef REPLICANET_VISUALDEBUGGER
00443 #define _RO_DEF_DO_PREDEFREGBLOCK(x)    \
00444 theBlock = new RNReplicaNet::s_RO_RegistryBlock(ro_id,objectfuncp,objectfuncp_delete, #x );
00445 #else
00446 #define _RO_DEF_DO_PREDEFREGBLOCK(x)    \
00447 theBlock = new RNReplicaNet::s_RO_RegistryBlock(ro_id,objectfuncp,objectfuncp_delete, 0 );
00448 #endif      // ifdef REPLICANET_VISUALDEBUGGER
00449 /* _RO_DEF_DO_PREDEF macro starts here */
00450 #define _RO_DEF_DO_PREDEF(x)    \
00451 _RO_DEF_ALLOCATEFUNC(x);    \
00452 objectfuncp = _MAKE_RO_ALLOCFUNC(x);    \
00453 objectfuncp_delete = _MAKE_RO_DELETEFUNC(x);    \
00454 _RO_DEF_DO_PREDEFREGBLOCK(x);   \
00455 _MAKE_RO_SETCLASSIDFUNC(x)(ro_id,theBlock); \
00456 repNet->AddItem(theBlock);  \
00457 _MAKE_RO_REGISTERFUNC(x)(); \
00458 ro_id++;
00459 /* _RO_DEF_DO_PREDEF macro ends here */
00460 
00461 //#ifdef DOREPNETEXPORTAPI
00462 
00463 #define _RO_DO_PREREGISTER_FUNC()   \
00464 static bool doneregister = false;   \
00465 void _ReplicaNetPreRegisterReplicasFunc(RNReplicaNet::ReplicaNet *repNet)   \
00466 {   \
00467     RNReplicaNet::ReplicaNetDLLRegister thing;  \
00468     thing.Call(repNet); \
00469 }   \
00470 void RNReplicaNet::ReplicaNetDLLRegister::Call(RNReplicaNet::ReplicaNet *repNet)    \
00471 {   \
00472     doneregister = true;    \
00473     RNReplicaNet::s_RO_RegistryBlock *theBlock = 0; \
00474     RNReplicaNet::p_RO_Func *objectfuncp = 0;   \
00475     RNReplicaNet::p_RO_FuncDelete *objectfuncp_delete = 0;  \
00476     int ro_id = 0;  \
00477     ro_id = ro_id;  \
00478     objectfuncp_delete = objectfuncp_delete;    \
00479     objectfuncp = objectfuncp;  \
00480     theBlock = theBlock;
00481 
00482 // The extra bits added above are to avoid the compiler warnings for empty lists of classes to register
00483 
00484 #define _RO_DO_PREREGISTER_FUNC_END()   \
00485 }
00486 
00487 //#else
00488 //
00490 //#define _RO_DO_PREREGISTER_FUNC() \
00491 //void ReplicaNet::PreRegisterReplicas(void)    \
00492 //{ \
00493 //  p_RO_Func *objectfuncp = 0; \
00494 //  int ro_id = 0;
00496 //
00498 //#define _RO_DO_PREREGISTER_FUNC_END() \
00499 //}
00501 //
00502 //#endif
00503 
00504 
00505 /* _RO_DEF_REPLICAOBJECT_INTERNAL_SETUPOPAQUEPOINTER macro starts here */
00506 #define _RO_DEF_REPLICAOBJECT_INTERNAL_SETUPOPAQUEPOINTER() \
00507 protected:  \
00508 virtual void _Internal_SetupOpaquePointer(void);    \
00509 public:
00510 /* _RO_DEF_REPLICAOBJECT_INTERNAL_SETUPOPAQUEPOINTER macro ends here */
00511 
00512 /* _RO_DO_REPLICAOBJECT_INTERNAL_SETUPOPAQUEPOINTER macro starts here */
00513 #define _RO_DO_REPLICAOBJECT_INTERNAL_SETUPOPAQUEPOINTER(x,y)   \
00514 void _MAKE_RO(x)::_Internal_SetupOpaquePointer(void)    \
00515 {   \
00516     SetOpaquePointer((void *)((y *)((_MAKE_BASE(x) *)this)));   \
00517 }
00518 /* _RO_DO_REPLICAOBJECT_INTERNAL_SETUPOPAQUEPOINTER macro ends here */
00519 
00520 
00521 #endif

Generated on Sun Oct 30 01:11:54 2005 for ReplicaNet by  doxygen 1.4.1