7 #ifndef PXR_BASE_TF_STL_H
8 #define PXR_BASE_TF_STL_H
34 template <
class Key,
class Result>
37 typename Container::const_iterator i = map.find(key);
42 *valuePtr = i->second;
68 template <
class Container,
class Key,
class Result>
94 template <
class Container,
class Key,
class Result>
96 Key
const &key,
const Result &defaultValue)
98 typename Container::const_iterator i = map.find(key);
122 template <
class Container,
class Key>
123 typename Container::mapped_type *
126 typename Container::iterator i = map.find(key);
127 return (i != map.end()) ? &(i->second) : NULL;
130 template <
class Container,
class Key>
131 typename Container::mapped_type
const *
134 typename Container::const_iterator i = map.find(key);
135 return (i != map.end()) ? &(i->second) : NULL;
146 template <
typename T>
147 inline std::pair<T,T>
149 return (a < b) ? std::pair<T,T>(
a,
b) : std::pair<T,T>(b,a);
177 template <
class Key,
class Value,
class Hash,
class Equal,
class Alloc>
187 if (hash.bucket_count() > emptyCount)
189 else if (!hash.empty())
196 template <
class Value,
class Hash,
class Equal,
class Alloc>
201 if (hash.bucket_count() > emptyCount)
203 else if (!hash.empty())
218 template <
class InputIterator1,
class InputIterator2,
class OutputIterator>
221 InputIterator2 first2, InputIterator2 last2,
224 typedef std::multiset<typename InputIterator2::value_type> SetType;
225 SetType set2(first2, last2);
229 for (InputIterator1 i = first1; i != last1; ++i) {
230 typename SetType::iterator
j = set2.find(*i);
249 template <
class BackInsertionSequence,
250 class InputIterator1,
class InputIterator2>
251 BackInsertionSequence
253 InputIterator2 first2, InputIterator2 last2)
255 BackInsertionSequence
result;
257 std::back_inserter(result));
272 template <
class InputIterator1,
class InputIterator2,
class OutputIterator>
275 InputIterator2 first2, InputIterator2 last2,
278 typedef std::set<typename InputIterator1::value_type> Set1Type;
279 typedef std::set<typename InputIterator2::value_type> Set2Type;
282 Set2Type set2(first2, last2);
286 for (InputIterator1 i = first1; i != last1; ++i)
287 if (set1.insert(*i).second && !set2.count(*i))
302 template <
class BackInsertionSequence,
303 class InputIterator1,
class InputIterator2>
304 BackInsertionSequence
306 InputIterator1 last1,
307 InputIterator2 first2,
308 InputIterator2 last2)
310 BackInsertionSequence
result;
312 std::back_inserter(result));
324 template <
class ForwardIterator,
class Predicate>
325 static inline ForwardIterator
326 TfFindBoundary(ForwardIterator
first, ForwardIterator
last,
327 Predicate
const &pred)
331 ForwardIterator middle;
336 std::advance(middle, half);
340 len = len - half - 1;
364 template <
class PairOrTuple>
367 template <
class PairOrTuple>
370 return std::get<N>(p);
373 template <
class PairOrTuple>
375 const PairOrTuple& p)
const
377 return std::get<N>(p);
380 template <
class PairOrTuple>
383 return std::get<N>(std::move(p));
389 #endif // PXR_BASE_TF_STL_H
static bool Lookup(Container const &map, Key const &key, Result *valuePtr)
imath_half_bits_t half
if we're in a C-only context, alias the half bits type to half
void swap(TfHashMap &other)
void swap(TfHashSet &other)
TF_API size_t Tf_GetEmptyHashSetBucketCount()
GLboolean GLboolean GLboolean GLboolean a
std::pair< T, T > TfOrderedPair(T a, T b)
**But if you need a result
void TfOrderedSetDifference(InputIterator1 first1, InputIterator1 last1, InputIterator2 first2, InputIterator2 last2, OutputIterator result)
constexpr return_type< PairOrTuple > && operator()(PairOrTuple &&p) const
BackInsertionSequence TfOrderedSetDifferenceToContainer(InputIterator1 first1, InputIterator1 last1, InputIterator2 first2, InputIterator2 last2)
bool TfMapLookup(Container const &map, Key const &key, Result *valuePtr)
constexpr const return_type< PairOrTuple > & operator()(const PairOrTuple &p) const
BackInsertionSequence TfOrderedUniquingSetDifferenceToContainer(InputIterator1 first1, InputIterator1 last1, InputIterator2 first2, InputIterator2 last2)
void TfOrderedUniquingSetDifference(InputIterator1 first1, InputIterator1 last1, InputIterator2 first2, InputIterator2 last2, OutputIterator result)
Container::mapped_type * TfMapLookupPtr(Container &map, Key const &key)
GLboolean GLboolean GLboolean b
__hostdev__ uint64_t last(uint32_t i) const
constexpr return_type< PairOrTuple > & operator()(PairOrTuple &p) const
PXR_NAMESPACE_CLOSE_SCOPE PXR_NAMESPACE_OPEN_SCOPE
#define PXR_NAMESPACE_CLOSE_SCOPE
SIM_API const UT_StringHolder distance
typename std::tuple_element< N, PairOrTuple >::type return_type
TF_API size_t Tf_GetEmptyHashMapBucketCount()
const Result TfMapLookupByValue(Container const &map, Key const &key, const Result &defaultValue)