| /*------------------------------------------------------------------------------ |
| * Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team |
| * |
| * Distributable under the terms of either the Apache License (Version 2.0) or |
| * the GNU Lesser General Public License, as specified in the COPYING file. |
| ------------------------------------------------------------------------------*/ |
| #ifndef _lucene_search_BooleanClause_ |
| #define _lucene_search_BooleanClause_ |
| |
| #if defined(_LUCENE_PRAGMA_ONCE) |
| # pragma once |
| #endif |
| #include "SearchHeader.h" |
| |
| CL_NS_DEF(search) |
| // A clause in a BooleanQuery. |
| class BooleanClause:LUCENE_BASE { |
| public: |
| class Compare:public CL_NS_STD(binary_function)<const BooleanClause*,const BooleanClause*,bool> |
| { |
| public: |
| bool operator()( const BooleanClause* val1, const BooleanClause* val2 ) const{ |
| return val1->equals(val2); |
| } |
| }; |
| |
| // The query whose matching documents are combined by the boolean query. |
| Query* query; |
| |
| int32_t getClauseCount(); |
| |
| // If true, documents documents which <i>do not</i> |
| // match this sub-query will <i>not</i> match the boolean query. |
| bool required; |
| |
| // If true, documents documents which <i>do</i> |
| // match this sub-query will <i>not</i> match the boolean query. |
| bool prohibited; |
| |
| bool deleteQuery; |
| |
| // Constructs a BooleanClause with query <code>q</code>, required |
| // <code>r</code> and prohibited <code>p</code>. |
| BooleanClause(Query* q, const bool DeleteQuery,const bool req, const bool p): |
| query(q), |
| required(req), |
| prohibited(p), |
| deleteQuery(DeleteQuery) |
| { |
| } |
| |
| BooleanClause(const BooleanClause& clone): |
| #if defined(LUCENE_ENABLE_MEMLEAKTRACKING) |
| #elif defined(LUCENE_ENABLE_REFCOUNT) |
| #else |
| LuceneVoidBase(), |
| #endif |
| query(clone.query->clone()), |
| required(clone.required), |
| prohibited(clone.prohibited), |
| deleteQuery(true) |
| { |
| } |
| |
| BooleanClause* clone() const{ |
| BooleanClause* ret = _CLNEW BooleanClause(*this); |
| return ret; |
| } |
| |
| ~BooleanClause(){ |
| if ( deleteQuery ) |
| _CLDELETE( query ); |
| } |
| |
| /** Returns true iff <code>o</code> is equal to this. */ |
| bool equals(const BooleanClause* other) const { |
| return this->query->equals(other->query) |
| && (this->required == other->required) |
| && (this->prohibited == other->prohibited); |
| } |
| |
| size_t hashCode() const{ |
| return query->hashCode() ^ (this->required?1:0) ^ (this->prohibited?2:0); |
| } |
| }; |
| |
| |
| CL_NS_END |
| #endif |
| |