//
// Copyright © 2020 Arm Ltd. All rights reserved.
// SPDX-License-Identifier: MIT
//

#pragma once

#include <common/include/Optional.hpp>

namespace arm
{

namespace pipe
{

class ICounterRegistry
{
public:
    virtual ~ICounterRegistry() {}

    // Register profiling objects
    virtual const Category*   RegisterCategory  (const std::string& categoryName) = 0;

    virtual const Device*     RegisterDevice    (const std::string& deviceName,
                                                 uint16_t cores,
                                                 const arm::pipe::Optional<std::string>& parentCategoryName) = 0;

    virtual const CounterSet* RegisterCounterSet(const std::string& counterSetName,
                                                 uint16_t count,
                                                 const arm::pipe::Optional<std::string>& parentCategoryName) = 0;

    virtual const Counter* RegisterCounter(const std::string& backendId,
        const uint16_t uid,
        const std::string& parentCategoryName,
        uint16_t counterClass,
        uint16_t interpolation,
        double multiplier,
        const std::string& name,
        const std::string& description,
        const arm::pipe::Optional<std::string>& units = arm::pipe::EmptyOptional(),
        const arm::pipe::Optional<uint16_t>& numberOfCores = arm::pipe::EmptyOptional(),
        const arm::pipe::Optional<uint16_t>& deviceUid = arm::pipe::EmptyOptional(),
        const arm::pipe::Optional<uint16_t>& counterSetUid = arm::pipe::EmptyOptional()) = 0;

};

} // namespace pipe

} // namespace arm
