Newer
Older
#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;
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:
std::vector<buffer<MemType::CPU> > cpu_buff;
public:
memory_pipline();
~memory_pipline();
template< MemType mem >
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(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();
};