lux/query/boolean_query.h

00001 #ifndef LUX_QUERY_BOOLEANQUERY_H
00002 #define LUX_QUERY_BOOLEANQUERY_H
00003 
00004 #include "query.h"
00005 #include "lux/index/search_index.h"
00006 #include <vector>
00007 #include <iostream>
00008 
00009 namespace Lux {
00010 
00011   typedef enum {
00012     OP_AND = 1,
00013     OP_OR = 2,
00014     OP_NOT = 3,
00015   } op_t;
00016 
00017   struct QuerySet {
00018     QuerySet(Query *query_, int op_type_)
00019     : query(query_), op_type(op_type_)
00020     {}
00021     Query *query;
00022     int op_type;
00023   };
00024 
00025   typedef std::vector<QuerySet> QSContainer;
00026   typedef QSContainer::const_iterator QSCIterator;
00027 
00028   class BooleanQuery : public Query {
00029   public:
00030     static BooleanQuery *create(bool is_composite = false);
00031     virtual ~BooleanQuery(void);
00032     virtual IndexResultSet search(SearchIndex *si);
00033     void add(Query *query, op_t op_type = OP_AND);
00034     void set_composite(bool is_composite) { is_composite_ = is_composite; }
00035     bool is_composite(void) { return is_composite_; }
00036     bool is_composite(void) const { return is_composite_; }
00037     bool has_next(void);
00038     bool has_next(void) const;
00039     QuerySet get_next(void);
00040     QuerySet get_next(void) const;
00041     void init_iter(void) { q_sets_iterator_ = q_sets_.begin(); }
00042     void init_iter(void) const { q_sets_iterator_ = q_sets_.begin(); }
00043     virtual std::string to_str(void);
00044 
00045   private:
00046     QSContainer q_sets_;
00047     mutable QSCIterator q_sets_iterator_;
00048     bool is_composite_;
00049 
00050     BooleanQuery(bool is_composite = false)
00051     : is_composite_(is_composite)
00052     {}
00053   };
00054 }
00055 
00056 #endif

Generated on Fri Feb 5 15:50:30 2010 for Lux by  doxygen 1.4.7