All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages
notice.h
1//
2// Copyright 2021 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_AR_NOTICE_H
8#define PXR_USD_AR_NOTICE_H
9
10#include "pxr/pxr.h"
11
12#include "pxr/usd/ar/api.h"
14
15#include "pxr/base/tf/notice.h"
16
17#include <functional>
18
19PXR_NAMESPACE_OPEN_SCOPE
20
21template <class ContextObj>
22bool Ar_ContextIsHolding(
23 const ContextObj& contextObj, const ArResolverContext& ctx)
24{
25 const ContextObj* testObj = ctx.Get<ContextObj>();
26 return testObj && *testObj == contextObj;
27}
28
31class ArNotice
32{
33public:
37 : public TfNotice
38 {
39 public:
40 AR_API virtual ~ResolverNotice();
41 protected:
42 AR_API ResolverNotice();
43 };
44
49 : public ResolverNotice
50 {
51 public:
55 AR_API
57
63 AR_API
65 const std::function<bool(const ArResolverContext&)>& affectsFn);
66
70 template <
71 class ContextObj,
72 typename std::enable_if<ArIsContextObject<ContextObj>::value>::type*
73 = nullptr>
75 const ContextObj& contextObj)
76 // XXX: Ideally this would just use a lambda and forward it to
77 // the other c'tor. Both of those cause issues in MSVC 2015; the
78 // first causes an unspecified type error and the second causes
79 // odd linker errors.
80 : _affects(std::bind(&Ar_ContextIsHolding<ContextObj>, contextObj,
81 std::placeholders::_1))
82 {
83 }
84
85 AR_API
86 virtual ~ResolverChanged();
87
90 AR_API
91 bool AffectsContext(const ArResolverContext& ctx) const;
92
93 private:
94 std::function<bool(const ArResolverContext&)> _affects;
95 };
96
97};
98
99PXR_NAMESPACE_CLOSE_SCOPE
100
101#endif
Notice sent when asset paths may resolve to a different path than before due to a change in the resol...
Definition: notice.h:50
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:74
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:38
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:76
STL namespace.