#include "pxr/pxr.h"
#include "pxr/base/plug/testPlugBase.h"
#include "pxr/base/plug/registry.h"
#include "pxr/base/tf/diagnostic.h"
#include "pxr/base/tf/type.h"
#include "pxr/base/tf/stringUtils.h"
#include "pxr/base/tf/type.h"
PXR_NAMESPACE_OPEN_SCOPE
template <int N>
TfRefPtr< _TestPlugBase<N> >
_TestPlugBase<N>::Manufacture(const std::string & subclass)
{
const TfType & t = PlugRegistry::FindTypeByName(subclass);
if (t.IsUnknown()) {
TF_CODING_ERROR("Failed to find TfType for %s", subclass.c_str());
return TfNullPtr;
}
if (_TestPlugFactoryBase<N>* factory =
t.GetFactory<_TestPlugFactoryBase<N> >()) {
return factory->New();
}
return TfNullPtr;
}
template class _TestPlugBase<1>;
template class _TestPlugBase<2>;
template class _TestPlugBase<3>;
template class _TestPlugBase<4>;
class _TestPlugDerived0 : public _TestPlugBase1 {
public:
typedef _TestPlugDerived0 This;
typedef TfRefPtr<This> RefPtr;
typedef TfWeakPtr<This> Ptr;
virtual ~_TestPlugDerived0() {}
static TfRefPtr<_TestPlugBase1> New() {
return TfCreateRefPtr(new This());
}
protected:
_TestPlugDerived0() {}
};
TF_REGISTRY_FUNCTION(TfType)
{
TfType::Define< _TestPlugBase1 >()
.SetFactory<_TestPlugFactory<_TestPlugBase1> >();
TfType::Define< _TestPlugBase2 >()
.SetFactory<_TestPlugFactory<_TestPlugBase2> >();
TfType::Define< _TestPlugBase3 >()
.SetFactory<_TestPlugFactory<_TestPlugBase3> >();
TfType::Define< _TestPlugBase4 >()
.SetFactory<_TestPlugFactory<_TestPlugBase4> >();
TfType::Define< _TestPlugDerived0, TfType::Bases<_TestPlugBase1> >()
.SetFactory<_TestPlugFactory<_TestPlugDerived0> >();
}
PXR_NAMESPACE_CLOSE_SCOPE