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

class buffer_base
{
public:
    void *ptr;
    size_t allocated_size;
    size_t scalar_size;
    bool is_free;
    int id;
    MemType mem;

    buffer_base(); // Done
    buffer_base(const size_t required_size, const MemType mem); // Done
    buffer_base(const buffer_base& other); // Done
    buffer_base(buffer_base&& other); // Done
    ~buffer_base(); // Done

    bool is_available() const; // Done
    void* get_ptr(); // Done
    bool get_status() const; // Done
    size_t get_size() const; // Done
    int get_id() const; // Done

    void set_allocated_size(const size_t required_size); // Done
    void set_status(const bool status); // Done
    void set_id(const int id); // Done
    void set_null_pointer(); // Done

    buffer_base& operator=(const buffer_base& other); // Done
    buffer_base& operator=(buffer_base&& other);      // Done

    void reallocate(const size_t required_size);
    void deallocate();
};

// namespace dyn_dispatch_buffer
// {
//     void reallocate(buffer_base* obj, const size_t required_size);
//     void deallocate(buffer_base* obj);
// };

// template< MemType mem >
// class buffer: public buffer_base
// {
// private:
//     using buffer_base::ptr;
//     using buffer_base::allocated_size;
//     using buffer_base::scalar_size;
//     using buffer_base::is_free;
//     using buffer_base::id;

// public:
//     buffer(const buffer<mem>& other) : buffer_base(other) {}
//     buffer(buffer<mem>&& other) : buffer_base(other) {}
//     buffer() : buffer_base() {}
//     ~buffer(){};
//     buffer(const size_t required_size) : buffer_base(required_size) {}

//     void reallocate(const size_t required_size) override;
//     void deallocate() override;
// };