summaryrefslogtreecommitdiffstats
path: root/3rdparty/clucene/src/CLucene/search/WildcardQuery.cpp
diff options
context:
space:
mode:
Diffstat (limited to '3rdparty/clucene/src/CLucene/search/WildcardQuery.cpp')
-rw-r--r--3rdparty/clucene/src/CLucene/search/WildcardQuery.cpp147
1 files changed, 147 insertions, 0 deletions
diff --git a/3rdparty/clucene/src/CLucene/search/WildcardQuery.cpp b/3rdparty/clucene/src/CLucene/search/WildcardQuery.cpp
new file mode 100644
index 000000000..9373cef0a
--- /dev/null
+++ b/3rdparty/clucene/src/CLucene/search/WildcardQuery.cpp
@@ -0,0 +1,147 @@
+/*------------------------------------------------------------------------------
+* 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.
+------------------------------------------------------------------------------*/
+#include "CLucene/StdHeader.h"
+#include "WildcardQuery.h"
+#include "CLucene/util/BitSet.h"
+
+CL_NS_USE(index)
+CL_NS_USE(util)
+CL_NS_DEF(search)
+
+
+ WildcardQuery::WildcardQuery(Term* term):
+ MultiTermQuery( term ){
+ //Func - Constructor
+ //Pre - term != NULL
+ //Post - Instance has been created
+
+ }
+
+ WildcardQuery::~WildcardQuery(){
+ //Func - Destructor
+ //Pre - true
+ //Post - true
+
+ }
+
+ const TCHAR* WildcardQuery::getQueryName() const{
+ //Func - Returns the string "WildcardQuery"
+ //Pre - true
+ //Post - The string "WildcardQuery" has been returned
+ return getClassName();
+ }
+
+ const TCHAR* WildcardQuery::getClassName(){
+ return _T("WildcardQuery");
+ }
+
+
+ FilteredTermEnum* WildcardQuery::getEnum(IndexReader* reader) {
+ return _CLNEW WildcardTermEnum(reader, getTerm(false));
+ }
+
+ WildcardQuery::WildcardQuery(const WildcardQuery& clone):
+ MultiTermQuery(clone)
+ {
+ }
+
+ Query* WildcardQuery::clone() const{
+ return _CLNEW WildcardQuery(*this);
+ }
+ size_t WildcardQuery::hashCode() const{
+ //todo: we should give the query a seeding value... but
+ //need to do it for all hascode functions
+ return Similarity::floatToByte(getBoost()) ^ getTerm()->hashCode();
+ }
+ bool WildcardQuery::equals(Query* other) const{
+ if (!(other->instanceOf(WildcardQuery::getClassName())))
+ return false;
+
+ WildcardQuery* tq = (WildcardQuery*)other;
+ return (this->getBoost() == tq->getBoost())
+ && getTerm()->equals(tq->getTerm());
+ }
+
+
+
+
+
+
+
+
+
+
+
+
+WildcardFilter::WildcardFilter( Term* term )
+{
+ this->term = _CL_POINTER(term);
+}
+
+WildcardFilter::~WildcardFilter()
+{
+ _CLDECDELETE(term);
+}
+
+WildcardFilter::WildcardFilter( const WildcardFilter& copy ) :
+ term( _CL_POINTER(copy.term) )
+{
+}
+
+Filter* WildcardFilter::clone() const {
+ return _CLNEW WildcardFilter(*this );
+}
+
+
+TCHAR* WildcardFilter::toString()
+{
+ //Instantiate a stringbuffer buffer to store the readable version temporarily
+ CL_NS(util)::StringBuffer buffer;
+ //check if field equal to the field of prefix
+ if( term->field() != NULL ) {
+ //Append the field of prefix to the buffer
+ buffer.append(term->field());
+ //Append a colon
+ buffer.append(_T(":") );
+ }
+ //Append the text of the prefix
+ buffer.append(term->text());
+
+ //Convert StringBuffer buffer to TCHAR block and return it
+ return buffer.toString();
+}
+
+
+/** Returns a BitSet with true for documents which should be permitted in
+search results, and false for those that should not. */
+BitSet* WildcardFilter::bits( IndexReader* reader )
+{
+ BitSet* bts = _CLNEW BitSet( reader->maxDoc() );
+
+ WildcardTermEnum termEnum (reader, term);
+ if (termEnum.term(false) == NULL)
+ return bts;
+
+ TermDocs* termDocs = reader->termDocs();
+ try{
+ do{
+ termDocs->seek(&termEnum);
+
+ while (termDocs->next()) {
+ bts->set(termDocs->doc());
+ }
+ }while(termEnum.next());
+ } _CLFINALLY(
+ termDocs->close();
+ _CLDELETE(termDocs);
+ termEnum.close();
+ )
+
+ return bts;
+}
+
+CL_NS_END