2019-09-20 14:52:22 -04:00
|
|
|
#pragma once
|
|
|
|
#include <functional>
|
2021-06-01 19:15:01 +00:00
|
|
|
#include "sds.h"
|
2019-09-20 14:52:22 -04:00
|
|
|
|
2019-12-09 20:45:58 -05:00
|
|
|
class IStorageFactory
|
|
|
|
{
|
|
|
|
public:
|
2020-07-11 21:23:48 +00:00
|
|
|
typedef void (*key_load_iterator)(const char *rgchKey, size_t cchKey, void *privdata);
|
2020-04-28 20:48:46 -04:00
|
|
|
|
2019-12-09 20:45:58 -05:00
|
|
|
virtual ~IStorageFactory() {}
|
2020-07-11 21:23:48 +00:00
|
|
|
virtual class IStorage *create(int db, key_load_iterator itr, void *privdata) = 0;
|
2019-12-09 21:07:37 -05:00
|
|
|
virtual const char *name() const = 0;
|
2020-06-07 16:40:03 -04:00
|
|
|
virtual size_t totalDiskspaceUsed() const = 0;
|
2020-07-11 21:23:48 +00:00
|
|
|
virtual bool FSlow() const = 0;
|
2019-12-09 20:45:58 -05:00
|
|
|
};
|
|
|
|
|
2019-09-20 14:52:22 -04:00
|
|
|
class IStorage
|
|
|
|
{
|
|
|
|
public:
|
2019-12-20 17:45:07 -05:00
|
|
|
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;
|
2019-09-20 14:52:22 -04:00
|
|
|
|
2019-12-16 18:32:30 -05:00
|
|
|
virtual ~IStorage();
|
2019-12-06 17:43:28 -05:00
|
|
|
|
2019-12-23 23:32:04 -05:00
|
|
|
virtual void insert(const char *key, size_t cchKey, void *data, size_t cb, bool fOverwire) = 0;
|
2019-12-20 17:45:07 -05:00
|
|
|
virtual bool erase(const char *key, size_t cchKey) = 0;
|
|
|
|
virtual void retrieve(const char *key, size_t cchKey, callbackSingle fn) const = 0;
|
2019-09-20 14:52:22 -04:00
|
|
|
virtual size_t clear() = 0;
|
2019-12-20 17:45:07 -05:00
|
|
|
virtual bool enumerate(callback fn) const = 0;
|
2019-12-22 18:38:10 -05:00
|
|
|
virtual size_t count() const = 0;
|
2019-12-06 17:43:28 -05:00
|
|
|
|
2021-06-01 19:15:01 +00:00
|
|
|
virtual void bulkInsert(sds *rgkeys, sds *rgvals, size_t celem) {
|
|
|
|
beginWriteBatch();
|
|
|
|
for (size_t ielem = 0; ielem < celem; ++ielem) {
|
|
|
|
insert(rgkeys[ielem], sdslen(rgkeys[ielem]), rgvals[ielem], sdslen(rgvals[ielem]), false);
|
|
|
|
}
|
|
|
|
endWriteBatch();
|
|
|
|
}
|
|
|
|
|
2019-12-08 20:06:22 -05:00
|
|
|
virtual void beginWriteBatch() {} // NOP
|
|
|
|
virtual void endWriteBatch() {} // NOP
|
|
|
|
|
2020-06-04 22:18:03 -04:00
|
|
|
virtual void batch_lock() {} // NOP
|
|
|
|
virtual void batch_unlock() {} // NOP
|
|
|
|
|
2019-12-16 18:32:30 -05:00
|
|
|
virtual void flush() = 0;
|
2019-12-09 20:45:58 -05:00
|
|
|
|
2019-12-06 17:43:28 -05:00
|
|
|
/* This is permitted to be a shallow clone */
|
|
|
|
virtual const IStorage *clone() const = 0;
|
2019-09-20 14:52:22 -04:00
|
|
|
};
|