librime 1.2
Rime Input Method Engine, the core library
user_dictionary.h
Go to the documentation of this file.
1//
2// Copyright RIME Developers
3// Distributed under the BSD License
4//
5// 2011-10-30 GONG Chen <chen.sst@gmail.com>
6//
7#ifndef RIME_USER_DICTIONARY_H_
8#define RIME_USER_DICTIONARY_H_
9
10#include <time.h>
11#include <rime/common.h>
12#include <rime/component.h>
13#include <rime/dict/user_db.h>
15
16namespace rime {
17
19 public:
21
22 void Add(an<DictEntry>&& entry);
23 void SetEntries(DictEntryList&& entries);
24 void SortRange(size_t start, size_t count);
25
26 void AddFilter(DictEntryFilter filter) override;
28 bool Next();
29 bool exhausted() const { return index_ >= cache_.size(); }
30 size_t cache_size() const { return cache_.size(); }
31
32 protected:
33 bool FindNextEntry();
34
36 size_t index_ = 0;
37};
38
39using UserDictEntryCollector = map<size_t, UserDictEntryIterator>;
40
41class Schema;
42class Table;
43class Prism;
44class Db;
45struct SyllableGraph;
46struct DfsState;
47struct Ticket;
48
49class UserDictionary : public Class<UserDictionary, const Ticket&> {
50 public:
51 UserDictionary(const string& name, an<Db> db);
52 virtual ~UserDictionary();
53
54 void Attach(const an<Table>& table, const an<Prism>& prism);
55 bool Load();
56 bool loaded() const;
57 bool readonly() const;
58
60 size_t start_pos,
61 size_t depth_limit = 0,
62 size_t predict_word_from_depth = 0,
63 double initial_credibility = 0.0);
65 const string& input,
66 bool predictive,
67 size_t limit = 0,
68 string* resume_key = NULL);
69 bool UpdateEntry(const DictEntry& entry, int commits);
70 bool UpdateEntry(const DictEntry& entry,
71 int commits,
72 const string& new_entry_prefix);
73 bool UpdateTickCount(TickCount increment);
74
75 bool NewTransaction();
78
79 const string& name() const { return name_; }
80 TickCount tick() const { return tick_; }
81
82 static an<DictEntry> CreateDictEntry(const string& key,
83 const string& value,
84 TickCount present_tick,
85 double credibility = 0.0,
86 double quality_len = 0.0,
87 string* full_code = nullptr);
88
89 protected:
90 bool Initialize();
91 bool FetchTickCount();
92 bool TranslateCodeToString(const Code& code, string* result);
93 void DfsLookup(const SyllableGraph& syll_graph,
94 size_t current_pos,
95 const string& current_prefix,
96 DfsState* state);
97
98 private:
99 string name_;
100 an<Db> db_;
101 an<Table> table_;
102 an<Prism> prism_;
104 hash_map<SyllableId, string> rev_syllabary_;
105 TickCount tick_ = 0;
106 time_t transaction_time_ = 0;
107};
108
109class UserDictionaryComponent : public UserDictionary::Component {
110 public:
112 UserDictionary* Create(const Ticket& ticket);
113 UserDictionary* Create(const string& dict_name, const string& db_class);
114
115 private:
117};
118
119} // namespace rime
120
121#endif // RIME_USER_DICTIONARY_H_
Definition algebra.cc:12
std::shared_ptr< T > an
Definition common.h:60
function< bool(an< DictEntry > entry)> DictEntryFilter
Definition vocabulary.h:82
boost::unordered_map< Key, T > hash_map
Definition common.h:53
uint64_t TickCount
Definition user_db.h:17
map< size_t, UserDictEntryIterator > UserDictEntryCollector
Definition user_dictionary.h:39
Definition prism.h:20
Definition table.h:36
Definition syllabifier.h:39
Definition component.h:21
Definition db.h:33
Definition prism.h:67
Definition table.h:191
Definition user_dictionary.cc:27
Definition user_dictionary.h:18
void SetEntries(DictEntryList &&entries)
Definition user_dictionary.cc:109
void Add(an< DictEntry > &&entry)
Definition user_dictionary.cc:105
DictEntryList cache_
Definition user_dictionary.h:35
void AddFilter(DictEntryFilter filter) override
Definition user_dictionary.cc:117
size_t cache_size() const
Definition user_dictionary.h:30
bool exhausted() const
Definition user_dictionary.h:29
void SortRange(size_t start, size_t count)
Definition user_dictionary.cc:113
an< DictEntry > Peek()
Definition user_dictionary.cc:126
bool FindNextEntry()
Definition user_dictionary.cc:133
bool Next()
Definition user_dictionary.cc:141
size_t index_
Definition user_dictionary.h:36
Definition user_dictionary.h:49
bool Initialize()
Definition user_dictionary.cc:468
bool NewTransaction()
Definition user_dictionary.cc:486
bool CommitPendingTransaction()
Definition user_dictionary.cc:504
void Attach(const an< Table > &table, const an< Prism > &prism)
Definition user_dictionary.cc:164
UserDictionary(const string &name, an< Db > db)
Definition user_dictionary.cc:155
const string & name() const
Definition user_dictionary.h:79
bool TranslateCodeToString(const Code &code, string *result)
Definition user_dictionary.cc:512
an< UserDictEntryCollector > Lookup(const SyllableGraph &syllable_graph, size_t start_pos, size_t depth_limit=0, size_t predict_word_from_depth=0, double initial_credibility=0.0)
Definition user_dictionary.cc:314
bool FetchTickCount()
Definition user_dictionary.cc:472
bool loaded() const
Definition user_dictionary.cc:185
bool Load()
Definition user_dictionary.cc:169
bool UpdateTickCount(TickCount increment)
Definition user_dictionary.cc:459
bool RevertRecentTransaction()
Definition user_dictionary.cc:495
TickCount tick() const
Definition user_dictionary.h:80
bool UpdateEntry(const DictEntry &entry, int commits)
Definition user_dictionary.cc:421
size_t LookupWords(UserDictEntryIterator *result, const string &input, bool predictive, size_t limit=0, string *resume_key=NULL)
Definition user_dictionary.cc:358
void DfsLookup(const SyllableGraph &syll_graph, size_t current_pos, const string &current_prefix, DfsState *state)
Definition user_dictionary.cc:216
static an< DictEntry > CreateDictEntry(const string &key, const string &value, TickCount present_tick, double credibility=0.0, double quality_len=0.0, string *full_code=nullptr)
Definition user_dictionary.cc:532
bool readonly() const
Definition user_dictionary.cc:189
UserDictionary * Create(const Ticket &ticket)
Definition user_dictionary.cc:588
UserDictionaryComponent()
Definition user_dictionary.cc:571
Definition vocabulary.h:21
Definition vocabulary.h:46
Definition vocabulary.h:76
Definition vocabulary.h:84
Definition schema.h:15
Definition ticket.h:17