15 #ifndef DtRtiTemplateMsgInetAddrParams_H_
16 #define DtRtiTemplateMsgInetAddrParams_H_
20 #include <vlutil/vlInetAddr.h>
32 , myFamilyParam(familyParam) {}
40 myFamilyParam->setParam(addr.family());
44 MAKRti::DtInetAddr
param()
const
46 const MAKRti::DtNetU128* ptr =
paramPtr();
47 return MAKRti::DtInetAddr(*ptr,
48 MAKRti::DtInetUtils::DtInetAddrFamily(
49 static_cast<MAKRti::DtU32>(myFamilyParam->param())));
55 const MAKRti::DtNetU128* ptr =
paramPtr();
56 addr = MAKRti::DtInetAddr(*ptr,
57 MAKRti::DtInetUtils::DtInetAddrFamily(
58 static_cast<MAKRti::DtU32>(myFamilyParam->param())));
64 return (reinterpret_cast<char*>(
paramPtr()) +
sizeof(MAKRti::DtNetU128));
69 return (reinterpret_cast<const char*>(
paramPtr()) +
sizeof(MAKRti::DtNetU128));
73 unsigned minSize() {
return sizeof(MAKRti::DtNetU128); }
81 MAKRti::DtVerbose <<
name() <<
": " <<
param().toDtString() << std::endl;
91 assert(prevBoundary == 0 || (prevBoundary % 8) == 0);
98 MAKRti::DtNetU128*
paramPtr() {
return reinterpret_cast<MAKRti::DtNetU128*
>(
beginPtr()); }
99 const MAKRti::DtNetU128*
paramPtr()
const {
return reinterpret_cast<const MAKRti::DtNetU128*
>(
beginPtr()); }
111 template<
typename AllocatedMsgParamType>
116 AllocatedMsgParamType* allocatedNumParam,
DtRtiMsgParam<MAKRti::DtU32,
117 MAKRti::DtNetU32>* familyParam)
120 , myFamilyParam(familyParam)
135 *ptr = addr.toU128();
144 bool setParams(
const MAKRti::DtInetAddr* addrs,
unsigned num)
151 MAKRti::DtNetU128* ptr =
paramPtr();
154 for(
unsigned i = 0; i < num; ++i)
158 myFamilyParam->setParam(static_cast<MAKRti::DtU32>(addrs[i].family()));
160 ptr[i] = addrs[i].toU128();
169 template <
typename ParamContainerType>
177 MAKRti::DtNetU128* ptr =
paramPtr();
180 typename ParamContainerType::const_iterator iter = container.begin();
181 typename ParamContainerType::const_iterator iterEnd = container.end();
182 for(
unsigned i = 0; iter != iterEnd; ++iter, ++i)
186 myFamilyParam->setParam(static_cast<MAKRti::DtU32>(iter->family()));
188 ptr[i] = iter->toU128();
197 template <
typename ParamContainerType>
201 const MAKRti::DtNetU128* ptr =
paramPtr();
202 DtInetUtils::DtInetAddrFamily family =
203 DtInetUtils::DtInetAddrFamily(static_cast<DtU32>(myFamilyParam->param()));
204 for(
unsigned i = 0; i < count; ++i)
206 container.insert(container.end(), MAKRti::DtInetAddr(ptr[i], family));
215 const MAKRti::DtNetU128* ptr =
paramPtr();
216 DtInetUtils::DtInetAddrFamily family =
217 DtInetUtils::DtInetAddrFamily(static_cast<MAKRti::DtU32>(myFamilyParam->param()));
218 for(
unsigned i = 0; i < count; ++i)
220 buff[i] = MAKRti::DtInetAddr(ptr[i], family);
233 const MAKRti::DtNetU128* ptr =
paramPtr();
234 addr = MAKRti::DtInetAddr(ptr[0],
235 DtInetUtils::DtInetAddrFamily(static_cast<MAKRti::DtU32>(myFamilyParam->param())));
248 const MAKRti::DtNetU128* ptr =
paramPtr();
250 DtInetUtils::DtInetAddrFamily(static_cast<MAKRti::DtU32>(myFamilyParam->param())));
282 MAKRti::DtVerbose <<
name() <<
": " << std::endl;
283 MAKRti::DtInetAddr addr;
286 MAKRti::DtVerbose <<
" " << addr.toDtString() << std::endl;
289 MAKRti::DtVerbose <<
" " << addr.toDtString() << std::endl;
294 MAKRti::DtVerbose <<
" Empty" << std::endl;
307 assert(prevBoundary == 0 || (prevBoundary % 8) == 0);
314 const MAKRti::DtNetU128*
paramPtr()
const {
return reinterpret_cast<const MAKRti::DtNetU128*
>(
beginPtr()); }
348 #define DtDECLARE_INET_ADDR_PARAMETER_METHODS(ParamName) \
349 DtDECLARE_BY_REF_PARAMETER_METHODS(ParamName, MAKRti::DtInetAddr) \
351 typedef DtRtiMsgParam<MAKRti::DtInetAddr, MAKRti::DtNetU128> ParamName##Type; \
352 ParamName##Type* my##ParamName;
358 #define DtDECLARE_INET_ADDR_ARRAY_PARAMETER_METHODS(ParamName, CountBitSize) \
359 DtDECLARE_ARRAY_PARAMETER_METHODS(ParamName, MAKRti::DtInetAddr) \
361 typedef DtRtiArrayMsgParam<MAKRti::DtInetAddr, MAKRti::DtU128, MAKRti::DtNetU128, \
362 DtRtiMsgParam<MAKRti::DtU##CountBitSize, MAKRti::DtNetU##CountBitSize> > ParamName##Type; \
363 ParamName##Type* my##ParamName;
375 #define DtDEFINE_INET_ADDR_PARAMETER_METHODS(ClassName, ParamName) \
376 DtDEFINE_BY_REF_PARAMETER_METHODS(ClassName, ParamName, MAKRti::DtInetAddr)
385 #define DtDEFINE_INET_ADDR_ARRAY_PARAMETER_CONTAINER_METHODS(ClassName, ParamName, CtrType)\
386 void ClassName::set##ParamName(const CtrType& container, \
387 DtResizeArrayFlag resizeFlag) \
389 unsigned currNum = my##ParamName->numItems(); \
390 if(resizeFlag == DtResizeIfNeeded && container.size() != currNum) \
392 unsigned currSize = currNum * sizeof(MAKRti::DtNetU128); \
393 unsigned newSize = container.size() * sizeof(MAKRti::DtNetU128); \
394 char* begPtr = static_cast<char*>(my##ParamName->beginPtr()); \
395 if(newSize > currSize) \
397 insertBytes(begPtr + currSize, newSize - currSize); \
399 else if(currSize > newSize) \
401 deleteBytes(begPtr + newSize, currSize - newSize); \
403 my##ParamName->setNumItems(container.size()); \
405 my##ParamName->setParams(container); \
407 void ClassName::get##ParamName(CtrType& container) const \
409 my##ParamName->getParams(container); \
416 #define DtDEFINE_INET_ADDR_ARRAY_PARAMETER_METHODS(ClassName, ParamName) \
417 const char* ClassName::ParamName##Name = #ParamName; \
418 DtDEFINE_INET_ADDR_ARRAY_PARAMETER_CONTAINER_METHODS(ClassName, ParamName, std::set<MAKRti::DtInetAddr>) \
419 DtDEFINE_INET_ADDR_ARRAY_PARAMETER_CONTAINER_METHODS(ClassName, ParamName, std::vector<MAKRti::DtInetAddr>) \
420 DtDEFINE_INET_ADDR_ARRAY_PARAMETER_CONTAINER_METHODS(ClassName, ParamName, std::list<MAKRti::DtInetAddr>) \
421 DtDEFINE_INET_ADDR_ARRAY_PARAMETER_CONTAINER_METHODS(ClassName, ParamName, std::deque<MAKRti::DtInetAddr>) \
422 void ClassName::set##ParamName(const MAKRti::DtInetAddr* buff, \
423 unsigned num, DtResizeArrayFlag resizeFlag) \
425 unsigned currNum = my##ParamName->numItems(); \
426 if(resizeFlag == DtResizeIfNeeded && num != currNum) \
428 unsigned currSize = currNum * sizeof(MAKRti::DtNetU128); \
429 unsigned newSize = num * sizeof(MAKRti::DtNetU128); \
430 char* begPtr = static_cast<char*>(my##ParamName->beginPtr()); \
431 if(newSize > currSize) \
433 insertBytes(begPtr + currSize, newSize - currSize); \
435 else if(currSize > newSize) \
437 deleteBytes(begPtr + newSize, currSize - newSize); \
439 my##ParamName->setNumItems(num); \
441 my##ParamName->setParams(buff, num); \
443 unsigned ClassName::get##ParamName(MAKRti::DtInetAddr* buff) const \
445 return my##ParamName->getParams(buff); \
460 #define DtADD_INET_ADDR_PARAMETER(ParamName, FamilyParamName) \
461 addParameter(my##ParamName = new ParamName##Type(ParamName##Name, my##FamilyParamName));
467 #define DtADD_INET_ADDR_ARRAY_PARAMETER(ParamName, SizeParamName, FamilyParamName) \
468 addParameter(my##ParamName = new ParamName##Type(ParamName##Name, my##SizeParamName, my##FamilyParamName));