Define_RO.h

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

Generated on Sat Jun 28 22:02:16 2008 for ReplicaNet and RNLobby by  doxygen 1.5.3