summaryrefslogtreecommitdiffstats
path: root/3rdparty/clucene/src/CLucene/index/Term.cpp
diff options
context:
space:
mode:
Diffstat (limited to '3rdparty/clucene/src/CLucene/index/Term.cpp')
-rw-r--r--3rdparty/clucene/src/CLucene/index/Term.cpp182
1 files changed, 182 insertions, 0 deletions
diff --git a/3rdparty/clucene/src/CLucene/index/Term.cpp b/3rdparty/clucene/src/CLucene/index/Term.cpp
new file mode 100644
index 000000000..5ff7bb264
--- /dev/null
+++ b/3rdparty/clucene/src/CLucene/index/Term.cpp
@@ -0,0 +1,182 @@
+/*------------------------------------------------------------------------------
+* 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.
+*
+* Changes are Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+------------------------------------------------------------------------------*/
+
+#include "CLucene/StdHeader.h"
+#include "Term.h"
+#include "CLucene/util/StringIntern.h"
+
+CL_NS_USE(util)
+CL_NS_DEF(index)
+
+Term::Term()
+{
+ init();
+}
+
+Term::Term(const TCHAR* fld, const TCHAR* txt, bool internField)
+{
+ init();
+ set(fld, txt, internField);
+}
+
+Term::Term(const Term* fieldTerm, const TCHAR* txt)
+{
+ init();
+ set(fieldTerm, txt);
+}
+
+Term::Term(const TCHAR* fld, const TCHAR* txt)
+{
+ init();
+ set(fld, txt);
+}
+
+Term::~Term()
+{
+ if (internF)
+ CLStringIntern::unintern(_field);
+ _field = NULL;
+
+#ifndef LUCENE_TERM_TEXT_LENGTH
+ if (_text != LUCENE_BLANK_STRING)
+ _CLDELETE_CARRAY(_text);
+#endif
+}
+
+const TCHAR* Term::field() const
+{
+ return _field;
+}
+
+const TCHAR* Term::text() const
+{
+ return _text;
+}
+
+void Term::set(const Term* term, const TCHAR* txt)
+{
+ set(term->field(), txt, false);
+}
+
+void Term::set(const TCHAR* fld, const TCHAR* txt,bool internField)
+{
+ CND_PRECONDITION(fld != NULL, "fld contains NULL");
+ CND_PRECONDITION(txt != NULL, "txt contains NULL");
+
+ //save field for unintern later
+ const TCHAR* oldField = _field;
+ cachedHashCode = 0;
+ textLen = _tcslen(txt);
+
+ //Delete text if it is the owner
+#ifdef LUCENE_TERM_TEXT_LENGTH
+ if (textLen > LUCENE_TERM_TEXT_LENGTH)
+ textLen = LUCENE_TERM_TEXT_LENGTH;
+
+ _tcsncpy(_text,txt,textLen+1);
+ _text[textLen]=0;
+#else
+ //if the term text buffer is bigger than what we have
+ if (_text && textLen > textLenBuf) {
+ if (_text != LUCENE_BLANK_STRING) {
+ _CLDELETE_ARRAY(_text);
+ } else {
+ _text = NULL;
+ }
+ textLenBuf = 0;
+ }
+
+ if (_text == LUCENE_BLANK_STRING) {
+ _text = LUCENE_BLANK_STRING;
+ } else if (_text == NULL) {
+ if (txt[0] == 0) {
+ //if the string is blank and we aren't re-using the buffer...
+ _text = LUCENE_BLANK_STRING;
+ } else {
+ //duplicate the text
+ _text = stringDuplicate(txt);
+ textLenBuf = textLen;
+ }
+ } else {
+ //re-use the buffer
+ _tcscpy(_text,txt);
+ }
+#endif
+
+ //Set Term Field
+ if (internField) {
+ _field = CLStringIntern::intern(fld CL_FILELINE);
+ } else {
+ _field = fld;
+ }
+
+ //unintern old field after interning new one,
+ if (internF)
+ CLStringIntern::unintern(oldField);
+ internF = internField;
+
+ CND_PRECONDITION(_tcscmp(fld, _field) == 0, "field not equal");
+}
+
+bool Term::equals(const Term* other) const
+{
+ if (cachedHashCode != 0 && other->cachedHashCode != 0
+ && other->cachedHashCode != cachedHashCode)
+ return false;
+
+ if (_field == other->_field) {
+ if (textLen == other->textLen)
+ return (_tcscmp(_text, other->_text) == 0);
+ return false;
+ }
+
+ return false;
+}
+
+size_t Term::hashCode()
+{
+ if (cachedHashCode == 0)
+ cachedHashCode = Misc::thashCode(_field) + Misc::thashCode(_text, textLen);
+
+ return cachedHashCode;
+}
+
+int32_t Term::compareTo(const Term* other) const
+{
+ //Check ret to see if text needs to be compared
+ if (_field == other->_field)
+ return _tcscmp(_text, other->_text);
+
+ int32_t ret = _tcscmp(_field, other->_field);
+ if (ret == 0)
+ ret = _tcscmp(_text, other->_text);
+ return ret;
+}
+
+TCHAR* Term::toString() const
+{
+ return CL_NS(util)::Misc::join(_field, _T(":"), _text);
+}
+
+void Term::init()
+{
+ textLen = 0;
+ internF = false;
+ cachedHashCode = 0;
+ _field = LUCENE_BLANK_STRING;
+
+#ifdef LUCENE_TERM_TEXT_LENGTH
+ _text[0] = 0;
+#else
+ _text = LUCENE_BLANK_STRING;
+ textLenBuf = 0;
+#endif
+}
+
+CL_NS_END