15 #ifndef __PYIPSDKBASE_PYTHONDATAITEMUTILS_H__ 16 #define __PYIPSDKBASE_PYTHONDATAITEMUTILS_H__ 22 #include <boost/python/copy_const_reference.hpp> 34 toString(
const BaseDataItem& dataItem);
38 template <ipsdk::ipUInt32 g_nodeIdx,
typename DataItemType,
typename Enable =
void>
39 struct DataItemNodeRegistrator;
41 template <ipsdk::ipUInt32 g_nodeIdx,
typename DataItemType>
42 struct DataItemNodeRegistrator<g_nodeIdx, DataItemType, typename
boost::enable_if_c<g_nodeIdx == DataItemType::g_nbChildNodes>::type>
44 template <
typename PyDataItem>
45 static void registerNode(PyDataItem& pyDataItem)
51 template <ipsdk::ipUInt32 g_nodeIdx,
typename DataItemType>
52 struct DataItemNodeRegistrator<g_nodeIdx, DataItemType, typename
boost::enable_if_c<g_nodeIdx < DataItemType::g_nbChildNodes>::type>
54 template <
typename PyDataItem>
55 static void registerNode(PyDataItem& pyDataItem)
57 typedef typename DataItemType::template IdxToChildNode<g_nodeIdx>::ChildNodeType ChildNode;
59 std::string nodeName = DataItemType::template getNodeNameStr<ChildNode>();
60 nodeName[0] = std::tolower(nodeName[0]);
61 registerNode<PyDataItem, ChildNode>(pyDataItem,
63 DataItemType::template getNodeToolTipStr<ChildNode>());
64 DataItemNodeRegistrator<g_nodeIdx+1, DataItemType>::registerNode(pyDataItem);
67 template <
typename PyDataItem,
typename ChildNode>
70 registerNode(PyDataItem& pyDataItem,
71 const std::string& nodeName,
72 const std::string& nodeToolTip)
74 pyDataItem.add_property(nodeName.c_str(),
75 boost::python::make_function(&DataItemType::template getValue<ChildNode>,
76 boost::python::return_value_policy<boost::python::copy_const_reference>()),
77 &DataItemType::template setValue<ChildNode>,
81 template <
typename PyDataItem,
typename ChildNode>
84 registerNode(PyDataItem& pyDataItem,
85 const std::string& nodeName,
86 const std::string& nodeToolTip)
88 pyDataItem.add_property(nodeName.c_str(),
89 &DataItemType::template getValue<ChildNode>,
90 &DataItemType::template setValue<ChildNode>,
94 template <
typename PyDataItem,
typename ChildNode>
95 static typename boost::enable_if_c<ChildNode::NodeType::g_itemType == ipsdk::eDataItemType::eDIT_Node>::type
96 registerNode(PyDataItem& pyDataItem,
97 const std::string& nodeName,
98 const std::string& nodeToolTip)
100 typedef const typename DataItemType::template ChildNodeInfo<ChildNode>::NodeType& (DataItemType::*ConstGetter) ()
const;
101 typedef typename DataItemType::template ChildNodeInfo<ChildNode>::NodeType& (DataItemType::*MutableGetter) ();
102 pyDataItem.add_property(nodeName.c_str(),
103 boost::python::make_function(static_cast<ConstGetter>(&DataItemType::template getNode<ChildNode>),
104 boost::python::return_internal_reference<>()),
105 boost::python::make_function(static_cast<MutableGetter>(&DataItemType::template getNode<ChildNode>),
106 boost::python::return_internal_reference<>()),
107 nodeToolTip.c_str());
110 template <
typename PyDataItem,
typename ChildNode>
111 static typename boost::enable_if_c<ChildNode::NodeType::g_itemType == ipsdk::eDataItemType::eDIT_LeafColl>::type
112 registerNode(PyDataItem& pyDataItem,
113 const std::string& nodeName,
114 const std::string& nodeToolTip)
116 typedef const typename DataItemType::template ChildNodeInfo<ChildNode>::CollType& (DataItemType::*ConstGetter) ()
const;
117 typedef typename DataItemType::template ChildNodeInfo<ChildNode>::CollType& (DataItemType::*MutableGetter) ();
118 pyDataItem.add_property(nodeName.c_str(),
119 boost::python::make_function(static_cast<ConstGetter>(&DataItemType::template getLeafColl<ChildNode>),
120 boost::python::return_internal_reference<>()),
121 boost::python::make_function(static_cast<MutableGetter>(&DataItemType::template getLeafColl<ChildNode>),
122 boost::python::return_internal_reference<>()),
123 nodeToolTip.c_str());
126 template <
typename PyDataItem,
typename ChildNode>
127 static typename boost::enable_if_c<ChildNode::NodeType::g_itemType == ipsdk::eDataItemType::eDIT_NodeColl>::type
128 registerNode(PyDataItem& pyDataItem,
129 const std::string& nodeName,
130 const std::string& nodeToolTip)
132 typedef typename DataItemType::template ChildNodeInfo<ChildNode>::CollType CollType;
133 export_vector_no_str_no_proxy<CollType>(nodeName.c_str());
134 typedef const CollType& (DataItemType::*ConstGetter) ()
const;
135 typedef CollType& (DataItemType::*MutableGetter) ();
136 pyDataItem.add_property(nodeName.c_str(),
137 boost::python::make_function(static_cast<ConstGetter>(&DataItemType::template getNodeColl<ChildNode>),
138 boost::python::return_internal_reference<>()),
139 boost::python::make_function(static_cast<MutableGetter>(&DataItemType::template getNodeColl<ChildNode>),
140 boost::python::return_internal_reference<>()),
141 nodeToolTip.c_str());
153 #endif // __PYIPSDKBASE_PYTHONDATAITEMUTILS_H__ Utility functions for std::set python wrapping.
Main namespace for IPSDK library.
Definition: AlgorithmFunctionEfficiency.h:22
#define PYIPSDKBASE_API
Import/Export macro for library PyIPSDKBase.
Definition: PyIPSDKBaseExports.h:25
Definition: DataItemNodeHdrMacrosDetails.h:48
Base types for multiplatform compatibility.
PYIPSDKBASE_API std::string toString(const BaseDataItem &dataItem)
function allowing to convert an IPSDK data item to a string representation
Data item associated to an enumerate value.
Definition: DataItemTypes.h:98
Definition: DataItemTypes.h:45
Predefined types for data items.
Definition of import/export macro for library.