This document is for a version of USD that is under development. See this page for the current release.
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages
instanceKey.h
1//
2// Copyright 2016 Pixar
3//
4// Licensed under the terms set forth in the LICENSE.txt file available at
5// https://openusd.org/license.
6//
7#ifndef PXR_USD_PCP_INSTANCE_KEY_H
8#define PXR_USD_PCP_INSTANCE_KEY_H
9
10#include "pxr/pxr.h"
11#include "pxr/usd/pcp/api.h"
12#include "pxr/usd/pcp/mapExpression.h"
13#include "pxr/usd/pcp/node.h"
14#include "pxr/usd/pcp/site.h"
15#include "pxr/usd/pcp/types.h"
16
18#include "pxr/base/tf/hash.h"
19
20#include <string>
21#include <utility>
22#include <vector>
23
24PXR_NAMESPACE_OPEN_SCOPE
25
26class PcpPrimIndex;
27
37{
38public:
39 PCP_API
41
43 PCP_API
44 explicit PcpInstanceKey(const PcpPrimIndex& primIndex);
45
47 PCP_API
48 bool operator==(const PcpInstanceKey& rhs) const;
49 PCP_API
50 bool operator!=(const PcpInstanceKey& rhs) const;
51
53 template <typename HashState>
54 friend void TfHashAppend(HashState& h, const PcpInstanceKey& key)
55 {
56 h.Append(key._hash);
57 }
59 friend size_t hash_value(const PcpInstanceKey& key)
60 {
61 return key._hash;
62 }
63
68 struct Hash {
69 inline size_t operator()(const PcpInstanceKey& key) const
70 {
71 return key._hash;
72 }
73 };
74
77 PCP_API
78 std::string GetString() const;
79
80private:
81 struct _Collector;
82
83 struct _Arc
84 {
85 explicit _Arc(const PcpNodeRef& node)
86 : _arcType(node.GetArcType())
87 , _sourceSite(node.GetSite())
88 , _timeOffset(node.GetMapToRoot().GetTimeOffset())
89 {
90 }
91
92 bool operator==(const _Arc& rhs) const
93 {
94 return _arcType == rhs._arcType &&
95 _sourceSite == rhs._sourceSite &&
96 _timeOffset == rhs._timeOffset;
97 }
98
99 template <typename HashState>
100 friend void TfHashAppend(HashState &h, const _Arc& arc) {
101 h.Append(arc._arcType);
102 h.Append(arc._sourceSite);
103 h.Append(arc._timeOffset);
104 }
105
106 PcpArcType _arcType;
107 PcpSite _sourceSite;
108 SdfLayerOffset _timeOffset;
109 };
110 std::vector<_Arc> _arcs;
111
112 typedef std::pair<std::string, std::string> _VariantSelection;
113 std::vector<_VariantSelection> _variantSelection;
114
115 size_t _hash;
116};
117
118PXR_NAMESPACE_CLOSE_SCOPE
119
120#endif // PXR_USD_PCP_INSTANCE_KEY_H
A PcpInstanceKey identifies instanceable prim indexes that share the same set of opinions.
Definition: instanceKey.h:37
PCP_API bool operator==(const PcpInstanceKey &rhs) const
Comparison operators.
PCP_API PcpInstanceKey(const PcpPrimIndex &primIndex)
Create an instance key for the given prim index.
PCP_API std::string GetString() const
Returns string representation of this instance key for debugging purposes.
friend void TfHashAppend(HashState &h, const PcpInstanceKey &key)
Appends hash value for this instance key.
Definition: instanceKey.h:54
friend size_t hash_value(const PcpInstanceKey &key)
Returns hash value for this instance key.
Definition: instanceKey.h:59
PcpNode represents a node in an expression tree for compositing scene description.
Definition: node.h:47
PcpPrimIndex is an index of the all sites of scene description that contribute opinions to a specific...
Definition: primIndex.h:62
A site specifies a path in a layer stack of scene description.
Definition: site.h:29
Represents a time offset and scale between layers.
Definition: layerOffset.h:44
Hash functor.
Definition: instanceKey.h:68
PcpArcType
Describes the type of arc connecting two nodes in the prim index.
Definition: types.h:27