librime 1.2
Rime Input Method Engine, the core library
translation.h
Go to the documentation of this file.
1//
2// Copyright RIME Developers
3// Distributed under the BSD License
4//
5// 2011-05-02 Wensong He <snowhws@gmail.com>
6//
7
8#ifndef RIME_TRANSLATION_H_
9#define RIME_TRANSLATION_H_
10
11#include <rime_api.h>
12#include <rime/candidate.h>
13#include <rime/common.h>
14
15namespace rime {
16
18 public:
19 Translation() = default;
20 virtual ~Translation() = default;
21
22 // A translation may contain multiple results, looks
23 // something like a generator of candidates.
24 virtual bool Next() = 0;
25
26 virtual an<Candidate> Peek() = 0;
27
28 // should it provide the next candidate (negative value, zero) or
29 // should it give up the chance for other translations (positive)?
30 virtual int Compare(an<Translation> other, const CandidateList& candidates);
31
32 bool exhausted() const { return exhausted_; }
33
34 protected:
35 void set_exhausted(bool exhausted) { exhausted_ = exhausted; }
36
37 private:
38 bool exhausted_ = false;
39};
40
42 public:
43 UniqueTranslation(an<Candidate> candidate) : candidate_(candidate) {
44 set_exhausted(!candidate);
45 }
46
47 bool Next();
49
50 protected:
52};
53
55 public:
57
58 bool Next();
60
61 void Append(an<Candidate> candy);
62
63 size_t size() const { return candies_.size() - cursor_; }
64
65 protected:
67 size_t cursor_ = 0;
68};
69
71 public:
73
74 bool Next();
76
78
79 protected:
80 list<of<Translation>> translations_;
81};
82
84
86 public:
87 explicit MergedTranslation(const CandidateList& previous_candidates);
88
89 bool Next();
91
93
94 size_t size() const { return translations_.size(); }
95
96 protected:
97 void Elect();
98
100 vector<of<Translation>> translations_;
101 size_t elected_ = 0;
102};
103
105 public:
107
108 virtual bool Next();
109 virtual an<Candidate> Peek();
110
111 protected:
114};
115
116template <class T, class... Args>
117inline an<Translation> Cached(Args&&... args) {
118 return New<CacheTranslation>(New<T>(std::forward<Args>(args)...));
119}
120
122 public:
124 virtual bool Next();
125
126 protected:
127 bool AlreadyHas(const string& text) const;
128
129 set<string> candidate_set_;
130};
131
133 public:
135
136 virtual bool Next();
137 virtual an<Candidate> Peek();
138
139 protected:
140 virtual bool Replenish() { return false; }
141
144};
145
146} // namespace rime
147
148#endif // RIME_TRANSLATION_H_
#define RIME_DLL
Definition rime_api.h:33
Definition algebra.cc:12
std::shared_ptr< T > an
Definition common.h:60
list< of< Candidate > > CandidateQueue
Definition candidate.h:51
an< Translation > Cached(Args &&... args)
Definition translation.h:117
vector< of< Candidate > > CandidateList
Definition candidate.h:52
an< UnionTranslation > operator+(an< Translation > x, an< Translation > y)
Definition translation.cc:92
an< T > New(Args &&... args)
Definition common.h:77
Translation()=default
virtual int Compare(an< Translation > other, const CandidateList &candidates)
Definition translation.cc:12
virtual an< Candidate > Peek()=0
virtual ~Translation()=default
virtual bool Next()=0
bool exhausted() const
Definition translation.h:32
void set_exhausted(bool exhausted)
Definition translation.h:35
bool Next()
Definition translation.cc:25
an< Candidate > candidate_
Definition translation.h:51
UniqueTranslation(an< Candidate > candidate)
Definition translation.h:43
an< Candidate > Peek()
Definition translation.cc:32
bool Next()
Definition translation.cc:42
size_t size() const
Definition translation.h:63
CandidateList candies_
Definition translation.h:66
FifoTranslation()
Definition translation.cc:38
size_t cursor_
Definition translation.h:67
void Append(an< Candidate > candy)
Definition translation.cc:56
an< Candidate > Peek()
Definition translation.cc:50
bool Next()
Definition translation.cc:65
an< Candidate > Peek()
Definition translation.cc:78
UnionTranslation()
Definition translation.cc:61
list< of< Translation > > translations_
Definition translation.h:80
UnionTranslation & operator+=(an< Translation > t)
Definition translation.cc:84
const CandidateList & previous_candidates_
Definition translation.h:99
void Elect()
Definition translation.cc:126
MergedTranslation(const CandidateList &previous_candidates)
Definition translation.cc:101
MergedTranslation & operator+=(an< Translation > t)
Definition translation.cc:154
vector< of< Translation > > translations_
Definition translation.h:100
bool Next()
Definition translation.cc:106
size_t size() const
Definition translation.h:94
size_t elected_
Definition translation.h:101
an< Candidate > Peek()
Definition translation.cc:119
an< Candidate > cache_
Definition translation.h:113
virtual an< Candidate > Peek()
Definition translation.cc:180
an< Translation > translation_
Definition translation.h:112
virtual bool Next()
Definition translation.cc:169
CacheTranslation(an< Translation > translation)
Definition translation.cc:164
DistinctTranslation(an< Translation > translation)
Definition translation.cc:191
set< string > candidate_set_
Definition translation.h:129
virtual bool Next()
Definition translation.cc:194
bool AlreadyHas(const string &text) const
Definition translation.cc:205
virtual bool Replenish()
Definition translation.h:140
virtual an< Candidate > Peek()
Definition translation.cc:231
virtual bool Next()
Definition translation.cc:216
CandidateQueue cache_
Definition translation.h:143
an< Translation > translation_
Definition translation.h:142
PrefetchTranslation(an< Translation > translation)
Definition translation.cc:211