/*------------------------------------------------------------------------------ * 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_index_Term_ #define _lucene_index_Term_ CL_NS_DEF(index) /** A Term represents a word from text. This is the unit of search. It is composed of two elements, the text of the word, as a string, and the name of the field that the text occured in, an interned string. Note that terms may represent more than words from text fields, but also things like dates, email addresses, urls, etc. IMPORTANT NOTE: Term inherits from the template class LUCENE_REFBASE which tries to do some garbage collection by counting the references an instance has. As a result of this construction you MUST use _CLDECDELETE(obj) when you want to delete an of Term! ABOUT intrn intrn indicates if field and text are interned or not. Interning of Strings is the process of converting duplicated strings to shared ones. */ class CLUCENE_EXPORT Term:LUCENE_REFBASE { private: size_t cachedHashCode; const TCHAR* _field; //CLStringIntern::iterator fielditr; #ifdef LUCENE_TERM_TEXT_LENGTH TCHAR _text[LUCENE_TERM_TEXT_LENGTH+1]; #else TCHAR* _text; size_t textLenBuf; //a cache of text len, this allows for a preliminary comparison of text lengths //bool dupT; //Indicates if Term Text is duplicated (and therefore must be deleted). #endif size_t textLen; //a cache of text len, this allows for a preliminary comparison of text lengths bool internF; //Indicates if Term Field is interned(and therefore must be uninternd). public: //uses the specified fieldTerm's field. this saves on intern'ing time. /** Constructs a Term with the given field and text. *

Note that a null field or null text value results in undefined * behavior for most Lucene APIs that accept a Term parameter. */ Term(const Term* fieldTerm, const TCHAR* txt); /** Constructs a blank term */ Term(); /** Constructs a Term with the given field and text. *

Note that a null field or null text value results in undefined * behavior for most Lucene APIs that accept a Term parameter. */ Term(const TCHAR* fld, const TCHAR* txt, bool internField); /** * Constructor. Constructs a Term with the given field and text. Field and text are not copied * Field and text are deleted in destructor only if intern is false. *

Note that a null field or null text value results in undefined * behavior for most Lucene APIs that accept a Term parameter. */ Term(const TCHAR* fld, const TCHAR* txt); ///Destructor. ~Term(); ///Returns the field of this term, an interned string. The field indicates ///the part of a document which this term came from. const TCHAR* field() const; /// TCHAR* toString() const; size_t hashCode(); }; class Term_UnorderedCompare:LUCENE_BASE, public CL_NS(util)::Compare::_base // { public: bool operator()( Term* t1, Term* t2 ) const{ return ( t1->hashedCompareTo(t2) < 0 ); } size_t operator()( Term* t ) const{ return t->hashCode(); } }; CL_NS_END #endif