15 #ifndef __IPSDKBASEDATA_DATAITEMNODEHDRMACROS_H__ 16 #define __IPSDKBASEDATA_DATAITEMNODEHDRMACROS_H__ 29 #define IPSDK_DECLARE_NODE_DATA_BODY(libraryName, className, childSeq) \ 30 IPSDK_DECLARE_SERIAL_WITH_COPY(libraryName, className) \ 31 IPSDK_DECLARE_TOOLTIP() \ 32 friend class ipsdk::DataItemNodeFactory; \ 33 friend boost::shared_ptr<className> boost::make_shared<className>(); \ 35 template <typename T> \ 36 friend struct NodeAccessor; \ 37 IPSDK_DECLARE_OBJECT_BASE_INFO(libraryName, className); \ 39 template <typename ChildNode, typename DelayImpl = void> \ 40 struct ChildNodeToIdx; \ 41 template <ipsdk::ipUInt32 g_childNodeIdx, typename DelayImpl = void> \ 42 struct IdxToChildNode; \ 43 template <typename ChildNode, typename DelayImpl = void> \ 44 struct ChildNodeInfo; \ 45 static const ipsdk::ipUInt32 g_nbChildNodes = BOOST_PP_SEQ_SIZE(childSeq); \ 46 static boost::shared_ptr<className> createNode(); \ 47 BOOST_PP_SEQ_FOR_EACH_I(IPSDK_NODE_DATA_ACCESS_MACRO, (className)(libraryName), childSeq); \ 48 template <typename ChildNode> \ 49 inline const std::string& getNodeName() const { \ 50 return getNodeNameStr<ChildNode>(); \ 52 template <typename ChildNode> \ 53 inline const std::string& getNodeToolTip() const { \ 54 return getNodeToolTipStr<ChildNode>(); \ 56 template <typename ChildNode> \ 57 inline static const std::string& getNodeNameStr() { \ 58 return getNodeNameStr<ChildNodeToIdx<ChildNode>::g_childNodeIdx>(); \ 60 template <typename ChildNode> \ 61 inline static const std::string& getNodeToolTipStr() { \ 62 return getNodeToolTipStr<ChildNodeToIdx<ChildNode>::g_childNodeIdx>(); \ 64 const ipsdk::ItemNames& getItemIds() const; \ 66 static boost::mutex& getDataItemNodeMutex(); \ 67 static ipsdk::DataItemNodePtr createBaseNode(); \ 68 template <typename MsgEnumType> \ 69 static std::string createMessage(const MsgEnumType& msg); \ 70 template <ipsdk::ipUInt32 g_childNodeIdx> IPSDK_LIB_API(libraryName) \ 71 static typename boost::enable_if_c<boost::mpl::less< \ 72 boost::mpl::int_<g_childNodeIdx>, \ 73 boost::mpl::int_<g_nbChildNodes> >::value, \ 74 const std::string&>::type \ 76 template <ipsdk::ipUInt32 g_childNodeIdx> IPSDK_LIB_API(libraryName) \ 77 static typename boost::enable_if_c<boost::mpl::greater_equal< \ 78 boost::mpl::int_<g_childNodeIdx>, \ 79 boost::mpl::int_<g_nbChildNodes> >::value, \ 80 const std::string&>::type \ 82 template <ipsdk::ipUInt32 g_childNodeIdx> IPSDK_LIB_API(libraryName) \ 83 static typename boost::enable_if_c<boost::mpl::less< \ 84 boost::mpl::int_<g_childNodeIdx>, \ 85 boost::mpl::int_<g_nbChildNodes> >::value, \ 86 const std::string&>::type \ 87 getNodeToolTipStr(); \ 88 template <ipsdk::ipUInt32 g_childNodeIdx> IPSDK_LIB_API(libraryName) \ 89 static typename boost::enable_if_c<boost::mpl::greater_equal< \ 90 boost::mpl::int_<g_childNodeIdx>, \ 91 boost::mpl::int_<g_nbChildNodes> >::value, \ 92 const std::string&>::type \ 93 getNodeToolTipStr(); \ 94 ItemInfoPtr getItemInfo(const std::string& itemId) const; \ 95 template <typename DelayImplType> \ 96 inline static const ipsdk::ItemNames& delayedGetItemIds() \ 98 static ipsdk::ItemNames g_itemNames; \ 99 if (g_itemNames.empty() == true) { \ 100 BOOST_PP_SEQ_FOR_EACH(IPSDK_NODE_DATA_ENUM_NAMES_MACRO, _, childSeq); \ 102 return g_itemNames; \ 104 template <typename MsgEnumType> \ 106 delayedGetItemInfo(const std::string& itemId) const \ 108 BOOST_PP_SEQ_FOR_EACH(IPSDK_NODE_DATA_FIND_NODE_MACRO, \ 109 (itemId)(MsgEnumType)(className), childSeq); \ 110 static ItemInfoPtr g_emptyItemInfoPtr; \ 111 return g_emptyItemInfoPtr; \ 113 template <typename DelayImplType> \ 114 inline void delayedWriteNode(ipsdk::BaseOArchive& ar) const { \ 115 BOOST_PP_SEQ_FOR_EACH(IPSDK_NODE_DATA_WRITE_MACRO, _, childSeq); \ 117 template <typename DelayImplType> \ 118 inline void delayedReadNode(ipsdk::BaseIArchive& ar) { \ 119 BOOST_PP_SEQ_FOR_EACH(IPSDK_NODE_DATA_READ_MACRO, _, childSeq); \ 121 template <typename DelayImplType> \ 122 inline void delayedCopyNode(const className* pObject) { \ 123 BOOST_PP_SEQ_FOR_EACH(IPSDK_NODE_DATA_COPY_MACRO, _, childSeq); \ 125 BOOST_PP_SEQ_FOR_EACH(IPSDK_NODE_DATA_DECLARE_NODE_MACRO, _, childSeq); 133 #define IPSDK_DECLARE_NODE_DATA(libraryName, className, childSeq) \ 134 class IPSDK_LIB_API(libraryName) className : public ipsdk::BaseDataItemNode \ 136 IPSDK_DECLARE_NODE_DATA_BODY(libraryName, className, childSeq) \ 140 BOOST_PP_SEQ_FOR_EACH(IPSDK_NODE_DATA_INIT_MACRO, _, childSeq); \ 148 #endif // __IPSDKBASEDATA_DATAITEMNODEHDRMACROS_H__ Detailed header part of data item node declaration macros.