15 #ifndef __IPSDKBASEDATA_DATAITEMNODEHDRMACROSDETAILS_H__ 16 #define __IPSDKBASEDATA_DATAITEMNODEHDRMACROSDETAILS_H__ 18 #include <IPSDKBaseData/DataItem/Node/BaseDataItemNode.h> 19 #include <IPSDKBaseData/DataItem/NodeColl/DataItemNodeColl.h> 20 #include <IPSDKBaseData/DataItem/Leaf/DataItemLeaf.h> 21 #include <IPSDKBaseData/DataItem/Leaf/DataItemEnumLeaf.h> 22 #include <IPSDKBaseData/DataItem/LeafColl/DataItemLeafColl.h> 23 #include <IPSDKBaseData/DataItem/Map/DataItemMap.h> 25 #include <boost/preprocessor/seq.hpp> 26 #include <boost/utility/enable_if.hpp> 27 #include <boost/type_traits/is_same.hpp> 28 #include <boost/mpl/less.hpp> 29 #include <boost/mpl/greater_equal.hpp> 30 #include <boost/smart_ptr/make_shared_object.hpp> 40 make_oitem(
const std::string& itemName,
const T& value);
45 make_iitem(
const std::string& itemName, T& value);
50 template <
typename Mutex>
59 #define IPSDK_NODE_DATA_ACCESS_MACRO(r, infoSeq, idx, childElem) \ 61 struct BOOST_PP_SEQ_ELEM(1, childElem) { \ 62 BOOST_PP_CAT(IPSDK_NODE_DATA_INFO_, \ 63 BOOST_PP_SEQ_ELEM(0, childElem))( \ 64 BOOST_PP_SEQ_ELEM(1, infoSeq), \ 65 BOOST_PP_SEQ_ELEM(0, infoSeq), \ 67 static const ipsdk::eDataItemType::domain g_itemType = \ 68 NodeType::g_itemType; \ 71 template <typename DelayImpl> \ 72 struct ChildNodeToIdx<BOOST_PP_SEQ_ELEM(1, childElem), DelayImpl> { \ 73 static const ipsdk::ipUInt32 g_childNodeIdx = idx; \ 75 template <typename DelayImpl> \ 76 struct IdxToChildNode<idx, DelayImpl> { \ 77 typedef BOOST_PP_SEQ_ELEM(1, childElem) ChildNodeType; \ 79 template <typename DelayImpl> \ 80 struct ChildNodeInfo<BOOST_PP_SEQ_ELEM(1, childElem), DelayImpl> \ 82 typedef BOOST_PP_SEQ_ELEM(0, infoSeq) DataItemType; \ 83 BOOST_PP_CAT(IPSDK_NODE_DATA_INFO_, \ 84 BOOST_PP_SEQ_ELEM(0, childElem))( \ 85 BOOST_PP_SEQ_ELEM(1, infoSeq), \ 86 BOOST_PP_SEQ_ELEM(0, infoSeq), \ 89 template <typename ChildNode> \ 90 inline typename boost::enable_if_c< \ 91 boost::is_same<ChildNode, BOOST_PP_SEQ_ELEM(1, childElem)>::value, \ 92 const typename ChildNodeInfo<ChildNode>::NodeType&>::type \ 94 return BOOST_PP_CAT(_node, BOOST_PP_SEQ_ELEM(1, childElem))._node; \ 96 template <typename ChildNode> \ 97 inline typename boost::enable_if_c< \ 98 boost::is_same<ChildNode, BOOST_PP_SEQ_ELEM(1, childElem)>::value, \ 99 typename ChildNodeInfo<ChildNode>::NodeType&>::type \ 101 return BOOST_PP_CAT(_node, BOOST_PP_SEQ_ELEM(1, childElem))._node; \ 103 BOOST_PP_CAT(IPSDK_NODE_DATA_ACCESS_, BOOST_PP_SEQ_ELEM(0, childElem))( \ 104 childElem, BOOST_PP_SEQ_ELEM(0, infoSeq)); \ 105 BOOST_PP_CAT(IPSDK_NODE_DATA_GET_DEFAULT_, \ 106 BOOST_PP_IF(BOOST_PP_EQUAL(BOOST_PP_SEQ_SIZE(childElem), 4), \ 107 BOOST_PP_SEQ_ELEM(0, childElem), \ 109 (BOOST_PP_SEQ_ELEM(1, childElem), \ 110 BOOST_PP_SEQ_ELEM(BOOST_PP_DEC(BOOST_PP_SEQ_SIZE(childElem)), \ 115 #define IPSDK_NODE_DATA_GET_DEFAULT_NONE(childName, defaultValue) 119 #define IPSDK_NODE_DATA_FIND_NODE_MACRO(r, infoSeq, childElem) \ 120 if (BOOST_PP_SEQ_ELEM(0, infoSeq) == \ 121 BOOST_PP_STRINGIZE(BOOST_PP_SEQ_ELEM(1, childElem))) { \ 122 const ItemInfoStr& itemInfoStr = \ 123 ChildNodeInfo<BOOST_PP_SEQ_ELEM(1, childElem)>:: \ 124 getItemInfoStr<BOOST_PP_SEQ_ELEM(1, infoSeq)>(); \ 125 ItemInfoPtr pItemInfo(boost::make_shared<ItemInfo>( \ 126 BOOST_PP_CAT(_node, BOOST_PP_SEQ_ELEM(1, childElem))._node, \ 127 itemInfoStr._itemName, itemInfoStr._itemToolTip)); \ 133 #define IPSDK_NODE_DATA_DECLARE_NODE_MACRO(r, itemName, childElem) \ 134 NodeAccessor<ChildNodeInfo<BOOST_PP_SEQ_ELEM(1, childElem)>::NodeType> \ 135 BOOST_PP_CAT(_node, BOOST_PP_SEQ_ELEM(1, childElem)); 139 #define IPSDK_NODE_DATA_ENUM_NAMES_MACRO(r, _, childElem) \ 140 g_itemNames.insert(BOOST_PP_STRINGIZE(BOOST_PP_SEQ_ELEM(1, childElem))); 144 #define IPSDK_NODE_DATA_INIT_MACRO(r, _, childElem) \ 145 BOOST_PP_EXPR_IF(BOOST_PP_EQUAL(BOOST_PP_SEQ_SIZE(childElem), 4), \ 146 BOOST_PP_CAT(IPSDK_NODE_DATA_INIT_, BOOST_PP_SEQ_ELEM(0, childElem)) \ 147 (BOOST_PP_SEQ_ELEM(1, childElem), \ 148 BOOST_PP_SEQ_ELEM(BOOST_PP_DEC(BOOST_PP_SEQ_SIZE(childElem)), \ 153 #define IPSDK_NODE_DATA_WRITE_MACRO(r, _, childElem) \ 154 BOOST_PP_CAT(IPSDK_NODE_DATA_WRITE_, BOOST_PP_SEQ_ELEM(0, childElem)) \ 155 (BOOST_PP_SEQ_ELEM(1, childElem)) 159 #define IPSDK_NODE_DATA_READ_MACRO(r, _, childElem) \ 160 BOOST_PP_CAT(IPSDK_NODE_DATA_READ_, BOOST_PP_SEQ_ELEM(0, childElem)) \ 161 (BOOST_PP_SEQ_ELEM(1, childElem)) 165 #define IPSDK_NODE_DATA_COPY_MACRO(r, _, childElem) \ 166 BOOST_PP_CAT(_node, BOOST_PP_SEQ_ELEM(1, childElem))._node = \ 167 pObject->BOOST_PP_CAT(_node, BOOST_PP_SEQ_ELEM(1, childElem))._node; 172 #define IPSDK_NODE_DATA_STD_INFO(libraryName, className, childName) \ 173 template <typename MsgEnumType> \ 174 static const ItemInfoStr& getItemInfoStr() { \ 175 boost::lock_guard<boost::mutex> lock(getDataItemNodeMutex()); \ 176 static boost::shared_ptr<ItemInfoStr> g_pItemInfoStr; \ 177 if (g_pItemInfoStr.get() == 0) { \ 178 static std::string g_nameId = BOOST_PP_STRINGIZE(childName); \ 179 static std::string g_toolTipId = createMessage(MsgEnumType:: \ 181 BOOST_PP_CAT(className, \ 182 BOOST_PP_CAT(childName, ToolTipId)))); \ 183 g_pItemInfoStr = boost::make_shared<ItemInfoStr>( \ 184 g_nameId, g_toolTipId); \ 186 return *g_pItemInfoStr; \ 194 #define IPSDK_NODE_DATA_TYPE_LEAF(valueType) \ 195 ipsdk::DataItemLeaf<valueType> 199 #define IPSDK_NODE_DATA_INFO_LEAF(libraryName, className, childElem) \ 200 IPSDK_NODE_DATA_STD_INFO(libraryName, className, BOOST_PP_SEQ_ELEM(1, childElem)); \ 201 typedef IPSDK_NODE_DATA_TYPE_LEAF(BOOST_PP_SEQ_ELEM(2, childElem)) NodeType; \ 202 typedef IPSDK_NODE_DATA_TYPE_LEAF(BOOST_PP_SEQ_ELEM(2, childElem))::ValueType ValueType; 206 #define IPSDK_NODE_DATA_ACCESS_LEAF(childElem, className) \ 207 IPSDK_NODE_DATA_ACCESS_LEAF_MACRO( \ 208 BOOST_PP_SEQ_ELEM(1, childElem), \ 209 BOOST_PP_SEQ_ELEM(2, childElem), \ 214 #define IPSDK_NODE_DATA_ACCESS_LEAF_MACRO(childName, valueType, className) \ 215 template <typename ChildNode> \ 216 inline typename boost::enable_if_c< \ 217 boost::is_same<ChildNode, childName>::value, \ 218 const typename ChildNodeInfo<ChildNode>::ValueType&>::type \ 220 return BOOST_PP_CAT(_node, childName)._node.getValue(); \ 222 template <typename ChildNode> \ 223 inline typename boost::enable_if_c< \ 224 boost::is_same<ChildNode, childName>::value, \ 225 typename ChildNodeInfo<ChildNode>::ValueType&>::type \ 227 return BOOST_PP_CAT(_node, childName)._node.accessValue(); \ 229 template <typename ChildNode> \ 230 inline typename boost::enable_if_c< \ 231 boost::is_same<ChildNode, childName>::value, \ 233 setValue(const typename ChildNodeInfo<ChildNode>::ValueType& value) { \ 234 BOOST_PP_CAT(_node, childName)._node.setValue(value); \ 239 #define IPSDK_NODE_DATA_INIT_LEAF(childName, defaultValue) \ 240 BOOST_PP_CAT(_node, childName)._node.setValue(defaultValue); 244 #define IPSDK_NODE_DATA_GET_DEFAULT_LEAF(childName, defaultValue) \ 245 template <typename ChildNode> \ 246 inline static typename boost::enable_if_c< \ 247 boost::is_same<ChildNode, childName>::value, \ 248 typename ChildNodeInfo<ChildNode>::ValueType>::type \ 249 getDefault() { return defaultValue;} 253 #define IPSDK_NODE_DATA_READ_LEAF(childName) \ 254 ar >> ipsdk::make_iitem(BOOST_PP_STRINGIZE(childName), \ 255 BOOST_PP_CAT(_node, childName)._node); 259 #define IPSDK_NODE_DATA_WRITE_LEAF(childName) \ 260 ar << ipsdk::make_oitem(BOOST_PP_STRINGIZE(childName), \ 261 BOOST_PP_CAT(_node, childName)._node); 268 #define IPSDK_NODE_DATA_TYPE_ENUMLEAF(valueType) \ 269 ipsdk::DataItemEnumLeaf<valueType> 273 #define IPSDK_NODE_DATA_INFO_ENUMLEAF(libraryName, className, childElem) \ 274 IPSDK_NODE_DATA_STD_INFO(libraryName, className, BOOST_PP_SEQ_ELEM(1, childElem)); \ 275 typedef IPSDK_NODE_DATA_TYPE_ENUMLEAF(BOOST_PP_SEQ_ELEM(2, childElem)) NodeType; \ 276 typedef IPSDK_NODE_DATA_TYPE_ENUMLEAF(BOOST_PP_SEQ_ELEM(2, childElem))::EnumType ValueType; \ 277 static void checkNbParams() { \ 278 BOOST_STATIC_ASSERT_MSG(BOOST_PP_SEQ_SIZE(childElem) == 4, \ 279 "Enumerates need default value"); \ 284 #define IPSDK_NODE_DATA_ACCESS_ENUMLEAF(childElem, className) \ 285 IPSDK_NODE_DATA_ACCESS_ENUMLEAF_MACRO( \ 286 BOOST_PP_SEQ_ELEM(1, childElem), \ 287 BOOST_PP_SEQ_ELEM(2, childElem), \ 292 #define IPSDK_NODE_DATA_ACCESS_ENUMLEAF_MACRO(childName, valueType, className) \ 293 template <typename ChildNode> \ 294 inline typename boost::enable_if_c< \ 295 boost::is_same<ChildNode, childName>::value, \ 296 const typename ChildNodeInfo<ChildNode>::ValueType>::type \ 298 return BOOST_PP_CAT(_node, childName)._node.getValue(); \ 300 template <typename ChildNode> \ 301 inline typename boost::enable_if_c< \ 302 boost::is_same<ChildNode, childName>::value, \ 304 setValue(const typename ChildNodeInfo<ChildNode>::ValueType& value) { \ 305 BOOST_PP_CAT(_node, childName)._node.setValue(value); \ 310 #define IPSDK_NODE_DATA_INIT_ENUMLEAF(childName, defaultValue) \ 311 BOOST_PP_CAT(_node, childName)._node.setValue(defaultValue); 315 #define IPSDK_NODE_DATA_GET_DEFAULT_ENUMLEAF(childName, defaultValue) \ 316 template <typename ChildNode> \ 317 inline static typename boost::enable_if_c< \ 318 boost::is_same<ChildNode, childName>::value, \ 319 typename ChildNodeInfo<ChildNode>::ValueType>::type \ 320 getDefault() { return defaultValue;} 324 #define IPSDK_NODE_DATA_READ_ENUMLEAF(childName) \ 325 ar >> ipsdk::make_iitem(BOOST_PP_STRINGIZE(childName), \ 326 BOOST_PP_CAT(_node, childName)._node); 330 #define IPSDK_NODE_DATA_WRITE_ENUMLEAF(childName) \ 331 ar << ipsdk::make_oitem(BOOST_PP_STRINGIZE(childName), \ 332 BOOST_PP_CAT(_node, childName)._node); 339 #define IPSDK_NODE_DATA_TYPE_LEAF_COLL(valueType) \ 340 ipsdk::DataItemLeafColl<valueType> 344 #define IPSDK_NODE_DATA_INFO_LEAF_COLL(libraryName, className, childElem) \ 345 IPSDK_NODE_DATA_STD_INFO(libraryName, className, BOOST_PP_SEQ_ELEM(1, childElem)); \ 346 typedef IPSDK_NODE_DATA_TYPE_LEAF_COLL(BOOST_PP_SEQ_ELEM(2, childElem)) NodeType; \ 347 typedef IPSDK_NODE_DATA_TYPE_LEAF_COLL(BOOST_PP_SEQ_ELEM(2, childElem))::ValueType ValueType; \ 348 typedef IPSDK_NODE_DATA_TYPE_LEAF_COLL(BOOST_PP_SEQ_ELEM(2, childElem))::CollType CollType; 352 #define IPSDK_NODE_DATA_ACCESS_LEAF_COLL(childElem, className) \ 353 IPSDK_NODE_DATA_ACCESS_LEAF_COLL_MACRO( \ 354 BOOST_PP_SEQ_ELEM(1, childElem), \ 355 BOOST_PP_SEQ_ELEM(2, childElem), \ 360 #define IPSDK_NODE_DATA_ACCESS_LEAF_COLL_MACRO(childName, valueType, className) \ 361 template <typename ChildNode> \ 362 inline typename boost::enable_if_c< \ 363 boost::is_same<ChildNode, childName>::value, \ 364 const typename ChildNodeInfo<ChildNode>::CollType&>::type \ 365 getLeafColl() const { \ 366 return BOOST_PP_CAT(_node, childName)._node.getColl(); \ 368 template <typename ChildNode> \ 369 inline typename boost::enable_if_c< \ 370 boost::is_same<ChildNode, childName>::value, \ 371 typename ChildNodeInfo<ChildNode>::CollType&>::type \ 373 return BOOST_PP_CAT(_node, childName)._node.getColl(); \ 375 template <typename ChildNode> \ 376 inline typename boost::enable_if_c< \ 377 boost::is_same<ChildNode, childName>::value, \ 380 return BOOST_PP_CAT(_node, childName)._node.isEmpty(); \ 382 template <typename ChildNode> \ 383 inline typename boost::enable_if_c< \ 384 boost::is_same<ChildNode, childName>::value, \ 385 ipsdk::ipUInt32>::type \ 387 return BOOST_PP_CAT(_node, childName)._node.getSize(); \ 389 template <typename ChildNode> \ 390 inline typename boost::enable_if_c< \ 391 boost::is_same<ChildNode, childName>::value, \ 393 push_back(const typename ChildNodeInfo<ChildNode>::ValueType& value) { \ 394 BOOST_PP_CAT(_node, childName)._node.push_back(value); \ 396 template <typename ChildNode> \ 397 inline typename boost::enable_if_c< \ 398 boost::is_same<ChildNode, childName>::value, \ 401 BOOST_PP_CAT(_node, childName)._node.clear(); \ 406 #define IPSDK_NODE_DATA_INIT_LEAF_COLL(childName, defaultValue) \ 407 BOOST_PP_CAT(_node, childName)._node.getLeafColl() = defaultValue; 411 #define IPSDK_NODE_DATA_GET_DEFAULT_LEAF_COLL(childName, defaultValue) \ 412 template <typename ChildNode> \ 413 inline static typename boost::enable_if_c< \ 414 boost::is_same<ChildNode, childName>::value, \ 415 typename ChildNodeInfo<ChildNode>::ValueType>::type \ 416 getDefault() { return defaultValue;} 420 #define IPSDK_NODE_DATA_READ_LEAF_COLL(childName) \ 421 ar >> ipsdk::make_iitem(BOOST_PP_STRINGIZE(childName), \ 422 BOOST_PP_CAT(_node, childName)._node); 426 #define IPSDK_NODE_DATA_WRITE_LEAF_COLL(childName) \ 427 ar << ipsdk::make_oitem(BOOST_PP_STRINGIZE(childName), \ 428 BOOST_PP_CAT(_node, childName)._node); 435 #define IPSDK_NODE_DATA_TYPE_NODE(valueType) \ 440 #define IPSDK_NODE_DATA_INFO_NODE(libraryName, className, childElem) \ 441 IPSDK_NODE_DATA_STD_INFO(libraryName, className, BOOST_PP_SEQ_ELEM(1, childElem)); \ 442 typedef IPSDK_NODE_DATA_TYPE_NODE(BOOST_PP_SEQ_ELEM(2, childElem)) NodeType; 446 #define IPSDK_NODE_DATA_ACCESS_NODE(childElem, className) \ 447 IPSDK_NODE_DATA_ACCESS_NODE_MACRO( \ 448 BOOST_PP_SEQ_ELEM(1, childElem), \ 449 BOOST_PP_SEQ_ELEM(2, childElem), \ 454 #define IPSDK_NODE_DATA_ACCESS_NODE_MACRO(childName, valueType, className) 458 #define IPSDK_NODE_DATA_INIT_NODE(childName, defaultValue) \ 459 BOOST_PP_CAT(_node, childName)._node = defaultValue; 463 #define IPSDK_NODE_DATA_GET_DEFAULT_NODE(childName, defaultValue) \ 464 template <typename ChildNode> \ 465 inline static typename boost::enable_if_c< \ 466 boost::is_same<ChildNode, childName>::value, \ 467 typename ChildNodeInfo<ChildNode>::ValueType>::type \ 468 getDefault() { return defaultValue;} 472 #define IPSDK_NODE_DATA_READ_NODE(childName) \ 473 ar >> ipsdk::make_iitem(BOOST_PP_STRINGIZE(childName), \ 474 BOOST_PP_CAT(_node, childName)._node); 478 #define IPSDK_NODE_DATA_WRITE_NODE(childName) \ 479 ar << ipsdk::make_oitem(BOOST_PP_STRINGIZE(childName), \ 480 BOOST_PP_CAT(_node, childName)._node); 487 #define IPSDK_NODE_DATA_TYPE_NODE_COLL(valueType) \ 488 ipsdk::DataItemNodeColl<valueType> 492 #define IPSDK_NODE_DATA_INFO_NODE_COLL(libraryName, className, childElem) \ 493 IPSDK_NODE_DATA_STD_INFO(libraryName, className, BOOST_PP_SEQ_ELEM(1, childElem)); \ 494 typedef IPSDK_NODE_DATA_TYPE_NODE_COLL(BOOST_PP_SEQ_ELEM(2, childElem)) NodeType; \ 495 typedef IPSDK_NODE_DATA_TYPE_NODE_COLL(BOOST_PP_SEQ_ELEM(2, childElem))::NodeType CollNodeType; \ 496 typedef IPSDK_NODE_DATA_TYPE_NODE_COLL(BOOST_PP_SEQ_ELEM(2, childElem))::NodePtrType CollNodePtrType; \ 497 typedef IPSDK_NODE_DATA_TYPE_NODE_COLL(BOOST_PP_SEQ_ELEM(2, childElem))::CollType CollType; 501 #define IPSDK_NODE_DATA_ACCESS_NODE_COLL(childElem, className) \ 502 IPSDK_NODE_DATA_ACCESS_NODE_COLL_MACRO( \ 503 BOOST_PP_SEQ_ELEM(1, childElem), \ 504 BOOST_PP_SEQ_ELEM(2, childElem), \ 509 #define IPSDK_NODE_DATA_ACCESS_NODE_COLL_MACRO(childName, valueType, className) \ 510 template <typename ChildNode> \ 511 inline typename boost::enable_if_c< \ 512 boost::is_same<ChildNode, childName>::value, \ 513 const typename ChildNodeInfo<ChildNode>::CollType&>::type \ 514 getNodeColl() const { \ 515 return BOOST_PP_CAT(_node, childName)._node.getColl(); \ 517 template <typename ChildNode> \ 518 inline typename boost::enable_if_c< \ 519 boost::is_same<ChildNode, childName>::value, \ 520 typename ChildNodeInfo<ChildNode>::CollType&>::type \ 522 return BOOST_PP_CAT(_node, childName)._node.getColl(); \ 524 template <typename ChildNode> \ 525 inline typename boost::enable_if_c< \ 526 boost::is_same<ChildNode, childName>::value, \ 529 return BOOST_PP_CAT(_node, childName)._node.isEmpty(); \ 531 template <typename ChildNode> \ 532 inline typename boost::enable_if_c< \ 533 boost::is_same<ChildNode, childName>::value, \ 534 ipsdk::ipUInt32>::type \ 536 return BOOST_PP_CAT(_node, childName)._node.getSize(); \ 538 template <typename ChildNode> \ 539 inline typename boost::enable_if_c< \ 540 boost::is_same<ChildNode, childName>::value, \ 541 const typename ChildNodeInfo<ChildNode>::CollNodeType&>::type \ 542 getNode(const ipsdk::ipUInt32 nodeIdx) const { \ 543 return BOOST_PP_CAT(_node, childName)._node.getNode(nodeIdx); \ 545 template <typename ChildNode> \ 546 inline typename boost::enable_if_c< \ 547 boost::is_same<ChildNode, childName>::value, \ 548 typename ChildNodeInfo<ChildNode>::CollNodeType&>::type \ 549 getNode(const ipsdk::ipUInt32 nodeIdx) { \ 550 return BOOST_PP_CAT(_node, childName)._node.getNode(nodeIdx); \ 552 template <typename ChildNode> \ 553 inline typename boost::enable_if_c< \ 554 boost::is_same<ChildNode, childName>::value, \ 556 push_back(const typename ChildNodeInfo<ChildNode>::CollNodePtrType& pItemNode) { \ 557 BOOST_PP_CAT(_node, childName)._node.push_back(pItemNode); \ 559 template <typename ChildNode> \ 560 inline typename boost::enable_if_c< \ 561 boost::is_same<ChildNode, childName>::value, \ 564 BOOST_PP_CAT(_node, childName)._node.clear(); \ 569 #define IPSDK_NODE_DATA_INIT_NODE_COLL(childName, defaultValue) \ 570 BOOST_PP_CAT(_node, childName).getNodeColl() = defaultValue; 574 #define IPSDK_NODE_DATA_GET_DEFAULT_NODE_COLL(childName, defaultValue) \ 575 template <typename ChildNode> \ 576 inline static typename boost::enable_if_c< \ 577 boost::is_same<ChildNode, childName>::value, \ 578 typename ChildNodeInfo<ChildNode>::ValueType>::type \ 579 getDefault() { return defaultValue;} 583 #define IPSDK_NODE_DATA_READ_NODE_COLL(childName) \ 584 ar >> ipsdk::make_iitem(BOOST_PP_STRINGIZE(childName), \ 585 static_cast<ipsdk::BaseDataItemNodeColl&>(BOOST_PP_CAT(_node, childName)._node)); 589 #define IPSDK_NODE_DATA_WRITE_NODE_COLL(childName) \ 590 ar << ipsdk::make_oitem(BOOST_PP_STRINGIZE(childName), \ 591 static_cast<const ipsdk::BaseDataItemNodeColl&>(BOOST_PP_CAT(_node, childName)._node)); 598 #define IPSDK_NODE_DATA_TYPE_MAP() \ 603 #define IPSDK_NODE_DATA_INFO_MAP(libraryName, className, childElem) \ 604 IPSDK_NODE_DATA_STD_INFO(libraryName, className, BOOST_PP_SEQ_ELEM(1, childElem)); \ 605 typedef IPSDK_NODE_DATA_TYPE_MAP() NodeType; 609 #define IPSDK_NODE_DATA_ACCESS_MAP(childElem, className) \ 610 IPSDK_NODE_DATA_ACCESS_MAP_MACRO( \ 611 BOOST_PP_SEQ_ELEM(1, childElem), \ 616 #define IPSDK_NODE_DATA_ACCESS_MAP_MACRO(childName, className) \ 617 template <typename ChildNode> \ 618 inline typename boost::enable_if_c< \ 619 boost::is_same<ChildNode, childName>::value, \ 620 const ipsdk::DataItemMap::MapType&>::type \ 622 return BOOST_PP_CAT(_node, childName)._node.getMap(); \ 624 template <typename ChildNode> \ 625 inline typename boost::enable_if_c< \ 626 boost::is_same<ChildNode, childName>::value, \ 629 return BOOST_PP_CAT(_node, childName)._node.isEmpty(); \ 631 template <typename ChildNode> \ 632 inline typename boost::enable_if_c< \ 633 boost::is_same<ChildNode, childName>::value, \ 634 ipsdk::ipUInt32>::type \ 636 return BOOST_PP_CAT(_node, childName)._node.getSize(); \ 638 template <typename ChildNode> \ 639 inline typename boost::enable_if_c< \ 640 boost::is_same<ChildNode, childName>::value, \ 642 existsItem(const std::string& itemName) const { \ 643 return BOOST_PP_CAT(_node, childName)._node.existsItem(itemName); \ 645 template <typename ChildNode> \ 646 inline typename boost::enable_if_c< \ 647 boost::is_same<ChildNode, childName>::value, \ 648 ipsdk::ItemNames>::type \ 649 getItemNames() const { \ 650 return BOOST_PP_CAT(_node, childName)._node.getItemNames(); \ 652 template <typename ChildNode> \ 653 inline typename boost::enable_if_c< \ 654 boost::is_same<ChildNode, childName>::value, \ 655 const BaseDataItem&>::type \ 656 getMapItem(const std::string& itemName) const { \ 657 return BOOST_PP_CAT(_node, childName)._node.getItem(itemName); \ 659 template <typename ChildNode> \ 660 inline typename boost::enable_if_c< \ 661 boost::is_same<ChildNode, childName>::value, \ 662 BaseDataItem&>::type \ 663 getMapItem(const std::string& itemName) { \ 664 return BOOST_PP_CAT(_node, childName)._node.getItem(itemName); \ 666 template <typename ChildNode> \ 667 inline typename boost::enable_if_c< \ 668 boost::is_same<ChildNode, childName>::value, \ 670 insertItem(const std::string& itemName, \ 671 const ipsdk::DataItemPtr& pItem) { \ 672 BOOST_PP_CAT(_node, childName)._node.insertItem(itemName, pItem); \ 674 template <typename ChildNode> \ 675 inline typename boost::enable_if_c< \ 676 boost::is_same<ChildNode, childName>::value, \ 678 removeItem(const std::string& itemName) { \ 679 BOOST_PP_CAT(_node, childName)._node.removeItem(itemName); \ 681 template <typename ChildNode> \ 682 inline typename boost::enable_if_c< \ 683 boost::is_same<ChildNode, childName>::value, \ 686 BOOST_PP_CAT(_node, childName)._node.clear(); \ 691 #define IPSDK_NODE_DATA_INIT_MAP(childName, defaultValue) \ 692 BOOST_PP_CAT(_node, childName)._node = defaultValue; 696 #define IPSDK_NODE_DATA_GET_DEFAULT_MAP(childName, defaultValue) \ 697 template <typename ChildNode> \ 698 inline static typename boost::enable_if_c< \ 699 boost::is_same<ChildNode, childName>::value, \ 700 typename ChildNodeInfo<ChildNode>::ValueType>::type \ 701 getDefault() { return defaultValue;} 705 #define IPSDK_NODE_DATA_READ_MAP(childName) \ 706 ar >> ipsdk::make_iitem(BOOST_PP_STRINGIZE(childName), \ 707 BOOST_PP_CAT(_node, childName)._node); 711 #define IPSDK_NODE_DATA_WRITE_MAP(childName) \ 712 ar << ipsdk::make_oitem(BOOST_PP_STRINGIZE(childName), \ 713 BOOST_PP_CAT(_node, childName)._node); 718 #endif // __IPSDKBASEDATA_DATAITEMNODEHDRMACROSDETAILS_H__ Main namespace for IPSDK library.
Definition: AlgorithmFunctionEfficiency.h:22
SerializationIItem< T > make_iitem(const std::string &itemName, T &value)
template function allowing to dynamically create SerializationIItem
Definition: SerializationIItemUtils.h:28
Definition: DataItemNodeHdrMacrosDetails.h:48
Class alowing to easily format log message and handle id conversions.
Definition: LogMessageFormater.h:37
Macro allowing to manage object base informations.
Item used to format outputs during serialization.
Definition: DataItemNodeHdrMacrosDetails.h:37
SerializationOItem< T > make_oitem(const std::string &itemName, const T &value)
template function allowing to dynamically create SerializationOItem
Definition: SerializationOItemUtils.h:28
Definition: DataItemNodeHdrMacrosDetails.h:51
Item used to format inputs during serialization.
Definition: DataItemNodeHdrMacrosDetails.h:42