HDK
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
defineResolver.h
Go to the documentation of this file.
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_AR_DEFINE_RESOLVER_H
8 #define PXR_USD_AR_DEFINE_RESOLVER_H
9 
10 /// \file ar/defineResolver.h
11 /// Macros for defining a custom resolver implementation.
12 
13 #include "pxr/pxr.h"
14 #include "pxr/usd/ar/api.h"
15 #include "pxr/usd/ar/resolver.h"
16 
18 #include "pxr/base/tf/type.h"
19 
21 
22 /// \def AR_DEFINE_RESOLVER
23 ///
24 /// Performs registrations required for the specified resolver class
25 /// to be discovered by Ar's plugin mechanism. This typically would be
26 /// invoked in the source file defining the resolver class. For example:
27 ///
28 /// \code
29 /// // in .cpp file
30 /// AR_DEFINE_RESOLVER(CustomResolverClass, ArResolver);
31 /// \endcode
32 #ifdef doxygen
33 #define AR_DEFINE_RESOLVER(ResolverClass, BaseClass1, ...)
34 #else
35 #define AR_DEFINE_RESOLVER(...) \
36 TF_REGISTRY_FUNCTION(TfType) { \
37  Ar_DefineResolver<__VA_ARGS__>(); \
38 }
39 #endif // doxygen
40 
42  : public TfType::FactoryBase
43 {
44 public:
45  AR_API
46  virtual ~Ar_ResolverFactoryBase();
47 
48  AR_API
49  virtual ArResolver* New() const = 0;
50 };
51 
52 template <class T>
54  : public Ar_ResolverFactoryBase
55 {
56 public:
57  virtual ArResolver* New() const override
58  {
59  return new T;
60  }
61 };
62 
63 template <class Resolver, class ...Bases>
65 {
66  TfType::Define<Resolver, TfType::Bases<Bases...>>()
67  .template SetFactory<Ar_ResolverFactory<Resolver> >();
68 }
69 
71 
72 #endif // PXR_USD_AR_DEFINE_RESOLVER_H
virtual AR_API ~Ar_ResolverFactoryBase()
virtual AR_API ArResolver * New() const =0
#define AR_API
Definition: api.h:23
Base class of all factory types.
Definition: type.h:56
void Ar_DefineResolver()
static TfType const & Define()
Definition: type_Impl.h:61
PXR_NAMESPACE_CLOSE_SCOPE PXR_NAMESPACE_OPEN_SCOPE
Definition: path.h:1425
#define PXR_NAMESPACE_CLOSE_SCOPE
Definition: pxr.h:74
virtual ArResolver * New() const override