summaryrefslogtreecommitdiffstats
path: root/src/3rdparty/clucene/src/CLucene/search/FieldCacheImpl.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/3rdparty/clucene/src/CLucene/search/FieldCacheImpl.h')
-rw-r--r--src/3rdparty/clucene/src/CLucene/search/FieldCacheImpl.h144
1 files changed, 144 insertions, 0 deletions
diff --git a/src/3rdparty/clucene/src/CLucene/search/FieldCacheImpl.h b/src/3rdparty/clucene/src/CLucene/search/FieldCacheImpl.h
new file mode 100644
index 0000000..ac3c4ca
--- /dev/null
+++ b/src/3rdparty/clucene/src/CLucene/search/FieldCacheImpl.h
@@ -0,0 +1,144 @@
+/*------------------------------------------------------------------------------
+* 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_FieldCacheImpl_
+#define _lucene_search_FieldCacheImpl_
+
+#if defined(_LUCENE_PRAGMA_ONCE)
+# pragma once
+#endif
+
+#include "CLucene/index/IndexReader.h"
+#include "FieldCache.h"
+#include "Sort.h"
+
+
+CL_NS_DEF(search)
+
+
+/**
+ * Expert: The default cache implementation, storing all values in memory.
+ *
+ */
+class FieldCacheImpl: public FieldCache {
+public:
+ DEFINE_MUTEX(THIS_LOCK)
+
+ /** Expert: Every key in the internal cache is of this type. */
+ class FileEntry:LUCENE_BASE {
+ const TCHAR* field; // which Field
+ int32_t type; // which SortField type
+ SortComparatorSource* custom; // which custom comparator
+ size_t _hashCode;
+ public:
+ /** Creates one of these objects. */
+ FileEntry (const TCHAR* field, int32_t type);
+
+ /** Creates one of these objects for a custom comparator. */
+ FileEntry (const TCHAR* field, SortComparatorSource* custom);
+ ~FileEntry();
+
+ int32_t getType() const{ return type; }
+
+ /** Two of these are equal iff they reference the same field and type. */
+ bool equals (FileEntry* other) const;
+
+ /** Composes a hashcode based on the field and type. */
+ size_t hashCode();
+
+ int32_t compareTo(const FileEntry* other) const;
+
+ class Compare:LUCENE_BASE, public CL_NS(util)::Compare::_base //<Term*>
+ {
+ public:
+ bool operator()( FileEntry* f1, FileEntry* f2 ) const{
+ return ( f1->compareTo(f2) < 0 );
+ }
+ size_t operator()( FileEntry* t ) const{
+ return t->hashCode();
+ }
+ };
+ class Equals:LUCENE_BASE, public CL_NS(util)::Compare::_base //<Term*>
+ {
+ public:
+ bool operator()( FileEntry* f1, FileEntry* f2 ) const{
+ return ( f1->compareTo(f2) == 0 );
+ }
+ };
+ };
+
+ FieldCacheImpl();
+ ~FieldCacheImpl();
+private:
+
+ ///the type that is stored in the field cache. can't use a typedef because
+ ///the decorated name would become too long
+ class fieldcacheCacheReaderType: public CL_NS(util)::CLHashMap<FileEntry*,
+ FieldCacheAuto*,
+ FileEntry::Compare,
+ FileEntry::Equals,
+ CL_NS(util)::Deletor::Object<FileEntry>,
+ CL_NS(util)::Deletor::Object<FieldCacheAuto> >{
+ public:
+ fieldcacheCacheReaderType();
+ ~fieldcacheCacheReaderType();
+ };
+
+ //note: typename gets too long if using cacheReaderType as a typename
+ typedef CL_NS(util)::CLHashMap<CL_NS(index)::IndexReader*,
+ fieldcacheCacheReaderType*,
+ CL_NS(util)::Compare::Void<CL_NS(index)::IndexReader>,
+ CL_NS(util)::Equals::Void<CL_NS(index)::IndexReader>,
+ CL_NS(util)::Deletor::Object<CL_NS(index)::IndexReader>,
+ CL_NS(util)::Deletor::Object<fieldcacheCacheReaderType> > fieldcacheCacheType;
+
+ /** The internal cache. Maps FileEntry to array of interpreted term values. **/
+ //todo: make indexreader remove itself from here when the reader is shut
+ fieldcacheCacheType cache;
+
+ /** See if an object is in the cache. */
+ FieldCacheAuto* lookup (CL_NS(index)::IndexReader* reader, const TCHAR* field, int32_t type) ;
+
+ /** See if a custom object is in the cache. */
+ FieldCacheAuto* lookup (CL_NS(index)::IndexReader* reader, const TCHAR* field, SortComparatorSource* comparer);
+
+ /** Put an object into the cache. */
+ void store (CL_NS(index)::IndexReader* reader, const TCHAR* field, int32_t type, FieldCacheAuto* value);
+
+ /** Put a custom object into the cache. */
+ void store (CL_NS(index)::IndexReader* reader, const TCHAR* field, SortComparatorSource* comparer, FieldCacheAuto* value);
+
+public:
+
+ // inherit javadocs
+ FieldCacheAuto* getInts (CL_NS(index)::IndexReader* reader, const TCHAR* field);
+
+ // inherit javadocs
+ FieldCacheAuto* getFloats (CL_NS(index)::IndexReader* reader, const TCHAR* field);
+
+ // inherit javadocs
+ FieldCacheAuto* getStrings (CL_NS(index)::IndexReader* reader, const TCHAR* field);
+
+ // inherit javadocs
+ FieldCacheAuto* getStringIndex (CL_NS(index)::IndexReader* reader, const TCHAR* field);
+
+ // inherit javadocs
+ FieldCacheAuto* getAuto (CL_NS(index)::IndexReader* reader, const TCHAR* field);
+
+ // inherit javadocs
+ FieldCacheAuto* getCustom (CL_NS(index)::IndexReader* reader, const TCHAR* field, SortComparator* comparator);
+
+
+ /**
+ * Callback for when IndexReader closes. This causes
+ * any cache to be removed for the specified reader.
+ */
+ static void closeCallback(CL_NS(index)::IndexReader* reader, void* fieldCacheImpl);
+};
+
+
+CL_NS_END
+#endif