futriix/src/IStorage.h
John Sully b752ad4ceb Fix failure to count keys in cluster slots when reloading a FLASH database
Former-commit-id: f6dd863e51f91620f184ff80f08cfe518d29c87f
2020-04-28 20:48:46 -04:00

37 lines
1.1 KiB
C++

#pragma once
#include <functional>
class IStorageFactory
{
public:
typedef void (*key_load_iterator)(const char *rgchKey, size_t cchKey);
virtual ~IStorageFactory() {}
virtual class IStorage *create(int db, key_load_iterator itr) = 0;
virtual const char *name() const = 0;
};
class IStorage
{
public:
typedef std::function<bool(const char *, size_t, const void *, size_t)> callback;
typedef std::function<void(const char *, size_t, const void *, size_t)> callbackSingle;
virtual ~IStorage();
virtual void insert(const char *key, size_t cchKey, void *data, size_t cb, bool fOverwire) = 0;
virtual bool erase(const char *key, size_t cchKey) = 0;
virtual void retrieve(const char *key, size_t cchKey, callbackSingle fn) const = 0;
virtual size_t clear() = 0;
virtual bool enumerate(callback fn) const = 0;
virtual size_t count() const = 0;
virtual void beginWriteBatch() {} // NOP
virtual void endWriteBatch() {} // NOP
virtual void flush() = 0;
/* This is permitted to be a shallow clone */
virtual const IStorage *clone() const = 0;
};