//
// Copyright © 2022 Arm Ltd and Contributors. All rights reserved.
// SPDX-License-Identifier: MIT
//
#pragma once

#include "IExecutor.hpp"
#include "NetworkExecutionUtils/NetworkExecutionUtils.hpp"
#include "ExecuteNetworkProgramOptions.hpp"
#include "armnn/utility/NumericCast.hpp"
#include "armnn/utility/Timer.hpp"

#include <armnn_delegate.hpp>
#include <DelegateOptions.hpp>

#include <tensorflow/lite/c/common.h>
#include <tensorflow/lite/interpreter.h>
#include <tensorflow/lite/kernels/register.h>

using namespace tflite;
class  TfLiteExecutor : public IExecutor
{
public:
    TfLiteExecutor(const ExecuteNetworkParams& m_Params);

    std::vector<const void *> Execute() override;
    void PrintNetworkInfo() override{};
    void CompareAndPrintResult(std::vector<const void*> otherOutput) override;

private:
    std::unique_ptr<tflite::FlatBufferModel> m_Model;
    const ExecuteNetworkParams& m_Params;
    std::unique_ptr<Interpreter> m_TfLiteInterpreter;
};

