aboutsummaryrefslogtreecommitdiffstats
path: root/streamingvisitors/src/vespa/vsm/searcher/floatfieldsearcher.h
diff options
context:
space:
mode:
Diffstat (limited to 'streamingvisitors/src/vespa/vsm/searcher/floatfieldsearcher.h')
-rw-r--r--streamingvisitors/src/vespa/vsm/searcher/floatfieldsearcher.h53
1 files changed, 53 insertions, 0 deletions
diff --git a/streamingvisitors/src/vespa/vsm/searcher/floatfieldsearcher.h b/streamingvisitors/src/vespa/vsm/searcher/floatfieldsearcher.h
new file mode 100644
index 00000000000..98018fbf4a3
--- /dev/null
+++ b/streamingvisitors/src/vespa/vsm/searcher/floatfieldsearcher.h
@@ -0,0 +1,53 @@
+// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+#pragma once
+
+#include "fieldsearcher.h"
+
+namespace vsm {
+
+template <typename T>
+class FloatFieldSearcherT : public FieldSearcher
+{
+public:
+ FloatFieldSearcherT(FieldIdT fId=0);
+ ~FloatFieldSearcherT();
+ void prepare(search::streaming::QueryTermList & qtl, const SharedSearcherBuf & buf) override;
+ void onValue(const document::FieldValue & fv) override;
+protected:
+ class FloatInfo
+ {
+ public:
+ FloatInfo(T low, T high, bool v) : _lower(low), _upper(high), _valid(v) { if (low > high) { _lower = high; _upper = low; } }
+ bool cmp(T key) const;
+ bool valid() const { return _valid; }
+ void setValid(bool v) { _valid = v; }
+ T getLow() const { return _lower; }
+ T getHigh() const { return _upper; }
+ private:
+ T _lower;
+ T _upper;
+ bool _valid;
+ };
+ typedef std::vector<FloatInfo> FloatInfoListT;
+ FloatInfoListT _floatTerm;
+};
+
+typedef FloatFieldSearcherT<float> FloatFieldSearcherTF;
+typedef FloatFieldSearcherT<double> FloatFieldSearcherTD;
+
+class FloatFieldSearcher : public FloatFieldSearcherTF
+{
+public:
+ std::unique_ptr<FieldSearcher> duplicate() const override;
+ FloatFieldSearcher(FieldIdT fId=0) : FloatFieldSearcherTF(fId) { }
+};
+
+class DoubleFieldSearcher : public FloatFieldSearcherTD
+{
+public:
+ std::unique_ptr<FieldSearcher> duplicate() const override;
+ DoubleFieldSearcher(FieldIdT fId=0) : FloatFieldSearcherTD(fId) { }
+};
+
+}
+