Skip to content
Snippets Groups Projects
memory-holder.h 1.54 KiB
Newer Older
数学の武士's avatar
.
数学の武士 committed
#pragma once
#include <cstdlib>
#include <vector>
#include "TemplateParameters.h"

enum class buf_choose_policy
{
    naiv,
    sorted_vec,
    unsorted_vec
};

template< MemType mem >
class buffer
{
private:
    void *ptr;
    size_t allocated_size;
    size_t scalar_size;
    bool is_free;
    int id;

public:
    buffer();
    ~buffer();
    buffer(const size_t required_size);

    bool is_available() const;
    void* get_ptr() const;
    bool get_status() const;
    size_t get_size() const;
    buffer<mem>& operator=(buffer<mem>& other);
    void reallocate(const size_t required_size);
    void set_status(const bool status);
    void set_id(const int id);
};

class memory_pipline
{
private:
数学の武士's avatar
.  
数学の武士 committed
#ifdef INCLUDE_CUDA
数学の武士's avatar
.
数学の武士 committed
    std::vector<buffer<MemType::GPU> > gpu_buff;
数学の武士's avatar
.  
数学の武士 committed
#endif
数学の武士's avatar
.
数学の武士 committed
    std::vector<buffer<MemType::CPU> > cpu_buff;
public:
    memory_pipline();
    ~memory_pipline();

    template< MemType mem >
    int get_buffer(const size_t required_size, void * ptr);

    template< MemType mem >
    std::vector<buffer<mem> >& get_memtyped_vector();

    template< MemType mem >
    void set_available(const int id);
};

class memory_faucet
{
private:
    memory_faucet();
    memory_faucet(const memory_faucet&) = delete;
    memory_faucet& operator=(const memory_faucet&) = delete;

    static memory_pipline* mem_pipe;

public:
    static memory_pipline* get_faucet();
};

template< MemType mem >
class memBuf
{
private:
    void* buf;
    int id;
    size_t size;

public:
    memBuf(const size_t required_size);
    ~memBuf();
    void* ptr();
    int get_size();
};