diff options
author | Christian Mollekopf <chrigi_1@fastmail.fm> | 2015-03-30 23:38:45 +0200 |
---|---|---|
committer | Christian Mollekopf <chrigi_1@fastmail.fm> | 2015-03-31 11:11:08 +0200 |
commit | 42f32ea5865c95028c577000e15e8a8631d16e74 (patch) | |
tree | 2d9e8a77ccccf088a8807f35f87e4264163d6cdd /common/storage.h | |
parent | 34851314d39307f22df01a4b711e6fd3c5618e23 (diff) | |
download | sink-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.h | 90 |
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 { | |||
33 | public: | 33 | public: |
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 | ||
87 | private: | 122 | private: |
123 | std::function<void(const Storage::Error &error)> mErrorHandler; | ||
124 | |||
125 | private: | ||
88 | class Private; | 126 | class Private; |
89 | Private * const d; | 127 | Private * const d; |
90 | }; | 128 | }; |