24 #ifndef PXR_BASE_TF_TOKEN_H
25 #define PXR_BASE_TF_TOKEN_H
163 inline size_t Hash()
const;
183 typedef std::set<TfToken, TfTokenFastArbitraryLessThan>
Set;
187 _Rep
const *rep = _rep.
Get();
188 return rep ? rep->_str.size() : 0;
197 _Rep
const *rep = _rep.
Get();
198 return rep ? rep->_str.c_str() :
"";
208 _Rep
const *rep = _rep.
Get();
209 return rep ? rep->_str : _GetEmptyString();
220 return _rep.
Get() == o._rep.
Get();
225 return !(*
this == o);
249 return !(*
this == o);
260 return !(*
this == o);
273 auto lrep = _rep.
Get(), rrep = r._rep.
Get();
274 uint64_t lcc = lrep->_compareCode, rcc = rrep->_compareCode;
275 return lcc < rcc || (lcc == rcc && lrep->_str < rrep->_str);
311 template <
class HashState>
314 h.Append(token._rep.
Get());
323 void _AddRef()
const {
324 if (_rep.
BitsAs<
bool>()) {
326 if (!_rep->IncrementIfCounted()) {
333 void _RemoveRef()
const {
334 if (_rep.
BitsAs<
bool>()) {
336 if (_rep->_isCounted) {
337 if (_rep->_refCount.load(std::memory_order_relaxed) == 1) {
338 _PossiblyDestroyRep();
354 _rep->_refCount.fetch_sub(1, std::memory_order_relaxed);
363 void TF_API _PossiblyDestroyRep()
const;
367 explicit _Rep(
char const *
s) : _str(s), _cstr(_str.c_str()) {}
368 explicit _Rep(
std::string const &
s) : _str(s), _cstr(_str.c_str()) {}
375 _Rep(_Rep
const &rhs) : _str(rhs._str),
376 _cstr(rhs._str.c_str() != rhs._cstr ?
377 rhs._cstr : _str.c_str()),
378 _compareCode(rhs._compareCode),
379 _refCount(rhs._refCount.load()),
380 _isCounted(rhs._isCounted),
381 _setNum(rhs._setNum) {}
384 _cstr = (rhs._str.c_str() != rhs._cstr ? rhs._cstr : _str.c_str());
385 _compareCode = rhs._compareCode;
386 _refCount = rhs._refCount.load();
387 _isCounted = rhs._isCounted;
388 _setNum = rhs._setNum;
392 inline bool IncrementIfCounted()
const {
393 const bool isCounted = _isCounted;
395 _refCount.fetch_add(1, std::memory_order_relaxed);
402 mutable uint64_t _compareCode;
404 mutable bool _isCounted;
405 mutable unsigned char _setNum;
426 return lhs._rep.
Get() < rhs._rep.
Get();
431 TF_API std::vector<TfToken>
435 TF_API std::vector<std::string>
446 #endif // PXR_BASE_TF_TOKEN_H
friend void TfHashAppend(HashState &h, TfToken const &token)
TfHash support.
void Swap(TfToken &other)
Swap this token with another.
friend TF_API std::ostream & operator<<(std::ostream &stream, TfToken const &)
Stream insertion.
void swap(UT::ArraySet< Key, MULTI, MAX_LOAD_FACTOR_256, Clearer, Hash, KeyEqual > &a, UT::ArraySet< Key, MULTI, MAX_LOAD_FACTOR_256, Clearer, Hash, KeyEqual > &b)
void SetBits(Integral val) noexcept
Set the stored bits. No static range checking is performed.
bool IsImmortal() const
Returns true iff this is an immortal token.
std::string const & GetString() const
Return the string that this token represents.
Functor to use for hash maps from tokens to other things.
TF_API std::vector< TfToken > TfToTokenVector(const std::vector< std::string > &sv)
Convert the vector of strings sv into a vector of TfToken.
TfToken & operator=(TfToken const &rhs) noexcept
Copy assignment.
friend bool operator!=(std::string const &o, TfToken const &t)
bool operator()(TfToken const &lhs, TfToken const &rhs) const
size_t size() const
Return the size of the string that this token represents.
constexpr T * Get() const noexcept
Retrieve the pointer.
TfHashSet< TfToken, TfToken::HashFunctor > HashSet
bool operator<=(TfToken const &o) const
bool operator!=(char const *o) const
constexpr uintptr_t GetLiteral() const noexcept
size_t operator()(TfToken const &token) const
size_t hash_value(const TfToken &x)
Overload hash_value for TfToken.
TfToken(TfToken &&rhs) noexcept
Move constructor.
char const * data() const
Synonym for GetText().
GLsizei const GLchar *const * string
friend void swap(TfToken &lhs, TfToken &rhs)
TfToken(TfToken const &rhs) noexcept
Copy constructor.
constexpr Integral BitsAs() const noexcept
Retrieve the stored bits as the integral type Integral.
bool operator>(TfToken const &o) const
Greater-than operator that compares tokenized strings lexicographically.
std::vector< TfToken > TfTokenVector
Convenience types.
friend bool operator==(std::string const &o, TfToken const &t)
friend bool operator!=(char const *o, TfToken const &t)
char const * GetText() const
bool operator!=(std::string const &o) const
GLfloat GLfloat GLfloat GLfloat h
bool operator!=(TfToken const &o) const
Equality operator.
PXR_NAMESPACE_CLOSE_SCOPE PXR_NAMESPACE_OPEN_SCOPE
static TF_API TfToken Find(std::string const &s)
Find the token for the given string, if one exists.
TF_API std::vector< std::string > TfToStringVector(const std::vector< TfToken > &tv)
Convert the vector of TfToken tv into a vector of strings.
#define PXR_NAMESPACE_CLOSE_SCOPE
friend struct Tf_TokenRegistry
bool operator==(TfToken const &o) const
Equality operator.
bool operator<(TfToken const &r) const
constexpr TfToken() noexcept
Create the empty token, containing the empty string.
friend bool operator==(const char *o, TfToken const &t)
size_t Hash() const
Return a size_t hash for this token.
bool operator>=(TfToken const &o) const
std::set< TfToken, TfTokenFastArbitraryLessThan > Set
bool IsEmpty() const
Returns true iff this token contains the empty string "".