librime 1.2
Rime Input Method Engine, the core library
user_db.h
Go to the documentation of this file.
1//
2// Copyright RIME Developers
3// Distributed under the BSD License
4//
5// 2013-04-16 GONG Chen <chen.sst@gmail.com>
6//
7#ifndef RIME_USER_DB_H_
8#define RIME_USER_DB_H_
9
10#include <stdint.h>
11#include <rime/component.h>
12#include <rime/dict/db.h>
13#include <rime/dict/db_utils.h>
14
15namespace rime {
16
17using TickCount = uint64_t;
18
21 int commits = 0;
22 double dee = 0.0;
24
25 UserDbValue() = default;
26 UserDbValue(const string& value);
27
28 string Pack() const;
29 bool Unpack(const string& value);
30};
31
39class UserDb {
40 public:
41 static string snapshot_extension();
42
44 class Component : public Db::Component {
45 public:
46 virtual string extension() const = 0;
47 };
48
50 static Component* Require(const string& name) {
51 return dynamic_cast<Component*>(Db::Require(name));
52 }
53
54 UserDb() = delete;
55};
56
59 public:
60 UserDbHelper(Db* db) : db_(db) {}
61 UserDbHelper(const the<Db>& db) : db_(db.get()) {}
62 UserDbHelper(const an<Db>& db) : db_(db.get()) {}
63
65 RIME_DLL static bool IsUniformFormat(const path& file_path);
66 RIME_DLL bool UniformBackup(const path& snapshot_file);
67 RIME_DLL bool UniformRestore(const path& snapshot_file);
68
69 bool IsUserDb();
70 string GetDbName();
71 string GetUserId();
72 string GetRimeVersion();
73
74 protected:
76};
77
79template <class BaseDb>
80class UserDbWrapper : public BaseDb {
81 public:
82 RIME_DLL UserDbWrapper(const path& file_path, const string& db_name);
83
84 virtual bool CreateMetadata() {
85 return BaseDb::CreateMetadata() && UserDbHelper(this).UpdateUserInfo();
86 }
87 virtual bool Backup(const path& snapshot_file) {
88 return UserDbHelper::IsUniformFormat(snapshot_file)
89 ? UserDbHelper(this).UniformBackup(snapshot_file)
90 : BaseDb::Backup(snapshot_file);
91 }
92 virtual bool Restore(const path& snapshot_file) {
93 return UserDbHelper::IsUniformFormat(snapshot_file)
94 ? UserDbHelper(this).UniformRestore(snapshot_file)
95 : BaseDb::Restore(snapshot_file);
96 }
97};
98
100template <class BaseDb>
102 public:
104 Db* Create(const string& name) override {
105 return new UserDbImpl(DbFilePath(name, extension()), name);
106 }
107
108 string extension() const override;
109};
110
111class UserDbMerger : public Sink {
112 public:
113 explicit UserDbMerger(Db* db);
114 virtual ~UserDbMerger();
115
116 virtual bool MetaPut(const string& key, const string& value);
117 virtual bool Put(const string& key, const string& value);
118
119 void CloseMerge();
120
121 protected:
127};
128
129class UserDbImporter : public Sink {
130 public:
131 explicit UserDbImporter(Db* db);
132
133 virtual bool MetaPut(const string& key, const string& value);
134 virtual bool Put(const string& key, const string& value);
135
136 protected:
138};
139
140} // namespace rime
141
142#endif // RIME_USER_DB_H_
#define RIME_DLL
Definition rime_api.h:33
Definition algebra.cc:12
std::shared_ptr< T > an
Definition common.h:60
std::unique_ptr< T > the
Definition common.h:58
uint64_t TickCount
Definition user_db.h:17
Definition common.h:84
static Component * Require(const string &name)
Definition component.h:29
Definition db.h:33
path DbFilePath(const string &name, const string &extension) const
Definition db.cc:32
DbComponentBase()
Definition db.cc:26
Definition db_utils.h:14
bool Unpack(const string &value)
Definition user_db.cc:28
string Pack() const
Definition user_db.cc:22
double dee
Definition user_db.h:22
int commits
Definition user_db.h:21
UserDbValue()=default
TickCount tick
Definition user_db.h:23
static string snapshot_extension()
Definition user_db.cc:61
static Component * Require(const string &name)
Requires a registered component for a user db class.
Definition user_db.h:50
UserDb()=delete
Abstract class for a user db component.
Definition user_db.h:44
virtual string extension() const =0
UserDbHelper(const the< Db > &db)
Definition user_db.h:61
string GetDbName()
Definition user_db.cc:148
UserDbHelper(Db *db)
Definition user_db.h:60
RIME_DLL bool UniformBackup(const path &snapshot_file)
Definition user_db.cc:115
Db * db_
Definition user_db.h:75
RIME_DLL bool UpdateUserInfo()
Definition user_db.cc:105
static RIME_DLL bool IsUniformFormat(const path &file_path)
Definition user_db.cc:110
bool IsUserDb()
Definition user_db.cc:143
string GetRimeVersion()
Definition user_db.cc:166
RIME_DLL bool UniformRestore(const path &snapshot_file)
Definition user_db.cc:129
string GetUserId()
Definition user_db.cc:160
UserDbHelper(const an< Db > &db)
Definition user_db.h:62
A template to define a user db class based on an implementation of rime::Db.
Definition user_db.h:80
virtual bool CreateMetadata()
Definition user_db.h:84
virtual bool Restore(const path &snapshot_file)
Definition user_db.h:92
virtual bool Backup(const path &snapshot_file)
Definition user_db.h:87
RIME_DLL UserDbWrapper(const path &file_path, const string &db_name)
Implements a component that serves as a factory for a user db class.
Definition user_db.h:101
UserDbWrapper< BaseDb > UserDbImpl
Definition user_db.h:103
Db * Create(const string &name) override
Definition user_db.h:104
string extension() const override
void CloseMerge()
Definition user_db.cc:226
int merged_entries_
Definition user_db.h:126
TickCount our_tick_
Definition user_db.h:123
Db * db_
Definition user_db.h:122
TickCount max_tick_
Definition user_db.h:125
virtual bool Put(const string &key, const string &value)
Definition user_db.cc:204
TickCount their_tick_
Definition user_db.h:124
UserDbMerger(Db *db)
Definition user_db.cc:183
virtual bool MetaPut(const string &key, const string &value)
Definition user_db.cc:193
virtual bool Put(const string &key, const string &value)
Definition user_db.cc:248
UserDbImporter(Db *db)
Definition user_db.cc:242
Db * db_
Definition user_db.h:137
virtual bool MetaPut(const string &key, const string &value)
Definition user_db.cc:244