Lucene++ - a full-featured, c++ search engine
API Documentation


 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Pages
FieldComparator.h
Go to the documentation of this file.
1 
2 // Copyright (c) 2009-2014 Alan Wright. All rights reserved.
3 // Distributable under the terms of either the Apache License (Version 2.0)
4 // or the GNU Lesser General Public License.
6 
7 #ifndef FIELDCOMPARATOR_H
8 #define FIELDCOMPARATOR_H
9 
10 #include "LuceneObject.h"
11 
12 namespace Lucene {
13 
42 class LPPAPI FieldComparator : public LuceneObject {
43 public:
44  virtual ~FieldComparator();
46 
47 public:
53  virtual int32_t compare(int32_t slot1, int32_t slot2) = 0;
54 
58  virtual void setBottom(int32_t slot) = 0;
59 
69  virtual int32_t compareBottom(int32_t doc) = 0;
70 
75  virtual void copy(int32_t slot, int32_t doc) = 0;
76 
81  virtual void setNextReader(const IndexReaderPtr& reader, int32_t docBase) = 0;
82 
85  virtual void setScorer(const ScorerPtr& scorer);
86 
90  virtual ComparableValue value(int32_t slot) = 0;
91 };
92 
93 template <typename TYPE>
95 public:
96  NumericComparator(int32_t numHits, const String& field = EmptyString) {
97  this->values = Collection<TYPE>::newInstance(numHits);
98  this->field = field;
99  this->bottom = 0;
100  }
101 
102  virtual ~NumericComparator() {
103  }
104 
105 protected:
108  String field;
109  TYPE bottom;
110 
111 public:
112  virtual int32_t compare(int32_t slot1, int32_t slot2) {
113  return (int32_t)(values[slot1] - values[slot2]);
114  }
115 
116  virtual int32_t compareBottom(int32_t doc) {
117  return (int32_t)(bottom - currentReaderValues[doc]);
118  }
119 
120  virtual void copy(int32_t slot, int32_t doc) {
121  values[slot] = currentReaderValues[doc];
122  }
123 
124  virtual void setBottom(int32_t slot) {
125  bottom = values[slot];
126  }
127 
128  virtual ComparableValue value(int32_t slot) {
129  return ComparableValue(values[slot]);
130  }
131 };
132 
134 class LPPAPI ByteComparator : public NumericComparator<uint8_t> {
135 public:
136  ByteComparator(int32_t numHits, const String& field, const ParserPtr& parser);
137  virtual ~ByteComparator();
138 
140 
141 protected:
142  ByteParserPtr parser;
143 
144 public:
145  virtual void setNextReader(const IndexReaderPtr& reader, int32_t docBase);
146 };
147 
149 class LPPAPI DocComparator : public NumericComparator<int32_t> {
150 public:
151  DocComparator(int32_t numHits);
152  virtual ~DocComparator();
153 
155 
156 protected:
157  int32_t docBase;
158 
159 public:
160  virtual int32_t compareBottom(int32_t doc);
161  virtual void copy(int32_t slot, int32_t doc);
162  virtual void setNextReader(const IndexReaderPtr& reader, int32_t docBase);
163 };
164 
166 class LPPAPI DoubleComparator : public NumericComparator<double> {
167 public:
168  DoubleComparator(int32_t numHits, const String& field, const ParserPtr& parser);
169  virtual ~DoubleComparator();
170 
172 
173 protected:
174  DoubleParserPtr parser;
175 
176 public:
177  virtual int32_t compare(int32_t slot1, int32_t slot2);
178  virtual int32_t compareBottom(int32_t doc);
179  virtual void setNextReader(const IndexReaderPtr& reader, int32_t docBase);
180 };
181 
183 class LPPAPI IntComparator : public NumericComparator<int32_t> {
184 public:
185  IntComparator(int32_t numHits, const String& field, const ParserPtr& parser);
186  virtual ~IntComparator();
187 
189 
190 protected:
191  IntParserPtr parser;
192 
193 public:
194  virtual int32_t compare(int32_t slot1, int32_t slot2);
195  virtual int32_t compareBottom(int32_t doc);
196  virtual void setNextReader(const IndexReaderPtr& reader, int32_t docBase);
197 };
198 
200 class LPPAPI LongComparator : public NumericComparator<int64_t> {
201 public:
202  LongComparator(int32_t numHits, const String& field, const ParserPtr& parser);
203  virtual ~LongComparator();
204 
206 
207 protected:
208  LongParserPtr parser;
209 
210 public:
211  virtual int32_t compare(int32_t slot1, int32_t slot2);
212  virtual int32_t compareBottom(int32_t doc);
213  virtual void setNextReader(const IndexReaderPtr& reader, int32_t docBase);
214 };
215 
219 class LPPAPI RelevanceComparator : public NumericComparator<double> {
220 public:
221  RelevanceComparator(int32_t numHits);
222  virtual ~RelevanceComparator();
223 
225 
226 protected:
227  ScorerPtr scorer;
228 
229 public:
230  virtual int32_t compare(int32_t slot1, int32_t slot2);
231  virtual int32_t compareBottom(int32_t doc);
232  virtual void copy(int32_t slot, int32_t doc);
233  virtual void setNextReader(const IndexReaderPtr& reader, int32_t docBase);
234  virtual void setScorer(const ScorerPtr& scorer);
235 };
236 
239 public:
240  StringComparatorLocale(int32_t numHits, const String& field, const std::locale& locale);
241  virtual ~StringComparatorLocale();
242 
244 
245 protected:
248  String field;
250  String bottom;
251 
252 public:
253  virtual int32_t compare(int32_t slot1, int32_t slot2);
254  virtual int32_t compareBottom(int32_t doc);
255  virtual void copy(int32_t slot, int32_t doc);
256  virtual void setNextReader(const IndexReaderPtr& reader, int32_t docBase);
257  virtual void setBottom(int32_t slot);
258  virtual ComparableValue value(int32_t slot);
259 };
260 
267 public:
268  StringOrdValComparator(int32_t numHits, const String& field, int32_t sortPos, bool reversed);
269  virtual ~StringOrdValComparator();
270 
272 
273 protected:
274  Collection<int32_t> ords;
277 
281  String field;
282 
283  int32_t bottomSlot;
284  int32_t bottomOrd;
285  String bottomValue;
286  bool reversed;
287  int32_t sortPos;
288 
289 public:
290  virtual int32_t compare(int32_t slot1, int32_t slot2);
291  virtual int32_t compareBottom(int32_t doc);
292  virtual void copy(int32_t slot, int32_t doc);
293  virtual void setNextReader(const IndexReaderPtr& reader, int32_t docBase);
294  virtual void setBottom(int32_t slot);
295  virtual ComparableValue value(int32_t slot);
296  virtual Collection<String> getValues();
297  virtual int32_t getBottomSlot();
298  virtual String getField();
299 
300 protected:
301  void convert(int32_t slot);
302  int32_t binarySearch(Collection<String> lookup, const String& key, int32_t low, int32_t high);
303 };
304 
307 class LPPAPI StringValComparator : public FieldComparator {
308 public:
309  StringValComparator(int32_t numHits, const String& field);
310  virtual ~StringValComparator();
311 
313 
314 protected:
317  String field;
318  String bottom;
319 
320 public:
321  virtual int32_t compare(int32_t slot1, int32_t slot2);
322  virtual int32_t compareBottom(int32_t doc);
323  virtual void copy(int32_t slot, int32_t doc);
324  virtual void setNextReader(const IndexReaderPtr& reader, int32_t docBase);
325  virtual void setBottom(int32_t slot);
326  virtual ComparableValue value(int32_t slot);
327 };
328 
329 }
330 
331 #endif

clucene.sourceforge.net