47 lines
1.1 KiB
C++
47 lines
1.1 KiB
C++
|
#pragma once
|
||
|
|
||
|
#include "communication/bolt/v1/encoder/base_encoder.hpp"
|
||
|
|
||
|
namespace storage {
|
||
|
|
||
|
/**
|
||
|
* Buffer used for serialization of disk properties. The buffer
|
||
|
* implements a template parameter Buffer interface from BaseEncoder
|
||
|
* and Decoder classes for bolt serialization.
|
||
|
*/
|
||
|
class PODBuffer {
|
||
|
public:
|
||
|
PODBuffer() = default;
|
||
|
explicit PODBuffer(const std::string &s) {
|
||
|
buffer = std::vector<uint8_t>{s.begin(), s.end()};
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Writes data to buffer
|
||
|
*
|
||
|
* @param data - Pointer to data to be written.
|
||
|
* @param len - Data length.
|
||
|
*/
|
||
|
void Write(const uint8_t *data, size_t len) {
|
||
|
for (size_t i = 0; i < len; ++i) buffer.push_back(data[i]);
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Reads raw data from buffer.
|
||
|
*
|
||
|
* @param data - pointer to where data should be stored.
|
||
|
* @param len - data length
|
||
|
* @return - True if successful, False otherwise.
|
||
|
*/
|
||
|
bool Read(uint8_t *data, size_t len) {
|
||
|
if (len > buffer.size()) return false;
|
||
|
memcpy(data, buffer.data(), len);
|
||
|
buffer.erase(buffer.begin(), buffer.begin() + len);
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
std::vector<uint8_t> buffer;
|
||
|
};
|
||
|
|
||
|
} // namespace storage
|