#ifndef BUFFER_HPP
#define BUFFER_HPP

#include <cstdint>
#include <string>

class Buffer
{
public:
	uint8_t *buffer = nullptr;
	size_t taken = 0;

	std::string file_path;

	Buffer(size_t size);
	Buffer();
	~Buffer();
	bool resize(size_t new_size);
	uint32_t add_end(uint8_t *data, size_t data_size);
	int add_middle(uint8_t *data, size_t data_size, size_t index);

	// Removes data from buffer without checking if it's in the buffer
	void remove_fast(uint8_t *data, size_t data_size);

	void remove(size_t index, size_t data_size);

	size_t find(uint8_t *data, size_t data_size);

	void remove(uint8_t *data, size_t data_size);

	void clear() { taken = 0; }

	bool save_to_file();
	bool save_to_file(std::string file_path);

	bool load_from_file();
	bool load_from_file(std::string file_path);
private:
		size_t size = 0;
};

#endif //BUFFER_HPP