15 #ifndef __IPSDKBASEDATA_DATAITEMNODESRCMACROS_H__ 16 #define __IPSDKBASEDATA_DATAITEMNODESRCMACROS_H__ 20 #include <IPSDKBaseData/DataItem/Node/DataItemNodeFactory.h> 22 #include <boost/thread/lock_guard.hpp> 23 #include <boost/make_shared.hpp> 33 #define IPSDK_MAX_SUB_NODES_COUNT 20 37 #define IPSDK_IMPLEMENT_NODE_STR_MACRO(z, n, seqInfo) \ 38 template IPSDK_LIB_API(BOOST_PP_SEQ_ELEM(0, seqInfo)) \ 40 BOOST_PP_SEQ_ELEM(1, seqInfo)::getNodeNameStr<n>(); \ 41 template IPSDK_LIB_API(BOOST_PP_SEQ_ELEM(0, seqInfo)) \ 43 BOOST_PP_SEQ_ELEM(1, seqInfo)::getNodeToolTipStr<n>(); 47 #define IPSDK_IMPLEMENT_NODE_DATA_BODY(libraryName, namespaceSeq, className, eMsgEnum) \ 48 IPSDK_IMPLEMENT_SERIAL_WITH_COPY(libraryName, namespaceSeq, className, 1) \ 49 IPSDK_IMPLEMENT_TOOLTIP(libraryName, className, eMsgEnum) \ 50 template <typename MsgEnumType> \ 51 std::string className::createMessage(const MsgEnumType& msg) { \ 52 ipsdk::LogMessageFormater logMessageFormater( \ 53 IPSDK_LIB_LOG_MSG_MANAGER(libraryName)); \ 54 logMessageFormater[msg]; \ 55 return logMessageFormater.string(); \ 57 template <ipsdk::ipUInt32 g_childNodeIdx> IPSDK_LIB_API(libraryName) \ 58 typename boost::enable_if_c<boost::mpl::less< \ 59 boost::mpl::int_<g_childNodeIdx>, \ 60 boost::mpl::int_<className::g_nbChildNodes> >::value, \ 61 const std::string&>::type \ 62 className::getNodeNameStr() { \ 63 typedef typename IdxToChildNode<g_childNodeIdx>::ChildNodeType ChildNodeType; \ 64 const ItemInfoStr& itemInfoStr = ChildNodeInfo<ChildNodeType>::template \ 65 getItemInfoStr<eMsgEnum>(); \ 66 return itemInfoStr._itemName; \ 68 template <ipsdk::ipUInt32 g_childNodeIdx> IPSDK_LIB_API(libraryName) \ 69 typename boost::enable_if_c<boost::mpl::greater_equal< \ 70 boost::mpl::int_<g_childNodeIdx>, \ 71 boost::mpl::int_<className::g_nbChildNodes> >::value, \ 72 const std::string&>::type \ 73 className::getNodeNameStr() { \ 74 static const std::string g_emptyString; \ 75 return g_emptyString; \ 77 template <ipsdk::ipUInt32 g_childNodeIdx> IPSDK_LIB_API(libraryName) \ 78 typename boost::enable_if_c<boost::mpl::less< \ 79 boost::mpl::int_<g_childNodeIdx>, \ 80 boost::mpl::int_<className::g_nbChildNodes> >::value, \ 81 const std::string&>::type \ 82 className::getNodeToolTipStr() { \ 83 typedef typename IdxToChildNode<g_childNodeIdx>::ChildNodeType ChildNodeType; \ 84 const ItemInfoStr& itemInfoStr = ChildNodeInfo<ChildNodeType>::template \ 85 getItemInfoStr<eMsgEnum>(); \ 86 return itemInfoStr._itemToolTip; \ 88 template <ipsdk::ipUInt32 g_childNodeIdx> IPSDK_LIB_API(libraryName) \ 89 typename boost::enable_if_c<boost::mpl::greater_equal< \ 90 boost::mpl::int_<g_childNodeIdx>, \ 91 boost::mpl::int_<className::g_nbChildNodes> >::value, \ 92 const std::string&>::type \ 93 className::getNodeToolTipStr() { \ 94 static const std::string g_emptyString; \ 95 return g_emptyString; \ 97 BOOST_PP_REPEAT(IPSDK_MAX_SUB_NODES_COUNT, IPSDK_IMPLEMENT_NODE_STR_MACRO, \ 98 (libraryName)(className)); \ 99 const ipsdk::ItemNames& className::getItemIds() const { \ 100 boost::lock_guard<boost::mutex> lock(DataItemNodeMutex::get()); \ 101 return delayedGetItemIds<void>(); \ 103 className::ItemInfoPtr className::getItemInfo(const std::string& itemId) const { \ 104 const ItemInfoPtr& pItemInfo = delayedGetItemInfo<eMsgEnum>(itemId); \ 107 ipsdk::DataItemNodePtr className::createBaseNode() { \ 108 return boost::make_shared<className>(); \ 110 boost::shared_ptr<className> className::createNode() { \ 111 return boost::make_shared<className>(); \ 114 template <typename T> \ 115 struct NodeRegistrator; \ 117 struct NodeRegistrator<className> { \ 120 MessageMapRegistrator<eMsgEnum>::process(); \ 121 DataItemNodeFactory& factory = DataItemNodeFactory::getInstance(); \ 122 factory.registerNode<className>(); \ 126 DataItemNodeFactory& factory = DataItemNodeFactory::getInstance(); \ 127 factory.unRegisterNode<className>(); \ 129 static NodeRegistrator g_bNodeRegistrator; \ 131 NodeRegistrator<className> NodeRegistrator<className>::g_bNodeRegistrator; \ 133 boost::mutex& className::getDataItemNodeMutex() \ 135 return DataItemNodeMutex::get(); \ 140 #define IPSDK_IMPLEMENT_NODE_DATA(libraryName, namespaceSeq, className, eMsgEnum) \ 141 IPSDK_IMPLEMENT_NODE_DATA_BODY(libraryName, namespaceSeq, className, eMsgEnum) \ 142 IPSDK_IMPLEMENT_SERIAL_WRITE(className, BaseDataItemNode) \ 143 delayedWriteNode<void>(ar); \ 146 IPSDK_IMPLEMENT_SERIAL_READ(className, BaseDataItemNode) \ 147 delayedReadNode<void>(ar); \ 150 IPSDK_IMPLEMENT_COPY(className, BaseDataItemNode) \ 151 delayedCopyNode<void>(pObject); \ 157 #endif // __IPSDKBASEDATA_DATAITEMNODESRCMACROS_H__ Source part of macros set for ToolTip class declaration.
Macros allowing to define a getter to a static mutex.
#define IPSDK_STATIC_MUTEX(MutexName)
macro allowing to create a static mutex
Definition: MutexMacros.h:27
Source part of macros set for class serialization.