// Copyright Vespa.ai. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. #pragma once #include "fieldsearcher.h" namespace vsm { template class FloatFieldSearcherT : public FieldSearcher { public: explicit FloatFieldSearcherT(FieldIdT fId); ~FloatFieldSearcherT() override; void prepare(search::streaming::QueryTermList& qtl, const SharedSearcherBuf& buf, const vsm::FieldPathMapT& field_paths, search::fef::IQueryEnvironment& query_env) override; void onValue(const document::FieldValue & fv) override; protected: class FloatInfo { public: FloatInfo(T low, T high, bool v) noexcept : _lower(low), _upper(high), _valid(v) { } 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; }; using FloatInfoListT = std::vector; FloatInfoListT _floatTerm; }; using FloatFieldSearcherTF = FloatFieldSearcherT; using FloatFieldSearcherTD = FloatFieldSearcherT; class FloatFieldSearcher : public FloatFieldSearcherTF { public: std::unique_ptr duplicate() const override; explicit FloatFieldSearcher(FieldIdT fId) : FloatFieldSearcherTF(fId) { } }; class DoubleFieldSearcher : public FloatFieldSearcherTD { public: std::unique_ptr duplicate() const override; DoubleFieldSearcher(FieldIdT fId) : FloatFieldSearcherTD(fId) { } }; }