IPSDK  4_1_0_2
IPSDK : Image Processing Software Development Kit
DataItemNodeHdrMacros.h
Go to the documentation of this file.
1 // DataItemNodeHdrMacros.h:
3 // ------------------------
4 //
14 
15 #ifndef __IPSDKBASEDATA_DATAITEMNODEHDRMACROS_H__
16 #define __IPSDKBASEDATA_DATAITEMNODEHDRMACROS_H__
17 
19 
22 
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>(); \
34 protected: \
35  template <typename T> \
36  friend struct NodeAccessor; \
37  IPSDK_DECLARE_OBJECT_BASE_INFO(libraryName, className); \
38 public: \
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>(); \
51  } \
52  template <typename ChildNode> \
53  inline const std::string& getNodeToolTip() const { \
54  return getNodeToolTipStr<ChildNode>(); \
55  } \
56  template <typename ChildNode> \
57  inline static const std::string& getNodeNameStr() { \
58  return getNodeNameStr<ChildNodeToIdx<ChildNode>::g_childNodeIdx>(); \
59  } \
60  template <typename ChildNode> \
61  inline static const std::string& getNodeToolTipStr() { \
62  return getNodeToolTipStr<ChildNodeToIdx<ChildNode>::g_childNodeIdx>(); \
63  } \
64  const ipsdk::ItemNames& getItemIds() const; \
65 protected: \
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 \
75  getNodeNameStr(); \
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 \
81  getNodeNameStr(); \
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() \
97  { \
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); \
101  } \
102  return g_itemNames; \
103  } \
104  template <typename MsgEnumType> \
105  inline ItemInfoPtr \
106  delayedGetItemInfo(const std::string& itemId) const \
107  { \
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; \
112  } \
113  template <typename DelayImplType> \
114  inline void delayedWriteNode(ipsdk::BaseOArchive& ar) const { \
115  BOOST_PP_SEQ_FOR_EACH(IPSDK_NODE_DATA_WRITE_MACRO, _, childSeq); \
116  } \
117  template <typename DelayImplType> \
118  inline void delayedReadNode(ipsdk::BaseIArchive& ar) { \
119  BOOST_PP_SEQ_FOR_EACH(IPSDK_NODE_DATA_READ_MACRO, _, childSeq); \
120  } \
121  template <typename DelayImplType> \
122  inline void delayedCopyNode(const className* pObject) { \
123  BOOST_PP_SEQ_FOR_EACH(IPSDK_NODE_DATA_COPY_MACRO, _, childSeq); \
124  } \
125  BOOST_PP_SEQ_FOR_EACH(IPSDK_NODE_DATA_DECLARE_NODE_MACRO, _, childSeq);
126 
133 #define IPSDK_DECLARE_NODE_DATA(libraryName, className, childSeq) \
134 class IPSDK_LIB_API(libraryName) className : public ipsdk::BaseDataItemNode \
135 { \
136  IPSDK_DECLARE_NODE_DATA_BODY(libraryName, className, childSeq) \
137 protected: \
138  className() \
139  { \
140  BOOST_PP_SEQ_FOR_EACH(IPSDK_NODE_DATA_INIT_MACRO, _, childSeq); \
141  } \
142 public: \
143  ~className() {}
144 
147 
148 #endif // __IPSDKBASEDATA_DATAITEMNODEHDRMACROS_H__
Detailed header part of data item node declaration macros.