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>
40PXR_NAMESPACE_OPEN_SCOPE
47#define TF_PY_WRAP_PUBLIC_TOKENS(name, key, seq) \
48 boost::python::class_<_TF_TOKENS_STRUCT_NAME(key), boost::noncopyable>( \
49 name, boost::python::no_init) \
50 _TF_PY_TOKENS_WRAP_SEQ(key, seq)
57#define TF_PY_WRAP_PUBLIC_TOKENS_IN_CURRENT_SCOPE(key, seq) \
58 _TF_PY_TOKENS_WRAP_ATTR_SEQ(key, seq)
64class _TfPyWrapStaticToken {
66 _TfPyWrapStaticToken(
const TfToken* token) : _token(token) { }
68 std::string operator()()
const
70 return _token->GetString();
78#define _TF_PY_TOKENS_WRAP_ATTR_MEMBER(r, key, name) \
79 boost::python::scope().attr( \
80 TF_PP_STRINGIZE(name)) = key->name.GetString();
82#define _TF_PY_TOKENS_WRAP_MEMBER(r, key, name) \
83 .add_static_property(TF_PP_STRINGIZE(name), \
84 boost::python::make_function(_TfPyWrapStaticToken((&key->name)), \
85 boost::python::return_value_policy< \
86 boost::python::return_by_value>(), \
87 boost::mpl::vector1<std::string>()))
90#define _TF_PY_TOKENS_WRAP_ELEMENT(key, elem) \
91 _TF_PY_TOKENS_WRAP_MEMBER(r, key, _TF_PY_TOKEN_GET_ELEM(elem))
93#define _TF_PY_TOKENS_WRAP_ATTR_ELEMENT(key, elem) \
94 _TF_PY_TOKENS_WRAP_ATTR_MEMBER(r, key, _TF_PY_TOKEN_GET_ELEM(elem))
96#define _TF_PY_TOKEN_GET_ELEM(elem) \
97 _TF_PP_IFF(TF_PP_IS_TUPLE(elem), \
98 TF_PP_TUPLE_ELEM(0, elem), elem)
101#define _TF_PY_TOKENS_WRAP_SEQ(key, seq) \
102 TF_PP_SEQ_FOR_EACH(_TF_PY_TOKENS_WRAP_ELEMENT, key, seq)
104#define _TF_PY_TOKENS_WRAP_ATTR_SEQ(key, seq) \
105 TF_PP_SEQ_FOR_EACH(_TF_PY_TOKENS_WRAP_ATTR_ELEMENT, key, seq)
107PXR_NAMESPACE_CLOSE_SCOPE
Token for efficient comparison, assignment, and hashing of known strings.
This file defines some macros that are useful for declaring and using static TfTokens.