25 #ifndef PXR_BASE_TF_PY_STATIC_TOKENS_H 26 #define PXR_BASE_TF_PY_STATIC_TOKENS_H 35 #include "pxr/base/tf/preprocessorUtilsLite.h" 37 #include <boost/python/class.hpp> 38 #include <boost/python/scope.hpp> 40 PXR_NAMESPACE_OPEN_SCOPE
50 #define TF_PY_WRAP_PUBLIC_TOKENS(name, key, seq) \ 51 boost::python::class_<_TF_TOKENS_STRUCT_NAME(key), boost::noncopyable>( \ 52 name, boost::python::no_init) \ 53 _TF_PY_TOKENS_WRAP_SEQ(key, _TF_PY_TOKENS_EXPAND(seq)) 61 #define TF_PY_WRAP_PUBLIC_TOKENS_IN_CURRENT_SCOPE(key, seq) \ 62 _TF_PY_TOKENS_WRAP_ATTR_SEQ(key, _TF_PY_TOKENS_EXPAND(seq)) 68 class _TfPyWrapStaticToken {
70 _TfPyWrapStaticToken(
const TfToken* token) : _token(token) { }
72 std::string operator()()
const 74 return _token->GetString();
82 #define _TF_PY_TOKENS_WRAP_ATTR_MEMBER(r, key, name) \ 83 boost::python::scope().attr( \ 84 TF_PP_STRINGIZE(name)) = key->name.GetString(); 86 #define _TF_PY_TOKENS_WRAP_MEMBER(r, key, name) \ 87 .add_static_property(TF_PP_STRINGIZE(name), \ 88 boost::python::make_function(_TfPyWrapStaticToken((&key->name)), \ 89 boost::python::return_value_policy< \ 90 boost::python::return_by_value>(), \ 91 boost::mpl::vector1<std::string>())) 93 #define _TF_PY_TOKENS_EXPAND(seq) \ 94 BOOST_PP_SEQ_FILTER(_TF_TOKENS_IS_NOT_ARRAY, ~, seq) \ 95 _TF_TOKENS_EXPAND_ARRAY_ELEMENTS(seq) 98 #define _TF_PY_TOKENS_WRAP_ELEMENT(r, key, elem) \ 99 _TF_PY_TOKENS_WRAP_MEMBER(r, key, _TF_PY_TOKEN_GET_ELEM(elem)) 101 #define _TF_PY_TOKENS_WRAP_ATTR_ELEMENT(r, key, elem) \ 102 _TF_PY_TOKENS_WRAP_ATTR_MEMBER(r, key, _TF_PY_TOKEN_GET_ELEM(elem)) 104 #define _TF_PY_TOKEN_GET_ELEM(elem) \ 105 BOOST_PP_IIF(TF_PP_IS_TUPLE(elem), \ 106 BOOST_PP_TUPLE_ELEM(2, 0, elem), elem) 109 #define _TF_PY_TOKENS_WRAP_SEQ(key, seq) \ 110 BOOST_PP_SEQ_FOR_EACH(_TF_PY_TOKENS_WRAP_ELEMENT, key, seq) 112 #define _TF_PY_TOKENS_WRAP_ATTR_SEQ(key, seq) \ 113 BOOST_PP_SEQ_FOR_EACH(_TF_PY_TOKENS_WRAP_ATTR_ELEMENT, key, seq) 115 PXR_NAMESPACE_CLOSE_SCOPE
117 #endif // PXR_BASE_TF_PY_STATIC_TOKENS_H Token for efficient comparison, assignment, and hashing of known strings.
This file defines some macros that are useful for declaring and using static TfTokens.