aboutsummaryrefslogtreecommitdiffstats
path: root/searchsummary/src/tests/extractkeywords/simplequerystackitem.h
diff options
context:
space:
mode:
Diffstat (limited to 'searchsummary/src/tests/extractkeywords/simplequerystackitem.h')
-rw-r--r--searchsummary/src/tests/extractkeywords/simplequerystackitem.h153
1 files changed, 153 insertions, 0 deletions
diff --git a/searchsummary/src/tests/extractkeywords/simplequerystackitem.h b/searchsummary/src/tests/extractkeywords/simplequerystackitem.h
new file mode 100644
index 00000000000..05250154d18
--- /dev/null
+++ b/searchsummary/src/tests/extractkeywords/simplequerystackitem.h
@@ -0,0 +1,153 @@
+// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+
+#pragma once
+
+#include <vespa/searchlib/query/weight.h>
+#include <vespa/searchlib/util/rawbuf.h>
+#include <vespa/vespalib/stllike/string.h>
+#include <vespa/searchlib/parsequery/parse.h>
+
+namespace search {
+
+/**
+ * An item on the simple query stack.
+ *
+ * An object of this class represents a single item
+ * on the simple query stack. It has a type, which corresponds
+ * to the different query stack execution operations. It also
+ * provides an arity, and the string values indexName and term, to
+ * accomodate the different needs of the operations.
+ * It also includes a mechanism for making singly linked lists
+ * with sub-lists. This is used during the parsing, and also
+ * when constructing the simple query stack.
+ */
+class SimpleQueryStackItem : public ParseItem
+{
+private:
+ SimpleQueryStackItem(const SimpleQueryStackItem &) = delete;
+ SimpleQueryStackItem& operator=(const SimpleQueryStackItem &) = delete;
+ SimpleQueryStackItem();
+public:
+ /** Pointer to next item in a linked list. */
+ SimpleQueryStackItem *_next;
+ /** Pointer to first item in a sublist. */
+ SimpleQueryStackItem *_sibling;
+
+private:
+ query::Weight _weight;
+ uint32_t _uniqueId;
+ uint32_t _arg1;
+ double _arg2;
+ double _arg3;
+ uint8_t _type;
+ uint8_t _flags;
+
+public:
+ /** Extra information on each item (creator id) coded in bits 12-19 of _type */
+ static inline ItemCreator GetCreator(uint8_t type) { return static_cast<ItemCreator>((type >> 3) & 0x01); }
+ /** The old item type now uses only the lower 12 bits in a backward compatible way) */
+ static inline ItemType GetType(uint8_t type) { return static_cast<ItemType>(type & 0x1F); }
+ inline ItemType Type() const { return GetType(_type); }
+
+ static inline bool GetFeature(uint8_t type, uint8_t feature)
+ { return ((type & feature) != 0); }
+
+ static inline bool GetFeature_Weight(uint8_t type)
+ { return GetFeature(type, IF_WEIGHT); }
+
+ static inline bool getFeature_UniqueId(uint8_t type)
+ { return GetFeature(type, IF_UNIQUEID); }
+
+ static inline bool getFeature_Flags(uint8_t type)
+ { return GetFeature(type, IF_FLAGS); }
+
+ inline bool Feature(uint8_t feature) const
+ { return GetFeature(_type, feature); }
+
+ inline bool Feature_Weight() const
+ { return GetFeature_Weight(_type); }
+
+ inline bool feature_UniqueId() const
+ { return getFeature_UniqueId(_type); }
+
+ inline bool feature_Flags() const
+ { return getFeature_Flags(_type); }
+
+ static inline bool getFlag(uint8_t flags, uint8_t flag)
+ { return ((flags & flag) != 0); }
+
+ /** The number of operands for the operation. */
+ uint32_t _arity;
+ /** The name of the specified index, or NULL if no index. */
+ vespalib::string _indexName;
+ /** The specified search term. */
+ vespalib::string _term;
+
+/**
+ * Overloaded constructor for SimpleQueryStackItem. Used primarily for
+ * the operators, or phrase without indexName.
+ *
+ * @param type The type of the SimpleQueryStackItem.
+ * @param arity The arity of the operation indicated by the SimpleQueryStackItem.
+ */
+ SimpleQueryStackItem(ItemType type, int arity);
+
+/**
+ * Overloaded constructor for SimpleQueryStackItem. Used for PHRASEs.
+ *
+ * @param type The type of the SimpleQueryStackItem.
+ * @param arity The arity of the operation indicated by the SimpleQueryStackItem.
+ * @param idx The name of the index of the SimpleQueryStackItem.
+ */
+ SimpleQueryStackItem(ItemType type, int arity, const char *index);
+
+/**
+ * Overloaded constructor for SimpleQueryStackItem. Used for TERMs without index.
+ *
+ * @param type The type of the SimpleQueryStackItem.
+ * @param term The actual term string of the SimpleQueryStackItem.
+ */
+ SimpleQueryStackItem(ItemType type, const char *term);
+
+/**
+ * Destructor for SimpleQueryStackItem.
+ */
+ ~SimpleQueryStackItem();
+
+/**
+ * Set the value of the _term field.
+ * @param term The string to set the _term field to.
+ */
+ void SetTerm(const char *term) { _term = term; }
+
+/**
+ * Set the value of the _indexName field.
+ * @param idx The string to set the _indexName field to.
+ */
+ void SetIndex(const char *index) { _indexName = index; }
+
+ /**
+ * Set the type of the operator. Use this with caution,
+ * as this changes the semantics of the item.
+ *
+ * @param type The new type.
+ */
+ void SetType(ItemType type) {
+ _type = (_type & ~0x1F) | type;
+ }
+
+ /**
+ * Get the unique id for this item.
+ *
+ * @return unique id for this item
+ **/
+ uint32_t getUniqueId() const { return _uniqueId; }
+
+ /**
+ * Encode the item in a binary buffer.
+ * @param buf Pointer to a buffer containing the encoded contents.
+ */
+ void AppendBuffer(RawBuf *buf) const;
+};
+
+}