我要发帖 回复

高级会员

5

主题

1013

积分

0

专家分

兴趣点(最多三项):

视景仿真

私信
发表时间 : 2007-10-15 13:29:34 | 浏览 : 3369    评论 : 4
VRLink对象扩展中经常需要传递数组变量,下面两个宏可以给大家带来方便:
//编码器
#define DtDEFINE_SIMPLE_Test_ARRAY_ATTR_ENCODER( \
   attrName, netType, size, inspector) \
   void DtTestEncoder::encode##attrName(const DtTestStateRepository& rep,\
   RTI::AttributeHandleValuePairSet* attrs,\
   RTI::AttributeHandle attrHandle)\
   {\
        const netType* netVal;\
        netVal = rep.inspector();\
  attrs->add(attrHandle, (char*)netVal, sizeof(netType)*size);\
   }
#define DtDEFINE_SIMPLE_Test_ARRAY_ATTR_CHECKER( \
   attrName, netType, size, inspector) \
   bool DtTestEncoder::need##attrName(const DtTestStateRepository& stateRep,\
   const DtTestStateRepository& asSeenByRemote)\
   {\
     return (bool) (memcmp(stateRep.inspector(),asSeenByRemote.inspector(),sizeof(netType)*size));\
   }
//解码器
#define DtDEFINE_SIMPLE_Test_ARRAY_ATTR_DECODER( \
   attrName, netType,size,inspector) \
   void DtTestDecoder::decode##attrName(DtTestStateRepository* stateRep,\
   const RTI::AttributeHandleValuePairSet& attrs,\
   int pairSetIndex)\
   {\
   RTI::ULong length = attrs.getValueLength(pairSetIndex);\
   if (length > sizeof(netType)*size)\
   {\
   DtWarn("Size of value decoded for attribute #attrName (%d)\n",\
   length);\
   DtWarn(" is larger than size of #attrName (%d)\n", sizeof(netType)*size);\
   return;\
   }\
   netType netVal[size];\
   attrs.getValue(pairSetIndex, (char*)netVal, length);\
   stateRep->inspector(netVal);\
   }


最近VR访客

wsxtgly 评论于2007-11-9 20:12:42
A Complete Open Source Game and Simulation Engine


jeepen 评论于2008-5-17 09:26:32
呵呵,成了正式会员啦,高兴,再顶


Honey 评论于2008-5-31 15:39:30
这是自定义的宏,又不是系统自带的,你放到这谁看得懂呀


手机版|VR开发网 统计 津ICP备18009691号
网安备12019202000257

GMT+8, 2021-10-29 05:29 AM

返回顶部