summaryrefslogtreecommitdiffstats
path: root/3rdparty/clucene/src/CLucene/search/CachingWrapperFilter.cpp
diff options
context:
space:
mode:
Diffstat (limited to '3rdparty/clucene/src/CLucene/search/CachingWrapperFilter.cpp')
-rw-r--r--3rdparty/clucene/src/CLucene/search/CachingWrapperFilter.cpp86
1 files changed, 86 insertions, 0 deletions
diff --git a/3rdparty/clucene/src/CLucene/search/CachingWrapperFilter.cpp b/3rdparty/clucene/src/CLucene/search/CachingWrapperFilter.cpp
new file mode 100644
index 000000000..694556ca7
--- /dev/null
+++ b/3rdparty/clucene/src/CLucene/search/CachingWrapperFilter.cpp
@@ -0,0 +1,86 @@
+/*------------------------------------------------------------------------------
+* 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 "CachingWrapperFilter.h"
+
+CL_NS_DEF(search)
+CL_NS_USE(index)
+CL_NS_USE(util)
+
+AbstractCachingFilter::AbstractCachingFilter():
+ cache(false,true)
+{
+}
+AbstractCachingFilter::AbstractCachingFilter(const AbstractCachingFilter& copy):
+ cache(false,true)
+{
+}
+AbstractCachingFilter::~AbstractCachingFilter(){
+}
+AbstractCachingFilter::BitSetHolder::BitSetHolder(CL_NS(util)::BitSet* bits, bool deleteBs){
+ this->bits = bits;
+ this->deleteBs = deleteBs;
+}
+AbstractCachingFilter::BitSetHolder::~BitSetHolder(){
+ if ( deleteBs )
+ _CLDELETE(bits);
+}
+
+
+BitSet* AbstractCachingFilter::bits(IndexReader* reader){
+ SCOPED_LOCK_MUTEX(cache.THIS_LOCK)
+ BitSetHolder* cached = cache.get(reader);
+ if ( cached != NULL )
+ return cached->bits;
+ BitSet* bs = doBits(reader);
+ BitSetHolder* bsh = _CLNEW BitSetHolder(bs, doShouldDeleteBitSet(bs));
+ cache.put(reader,bsh);
+ return bs;
+}
+void AbstractCachingFilter::closeCallback(CL_NS(index)::IndexReader* reader, void*){
+ SCOPED_LOCK_MUTEX(cache.THIS_LOCK)
+ cache.remove(reader);
+}
+
+
+
+
+CachingWrapperFilter::CachingWrapperFilter(Filter* filter, bool deleteFilter){
+ this->filter = filter;
+ this->deleteFilter = deleteFilter;
+}
+CachingWrapperFilter::CachingWrapperFilter(const CachingWrapperFilter& copy):
+ AbstractCachingFilter(copy)
+{
+ this->filter = copy.filter->clone();
+ this->deleteFilter = true;
+}
+Filter* CachingWrapperFilter::clone() const{
+ return _CLNEW CachingWrapperFilter(*this);
+}
+TCHAR* CachingWrapperFilter::toString(){
+ TCHAR* fs = filter->toString();
+ int len = _tcslen(fs)+23;
+ TCHAR* ret = _CL_NEWARRAY(TCHAR,len);
+ _sntprintf(ret,len,_T("CachingWrapperFilter(%s)"),fs);
+ _CLDELETE_CARRAY(fs);
+ return ret;
+}
+BitSet* CachingWrapperFilter::doBits(IndexReader* reader){
+ return filter->bits(reader);
+}
+bool CachingWrapperFilter::doShouldDeleteBitSet( CL_NS(util)::BitSet* bits ){
+ return filter->shouldDeleteBitSet(bits);
+}
+CachingWrapperFilter::~CachingWrapperFilter(){
+ if ( deleteFilter ){
+ _CLDELETE(filter);
+ }else
+ filter=NULL;
+}
+
+CL_NS_END