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

#include <armnn/Types.hpp>
#include <set>
#include <vector>

namespace armnn
{

class DeviceSpec : public IDeviceSpec
{
public:
    DeviceSpec(const BackendIdSet& supportedBackends)
        : m_SupportedBackends{supportedBackends} {}

    virtual ~DeviceSpec() {}

    virtual const BackendIdSet& GetSupportedBackends() const override
    {
        return m_SupportedBackends;
    }

    void AddSupportedBackends(const BackendIdSet& backendIds, bool isDynamic = false)
    {
        m_SupportedBackends.insert(backendIds.begin(), backendIds.end());
        if (isDynamic)
        {
            m_DynamicBackends.insert(backendIds.begin(), backendIds.end());
        }
    }

    void ClearDynamicBackends()
    {
        for (const auto& id : m_DynamicBackends)
        {
            m_SupportedBackends.erase(id);
        }
        m_DynamicBackends.clear();
    }

    const BackendIdSet& GetDynamicBackends() const
    {
        return m_DynamicBackends;
    }

private:
    DeviceSpec() = delete;
    BackendIdSet m_SupportedBackends;
    BackendIdSet m_DynamicBackends;
};

} // namespace armnn
