#pragma once
#include <memory>
+#include <vector>
+#include <functional>
namespace armnn
{
+using CompiledBlobDeleter = std::function<void(const void*)>;
+using CompiledBlobPtr = std::unique_ptr<void, CompiledBlobDeleter>;
+
class ISubGraphConverter
{
public:
- virtual ~ISubGraphConverter() {};
+ virtual ~ISubGraphConverter() {}
- virtual std::shared_ptr<void> GetOutput() = 0;
+ virtual std::vector<CompiledBlobPtr> GetOutput() = 0;
};
-}
-
+} // namespace armnn
PreCompiledLayer::PreCompiledLayer(const PreCompiledDescriptor& param, const char* name)
: LayerWithParameters(param.m_NumInputSlots, param.m_NumOutputSlots, LayerType::PreCompiled, param, name)
- , m_PreCompiledObject(nullptr)
{}
PreCompiledLayer::~PreCompiledLayer()
PreCompiledLayer* PreCompiledLayer::Clone(Graph& graph) const
{
PreCompiledLayer* clone = CloneBase<PreCompiledLayer>(graph, m_Param, GetName());
- clone->m_PreCompiledObject = this->m_PreCompiledObject;
+ clone->m_PreCompiledObject.reset(const_cast<PreCompiledLayer*>(this)->m_PreCompiledObject.release());
return clone;
}
const armnn::IWorkloadFactory& factory) const
{
PreCompiledQueueDescriptor descriptor;
- descriptor.m_PreCompiledObject = m_PreCompiledObject;
+ descriptor.m_PreCompiledObject = m_PreCompiledObject.get();
return factory.CreatePreCompiled(descriptor, PrepInfoAndDesc(descriptor, graph));
}
// we do not need to validate its input shapes
}
-std::shared_ptr<void> PreCompiledLayer::GetPreCompiledObject() const
+void PreCompiledLayer::SetPreCompiledObject(PreCompiledObjectPtr preCompiledObject)
{
- return m_PreCompiledObject;
-}
-
-void PreCompiledLayer::SetPreCompiledObject(const std::shared_ptr<void>& preCompiledObject)
-{
- m_PreCompiledObject = preCompiledObject;
+ m_PreCompiledObject = std::move(preCompiledObject);
}
void PreCompiledLayer::Accept(ILayerVisitor& visitor) const
#include <armnn/Descriptors.hpp>
#include <memory>
+#include <functional>
namespace armnn
{
+using PreCompiledObjectDeleter = std::function<void(const void*)>;
+using PreCompiledObjectPtr = std::unique_ptr<void, PreCompiledObjectDeleter>;
+
class PreCompiledLayer : public LayerWithParameters<PreCompiledDescriptor>
{
public:
void ValidateTensorShapesFromInputs() override;
- std::shared_ptr<void> GetPreCompiledObject() const;
-
- void SetPreCompiledObject(const std::shared_ptr<void>& preCompiledObject);
+ void SetPreCompiledObject(PreCompiledObjectPtr preCompiledObject);
void Accept(ILayerVisitor& visitor) const override;
PreCompiledLayer(const PreCompiledLayer& other) = delete;
PreCompiledLayer& operator=(const PreCompiledLayer& other) = delete;
- std::shared_ptr<void> m_PreCompiledObject;
+ PreCompiledObjectPtr m_PreCompiledObject;
};
} // namespace armnn