+struct ord_list {
+ int ord;
+ struct ord_list *next;
+};
+
+struct ord_list *ord_list_create(NMEM nmem);
+struct ord_list *ord_list_append(NMEM nmem, struct ord_list *list, int ord);
+struct ord_list *ord_list_dup(NMEM nmem, struct ord_list *list);
+
+/**
+ * rset_term is all we need to know of a term to do ranking etc.
+ * As far as the rsets are concerned, it is just a dummy pointer to
+ * be passed around.
+ */
+struct rset_term {
+ char *name; /** the term itself in internal encoding (UTF-8/raw) */
+ char *flags; /** flags for rank method */
+ int type; /** Term_type from RPN Query. Actually this
+ is Z_Term_general, Z_Term_numeric,
+ Z_Term_characterString, ..
+ This info is used to return encoded term back for
+ search-result-1 .
+ */
+ int reg_type; /** register type */
+ RSET rset; /** the rset corresponding to this term */
+ void *rankpriv;/** private stuff for the ranking algorithm */
+ zint hits_limit;/** limit for hits if > 0 */
+ char *ref_id; /** reference for this term */
+ struct ord_list *ol;
+};
+
+typedef struct rset_term *TERMID;
+TERMID rset_term_create (const char *name, int length, const char *flags,
+ int type, NMEM nmem, struct ord_list *ol,
+ int reg_type, zint hits_limit, const char *ref_id);
+
+/** rsfd is a "file descriptor" for reading from a rset */
+struct rsfd { /* the stuff common to all rsfd's. */
+ RSET rset; /* ptr to the rset this FD is opened to */
+ void *priv; /* private parameters for this type */
+ RSFD next; /* to keep lists of used/free rsfd's */
+ zint counted_items;
+ char *counted_buf;
+};
+
+
+/**
+ * rset_control has function pointers to all the important functions
+ * of a rset. Each type of rset will have its own control block, pointing
+ * to the functions for that type. They all have their own create function
+ * which is not part of the control block, as it takes different args for
+ * each type.
+ */