#include "frontend/wrapper/memory.h"
#include "model/operation/Node.Include.h"
#include "util/TypeConvert.h"
+#include "util/logging.h"
int ANeuralNetworksModel_create(ANeuralNetworksModel **model)
{
if (model == nullptr)
{
+ VERBOSE(NNAPI::Model) << "create: Incorrect null pointer parameter" << std::endl;
return ANEURALNETWORKS_UNEXPECTED_NULL;
}
*model = new (std::nothrow) ANeuralNetworksModel{};
if (*model == nullptr)
{
+ VERBOSE(NNAPI::Model) << "create: Fail to create model object" << std::endl;
return ANEURALNETWORKS_OUT_OF_MEMORY;
}
{
if (model == nullptr)
{
+ VERBOSE(NNAPI::Model) << "finish: Incorrect null pointer parameter" << std::endl;
return ANEURALNETWORKS_UNEXPECTED_NULL;
}
- return model->finish();
+ if (model->isFinished())
+ {
+ VERBOSE(NNAPI::Model) << "finish: Already finished" << std::endl;
+ return ANEURALNETWORKS_BAD_STATE;
+ }
+
+ if (!model->finish())
+ {
+ VERBOSE(NNAPI::Model) << "finish: Fail to generate internal graph" << std::endl;
+ return ANEURALNETWORKS_BAD_STATE;
+ }
+
+ return ANEURALNETWORKS_NO_ERROR;
}
#include "model.h"
#include "graph/Graph.h"
+#include "util/logging.h"
//
// ANeuralNetworksModel
//
-ANeuralNetworksModel::ANeuralNetworksModel()
+ANeuralNetworksModel::ANeuralNetworksModel() noexcept
: _model{new neurun::graph::Graph}, _optional_operands{}
{
// DO NOTHING
}
-ResultCode ANeuralNetworksModel::finish()
+bool ANeuralNetworksModel::finish() noexcept
{
- // This function must only be called once for a given model
- if (isFinished())
+ try
{
- return ANEURALNETWORKS_BAD_STATE;
- }
+ fillOptionalOperand();
- fillOptionalOperand();
+ _model->finishBuilding();
+ }
+ catch (const std::exception &e)
+ {
+ VERBOSE(EXCEPTION) << e.what() << '\n';
- _model->finishBuilding();
+ return false;
+ }
- return ANEURALNETWORKS_NO_ERROR;
+ return true;
}
void ANeuralNetworksModel::fillOptionalOperand(void)
struct ANeuralNetworksModel
{
public:
- ANeuralNetworksModel();
+ ANeuralNetworksModel() noexcept;
public:
neurun::graph::Graph &deref(void) { return *_model; }
- ResultCode finish();
+ bool finish() noexcept;
bool isFinished() { return !_model->isBuildingPhase(); }
void release(std::shared_ptr<neurun::graph::Graph> &model) { model = _model; }
void setOptionalOperand(const neurun::model::operand::Index idx)