All Downloads are FREE. Search and download functionalities are using the official Maven repository.

inalhdl.spinalhdl-sim_2.12.1.11.0.source-code.SharedMemIface.hpp Maven / Gradle / Ivy

The newest version!
#pragma once
#include"SharedStruct.hpp"
#include
#include
#include

using namespace std;

class SharedMemIface {

    public:
    SharedMemIface(const string& shmem_name, size_t shmem_size);
    string print_signals();
    int64_t get_signal_handle(const string& handle_name);
    std::vector read(int64_t handle);
    
    void read(int64_t handle, std::vector& data);
    int64_t read64(int64_t handle);
    int32_t read32(int64_t handle);
    void write(int64_t handle, const std::vector& data);
    void write64(int64_t handle, int64_t data);
    void write32(int64_t handle, int32_t data);
    
    std::vector read_mem(int64_t handle, int64_t index);
    void read_mem(int64_t handle, std::vector& data, int64_t index);
    int64_t read64_mem(int64_t handle, int64_t index);
    int32_t read32_mem(int64_t handle, int64_t index);
    void write_mem(int64_t handle, const std::vector& data, int64_t index);
    void write64_mem(int64_t handle, int64_t data, int64_t index);
    void write32_mem(int64_t handle, int32_t data, int64_t index);

    int32_t get_time_precision();
    void sleep(int64_t sleep_cycles);
    void eval();
    void set_seed(int64_t seed);
    void randomize(int64_t seed);
    void close();
    bool is_closed(){ return this->closed; };
    void check_ready();
    void set_crashed(int64_t ret_code_){ 
        this->ret_code.store(ret_code_, std::memory_order_relaxed); 
    };
    
    virtual ~SharedMemIface();

    private:

    void read_raw(int64_t handle, std::vector& data, bool is_mem);
    int64_t read64_raw(int64_t handle, bool is_mem);
    int32_t read32_raw(int64_t handle, bool is_mem);
    void write_raw(int64_t handle, const std::vector& data, bool is_mem);
    void write64_raw(int64_t handle, int64_t data, bool is_mem);
    void write32_raw(int64_t handle, int32_t data, bool is_mem);

    bool closed;
    size_t index;
    managed_shared_memory segment;
    SharedStruct* shared_struct; 
    string shmem_name;
    size_t shmem_size;
    std::atomic ret_code;
    std::vector data_buffer;
    std::string error_string;
};




© 2015 - 2025 Weber Informatics LLC | Privacy Policy