summaryrefslogtreecommitdiffstats
path: root/3rdparty/clucene/src/CLucene/search/BooleanScorer.h
diff options
context:
space:
mode:
Diffstat (limited to '3rdparty/clucene/src/CLucene/search/BooleanScorer.h')
-rw-r--r--3rdparty/clucene/src/CLucene/search/BooleanScorer.h99
1 files changed, 99 insertions, 0 deletions
diff --git a/3rdparty/clucene/src/CLucene/search/BooleanScorer.h b/3rdparty/clucene/src/CLucene/search/BooleanScorer.h
new file mode 100644
index 000000000..2147bc516
--- /dev/null
+++ b/3rdparty/clucene/src/CLucene/search/BooleanScorer.h
@@ -0,0 +1,99 @@
+/*------------------------------------------------------------------------------
+* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team
+*
+* Distributable under the terms of either the Apache License (Version 2.0) or
+* the GNU Lesser General Public License, as specified in the COPYING file.
+*
+* Changes are Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+------------------------------------------------------------------------------*/
+#ifndef _lucene_search_BooleanScorer_
+#define _lucene_search_BooleanScorer_
+
+#if defined(_LUCENE_PRAGMA_ONCE)
+# pragma once
+#endif
+
+#include "Scorer.h"
+
+CL_NS_DEF(search)
+
+class BooleanScorer : public Scorer {
+public:
+ class Bucket : LUCENE_BASE {
+ public:
+ int32_t doc; // tells if bucket is valid
+ qreal score; // incremental score
+ int32_t bits; // used for bool constraints
+ int32_t coord; // count of terms in score
+ Bucket* next; // next valid bucket
+
+ Bucket();
+ ~Bucket();
+ };
+
+ class SubScorer: LUCENE_BASE {
+ public:
+ bool done;
+ Scorer* scorer;
+ bool required;
+ bool prohibited;
+ HitCollector* collector;
+ SubScorer* next;
+ SubScorer(Scorer* scr, const bool r, const bool p, HitCollector* c, SubScorer* nxt);
+ ~SubScorer();
+ };
+
+ class BucketTable:LUCENE_BASE {
+ private:
+ BooleanScorer* scorer;
+ public:
+ Bucket* buckets;
+ Bucket* first; // head of valid list
+
+ BucketTable(BooleanScorer* scr);
+ int32_t size() const;
+ HitCollector* newCollector(const int32_t mask);
+ void clear();
+ ~BucketTable();
+
+ };
+
+ class Collector: public HitCollector {
+ private:
+ BucketTable* bucketTable;
+ int32_t mask;
+ public:
+ Collector(const int32_t mask, BucketTable* bucketTable);
+
+ void collect(const int32_t doc, const qreal score);
+ };
+
+ SubScorer* scorers;
+ BucketTable* bucketTable;
+
+ int32_t maxCoord;
+ int32_t nextMask;
+
+ int32_t end;
+ Bucket* current;
+
+public:
+ LUCENE_STATIC_CONSTANT(int32_t,BucketTable_SIZE=1024);
+ int32_t requiredMask;
+ int32_t prohibitedMask;
+ qreal* coordFactors;
+
+ BooleanScorer(Similarity* similarity);
+ ~BooleanScorer();
+ void add(Scorer* scorer, const bool required, const bool prohibited);
+ int32_t doc() const { return current->doc; }
+ bool next();
+ qreal score();
+ bool skipTo(int32_t target);
+ void explain(int32_t doc, Explanation* ret);
+ TCHAR* toString();
+ void computeCoordFactors();
+};
+
+CL_NS_END
+#endif