#pragma once

#include "DataChannelSimulation.h"
#include "HardwareTaskSimulation.h"

#include <cinttypes>
#include <vector>

class Hardware {
public:
    static Hardware * getInstance();
    ~Hardware();

    void write( uint32_t base, uint32_t offset, uint32_t value );
    uint32_t read( uint32_t base, uint32_t offset );

private:
    Hardware();
    Hardware( const Hardware & ) = delete;

    static Hardware * instance;

    std::vector< DataChannelSimulation * > dataChannel;
    std::vector< HardwareTaskSimulation * > task;
    std::vector< task_function > function;
};