HDK
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
definePackageResolver.h
Go to the documentation of this file.
1 //
2 // Copyright 2018 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_PACKAGE_RESOLVER_H
8 #define PXR_USD_AR_DEFINE_PACKAGE_RESOLVER_H
9 
10 /// \file ar/definePackageResolver.h
11 /// Macros for defining a package resolver implementation.
12 
13 #include "pxr/pxr.h"
14 #include "pxr/usd/ar/api.h"
16 
18 #include "pxr/base/tf/type.h"
19 
21 
22 /// \def AR_DEFINE_PACKAGE_RESOLVER
23 ///
24 /// Performs registrations required for the specified package resolver
25 /// class 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_PACKAGE_RESOLVER(CustomPackageResolverClass, ArPackageResolver);
31 /// \endcode
32 #ifdef doxygen
33 #define AR_DEFINE_PACKAGE_RESOLVER(PackageResolverClass, BaseClass1, ...)
34 #else
35 
36 #define AR_DEFINE_PACKAGE_RESOLVER(...) \
37 TF_REGISTRY_FUNCTION(TfType) { \
38  Ar_DefinePackageResolver<__VA_ARGS__>(); \
39 }
40 
42  : public TfType::FactoryBase
43 {
44 public:
45  AR_API
47 
48  AR_API
49  virtual ArPackageResolver* New() const = 0;
50 };
51 
52 template <class T>
55 {
56 public:
57  virtual ArPackageResolver* New() const override
58  {
59  return new T;
60  }
61 };
62 
63 template <class PackageResolver, class ...Bases>
65 {
66  TfType::Define<PackageResolver, TfType::Bases<Bases...>>()
67  .template SetFactory<Ar_PackageResolverFactory<PackageResolver>>();
68 }
69 
70 #endif // doxygen
71 
73 
74 #endif // PXR_USD_AR_DEFINE_PACKAGE_RESOLVER_H
virtual AR_API ArPackageResolver * New() const =0
virtual AR_API ~Ar_PackageResolverFactoryBase()
#define AR_API
Definition: api.h:23
Base class of all factory types.
Definition: type.h:56
virtual ArPackageResolver * New() const override
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
void Ar_DefinePackageResolver()