diff options
Diffstat (limited to 'example/example.hpp')
-rw-r--r-- | example/example.hpp | 71 |
1 files changed, 71 insertions, 0 deletions
diff --git a/example/example.hpp b/example/example.hpp new file mode 100644 index 0000000..0ea9572 --- /dev/null +++ b/example/example.hpp @@ -0,0 +1,71 @@ +#pragma once + +#include "blobs.hpp" + +#include <string> +#include <unordered_map> +#include <vector> + +namespace blobs +{ + +constexpr int kBufferSize = 1024; + +struct ExampleBlob +{ + ExampleBlob() = default; + ExampleBlob(uint16_t id, uint16_t flags) : + sessionId(id), flags(flags), length(0) + { + } + + /* The blob handler session id. */ + uint16_t sessionId; + + /* The flags passed into open. */ + uint16_t flags; + + /* The buffer is a fixed size, but length represents the number of bytes + * expected to be used contiguously from offset 0. + */ + uint32_t length; + + /* The staging buffer. */ + uint8_t buffer[kBufferSize]; +}; + +class ExampleBlobHandler : public GenericBlobInterface +{ + public: + /* We want everything explicitly default. */ + ExampleBlobHandler() = default; + ~ExampleBlobHandler() = default; + ExampleBlobHandler(const ExampleBlobHandler&) = default; + ExampleBlobHandler& operator=(const ExampleBlobHandler&) = default; + ExampleBlobHandler(ExampleBlobHandler&&) = default; + ExampleBlobHandler& operator=(ExampleBlobHandler&&) = default; + + bool canHandleBlob(const std::string& path) override; + std::vector<std::string> getBlobIds() override; + bool deleteBlob(const std::string& path) override; + bool stat(const std::string& path, struct BlobMeta* meta) override; + bool open(uint16_t session, uint16_t flags, + const std::string& path) override; + std::vector<uint8_t> read(uint16_t session, uint32_t offset, + uint32_t requestedSize) override; + bool write(uint16_t session, uint32_t offset, + const std::vector<uint8_t>& data) override; + bool commit(uint16_t session, const std::vector<uint8_t>& data) override; + bool close(uint16_t session) override; + bool stat(uint16_t session, struct BlobMeta* meta) override; + bool expire(uint16_t session) override; + + constexpr static char supportedPath[] = "/dev/fake/command"; + + private: + ExampleBlob* getSession(uint16_t id); + + std::unordered_map<uint16_t, ExampleBlob> sessions; +}; + +} // namespace blobs |