searchengine/cpix/cpix/inc/private/cluceneext.h
changeset 10 afe194b6b1cd
parent 0 671dee74050a
--- a/searchengine/cpix/cpix/inc/private/cluceneext.h	Wed Jun 23 19:26:19 2010 +0300
+++ b/searchengine/cpix/cpix/inc/private/cluceneext.h	Tue Jul 06 15:30:04 2010 +0300
@@ -91,6 +91,68 @@
 {
     namespace util
     {
+        /**
+         * Frees one reference out of Clucene object without desctroying it
+         * Used to pass newly created Terms for queries. Queries are allowed
+         * to take full ownership of them. 
+         */
+        template <class T>
+        inline T* freeref(T* t) {
+            t->__cl_decref(); 
+            return t; 
+        }
+		template<class T>
+		class auto_ref {
+			
+			public: 
+				/**
+				 * NOTE: Constructing auto_ref does not increased referred
+				 * item's reference count.
+				 */
+				auto_ref(T* ref) : ref_( ref ) {}
+
+				auto_ref(auto_ptr<T> ref) : ref_( ref.release() ) {}
+				
+				
+				void reset(auto_ptr<T> ref) {
+					_CLDECDELETE( ref_ ); 
+					ref_ = ref.release(); 
+				}
+
+				void reset(T* ref) {
+					_CLDECDELETE( ref_ ); 
+					ref_ = ref; 
+				}
+				
+				operator auto_ptr<T> () {
+					return auto_ptr<T>(release()); 
+				}
+
+				T* release() {
+					T* ret = ref_; 
+					ref_ = 0; 
+					return ret; 
+				}
+
+				/**
+				 * Decreases referred item's reference count
+				 */
+				~auto_ref() {
+					_CLDECDELETE( ref_ );
+				}
+
+				T* get() {
+					return ref_;
+				}
+				
+				T* operator->() {
+					return ref_; 
+				}
+				
+			private: 
+				
+				T* ref_; 
+		};
 
         /**
          * This class is almost like clucene::util::FileReader,