Loading...
Searching...
No Matches
notice.h
1//
2// Copyright 2021 Pixar
3//
4// Licensed under the Apache License, Version 2.0 (the "Apache License")
5// with the following modification; you may not use this file except in
6// compliance with the Apache License and the following modification to it:
7// Section 6. Trademarks. is deleted and replaced with:
8//
9// 6. Trademarks. This License does not grant permission to use the trade
10// names, trademarks, service marks, or product names of the Licensor
11// and its affiliates, except as required to comply with Section 4(c) of
12// the License and to reproduce the content of the NOTICE file.
13//
14// You may obtain a copy of the Apache License at
15//
16// http://www.apache.org/licenses/LICENSE-2.0
17//
18// Unless required by applicable law or agreed to in writing, software
19// distributed under the Apache License with the above modification is
20// distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
21// KIND, either express or implied. See the Apache License for the specific
22// language governing permissions and limitations under the Apache License.
23//
24#ifndef PXR_USD_AR_NOTICE_H
25#define PXR_USD_AR_NOTICE_H
26
27#include "pxr/pxr.h"
28
29#include "pxr/usd/ar/api.h"
31
32#include "pxr/base/tf/notice.h"
33
34#include <functional>
35
36PXR_NAMESPACE_OPEN_SCOPE
37
38template <class ContextObj>
39bool Ar_ContextIsHolding(
40 const ContextObj& contextObj, const ArResolverContext& ctx)
41{
42 const ContextObj* testObj = ctx.Get<ContextObj>();
43 return testObj && *testObj == contextObj;
44}
45
48class ArNotice
49{
50public:
54 : public TfNotice
55 {
56 public:
57 AR_API virtual ~ResolverNotice();
58 protected:
59 AR_API ResolverNotice();
60 };
61
66 : public ResolverNotice
67 {
68 public:
72 AR_API
74
80 AR_API
82 const std::function<bool(const ArResolverContext&)>& affectsFn);
83
87 template <
88 class ContextObj,
89 typename std::enable_if<ArIsContextObject<ContextObj>::value>::type*
90 = nullptr>
92 const ContextObj& contextObj)
93 // XXX: Ideally this would just use a lambda and forward it to
94 // the other c'tor. Both of those cause issues in MSVC 2015; the
95 // first causes an unspecified type error and the second causes
96 // odd linker errors.
97 : _affects(std::bind(&Ar_ContextIsHolding<ContextObj>, contextObj,
98 std::placeholders::_1))
99 {
100 }
101
102 AR_API
103 virtual ~ResolverChanged();
104
107 AR_API
108 bool AffectsContext(const ArResolverContext& ctx) const;
109
110 private:
111 std::function<bool(const ArResolverContext&)> _affects;
112 };
113
114};
115
116PXR_NAMESPACE_CLOSE_SCOPE
117
118#endif
Notice sent when asset paths may resolve to a different path than before due to a change in the resol...
Definition: notice.h:67
AR_API bool AffectsContext(const ArResolverContext &ctx) const
Returns true if the results of asset resolution when ctx is bound may be affected by this resolver ch...
ResolverChanged(const ContextObj &contextObj)
Create a notice indicating that the results of asset resolution when any ArResolverContext containing...
Definition: notice.h:91
AR_API ResolverChanged(const std::function< bool(const ArResolverContext &)> &affectsFn)
Create a notice using affectsFn to determine the ArResolverContext objects that are affected by this ...
AR_API ResolverChanged()
Create a notice indicating that the results of asset resolution might have changed,...
Base class for all ArResolver-related notices.
Definition: notice.h:55
An asset resolver context allows clients to provide additional data to the resolver for use during re...
const ContextObj * Get() const
Returns pointer to the context object of the given type held in this resolver context.
The base class for objects used to notify interested parties (listeners) when events have occurred.
Definition: notice.h:93
STL namespace.