summaryrefslogtreecommitdiffstats
path: root/common/storage.h
diff options
context:
space:
mode:
authorChristian Mollekopf <chrigi_1@fastmail.fm>2015-03-30 23:38:45 +0200
committerChristian Mollekopf <chrigi_1@fastmail.fm>2015-03-31 11:11:08 +0200
commit42f32ea5865c95028c577000e15e8a8631d16e74 (patch)
tree2d9e8a77ccccf088a8807f35f87e4264163d6cdd /common/storage.h
parent34851314d39307f22df01a4b711e6fd3c5618e23 (diff)
downloadsink-42f32ea5865c95028c577000e15e8a8631d16e74.tar.gz
sink-42f32ea5865c95028c577000e15e8a8631d16e74.zip
Storage: API cleanup/use QByteArray instead of std::string
Diffstat (limited to 'common/storage.h')
-rw-r--r--common/storage.h90
1 files changed, 64 insertions, 26 deletions
diff --git a/common/storage.h b/common/storage.h
index 099b45f..78faac0 100644
--- a/common/storage.h
+++ b/common/storage.h
@@ -33,45 +33,80 @@ class AKONADI2COMMON_EXPORT Storage {
33public: 33public:
34 enum AccessMode { ReadOnly, ReadWrite }; 34 enum AccessMode { ReadOnly, ReadWrite };
35 35
36 enum ErrorCodes {
37 GenericError,
38 NotOpen,
39 ReadOnlyError,
40 TransactionError,
41 NotFound
42 };
43
36 class Error 44 class Error
37 { 45 {
38 public: 46 public:
39 Error(const std::string &s, int c, const std::string &m) 47 Error(const QByteArray &s, int c, const QByteArray &m)
40 : store(s), message(m), code(c) {} 48 : store(s), message(m), code(c) {}
41 std::string store; 49 QByteArray store;
42 std::string message; 50 QByteArray message;
43 int code; 51 int code;
44 }; 52 };
45 53
46 Storage(const QString &storageRoot, const QString &name, AccessMode mode = ReadOnly, bool allowDuplicates = false); 54 Storage(const QString &storageRoot, const QString &name, AccessMode mode = ReadOnly, bool allowDuplicates = false);
47 ~Storage(); 55 ~Storage();
48 bool isInTransaction() const; 56 bool isInTransaction() const;
49 bool startTransaction(AccessMode mode = ReadWrite); 57 bool startTransaction(AccessMode mode = ReadWrite, const std::function<void(const Storage::Error &error)> &errorHandler = std::function<void(const Storage::Error &error)>());
50 bool commitTransaction(); 58 bool commitTransaction(const std::function<void(const Storage::Error &error)> &errorHandler = std::function<void(const Storage::Error &error)>());
51 void abortTransaction(); 59 void abortTransaction();
52 //TODO: row removal
53 //TODO: cursor based read
54 //TODO: query?
55 bool write(const void *key, size_t keySize, const void *value, size_t valueSize);
56 bool write(const std::string &sKey, const std::string &sValue);
57 void read(const std::string &sKey,
58 const std::function<bool(const std::string &value)> &resultHandler);
59 void read(const std::string &sKey,
60 const std::function<bool(const std::string &value)> &resultHandler,
61 const std::function<void(const Storage::Error &error)> &errorHandler);
62 void read(const std::string &sKey, const std::function<bool(void *ptr, int size)> &resultHandler);
63 void read(const std::string &sKey,
64 const std::function<bool(void *ptr, int size)> & resultHandler,
65 const std::function<void(const Storage::Error &error)> &errorHandler);
66 void scan(const std::string &sKey, const std::function<bool(void *keyPtr, int keySize, void *valuePtr, int valueSize)> &resultHandler);
67 void scan(const char *keyData, uint keySize,
68 const std::function<bool(void *keyPtr, int keySize, void *ptr, int size)> &resultHandler,
69 const std::function<void(const Storage::Error &error)> &errorHandler);
70 void remove(void const *keyData, uint keySize);
71 void remove(void const *keyData, uint keySize,
72 const std::function<void(const Storage::Error &error)> &errorHandler);
73 60
61 /**
62 * Write values.
63 */
64 bool write(const void *key, size_t keySize, const void *value, size_t valueSize, const std::function<void(const Storage::Error &error)> &errorHandler = std::function<void(const Storage::Error &error)>());
65
66 /**
67 * Convenience API
68 */
69 bool write(const QByteArray &key, const QByteArray &value, const std::function<void(const Storage::Error &error)> &errorHandler = std::function<void(const Storage::Error &error)>());
70
71 /**
72 * Read values with a give key.
73 *
74 * * An empty @param key results in a full scan
75 * * If duplicates are existing (revisions), all values are returned.
76 * * The pointers of the returned values are valid during the execution of the @param resultHandler
77 *
78 * @return The number of values retrieved.
79 */
80 int scan(const QByteArray &key, const std::function<bool(void *keyPtr, int keySize, void *ptr, int size)> &resultHandler, const std::function<void(const Storage::Error &error)> &errorHandler = std::function<void(const Storage::Error &error)>());
81
82 /**
83 * Convenience API
84 */
85 int scan(const QByteArray &key, const std::function<bool(const QByteArray &value)> &resultHandler, const std::function<void(const Storage::Error &error)> &errorHandler = std::function<void(const Storage::Error &error)>());
86
87 /**
88 * Remove a value
89 */
90 void remove(void const *key, uint keySize, const std::function<void(const Storage::Error &error)> &errorHandler = std::function<void(const Storage::Error &error)>());
91
92 /**
93 * Convenience API
94 */
95 void remove(const QByteArray &key, const std::function<void(const Storage::Error &error)> &errorHandler = std::function<void(const Storage::Error &error)>());
96
97 /**
98 * Set the default error handler.
99 */
100 void setDefaultErrorHandler(const std::function<void(const Storage::Error &error)> &errorHandler);
101 std::function<void(const Storage::Error &error)> defaultErrorHandler();
102
103 /**
104 * A basic error handler that writes to std::cerr.
105 *
106 * Used if nothing else is configured.
107 */
74 static std::function<void(const Storage::Error &error)> basicErrorHandler(); 108 static std::function<void(const Storage::Error &error)> basicErrorHandler();
109
75 qint64 diskUsage() const; 110 qint64 diskUsage() const;
76 void removeFromDisk() const; 111 void removeFromDisk() const;
77 112
@@ -85,6 +120,9 @@ public:
85 static bool isInternalKey(const QByteArray &key); 120 static bool isInternalKey(const QByteArray &key);
86 121
87private: 122private:
123 std::function<void(const Storage::Error &error)> mErrorHandler;
124
125private:
88 class Private; 126 class Private;
89 Private * const d; 127 Private * const d;
90}; 128};