blob: 2eecc9b01085514c2f77bc56c95f14b72d79f3be [file] [log] [blame]
/*------------------------------------------------------------------------------
* 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_debug_lucenebase_
#define _lucene_debug_lucenebase_
#ifdef _LUCENE_PRAGMA_ONCE
# pragma once
#endif
CL_NS_DEF(debug)
//Lucenebase is the superclass of all clucene objects. It provides
//memory debugging tracking and/or reference counting
class LuceneBase{
public:
#ifdef LUCENE_ENABLE_MEMLEAKTRACKING
static void* operator new (size_t size);
static void operator delete (void *p);
int32_t __cl_initnum; ///< The order that the object was created at. This is then used to do a lookup in the objects list
static void* operator new (size_t size, char const * file, int32_t line);
static void operator delete (void *p, char const * file, int32_t line);
static void* __cl_voidpadd(void* data, const char* file, int line, size_t size); ///<add arbitary data to the lucenbase_list and returns the same data
static void __cl_voidpremove(const void* data, const char* file, int line);///<remove arbitary data to the lucenbase_list
static void __cl_unregister(const void* obj); ///<un register object from the mem leak and ref count system
static int32_t __cl_GetUnclosedObjectsCount(); ///< gets the number of unclosed objects
static const char* __cl_GetUnclosedObject(int32_t item); ///< get the name of the nth unclosed object
static char* __cl_GetUnclosedObjects(); ///< get a string with the names of the unclosed objects
static void __cl_PrintUnclosedObjects(); ///< print unclosed objects to the stdout
///This will clear memory relating to refcounting
///other tools can be used to more accurately identify
///memory leaks. This should only be called just
///before closing, and after retrieving the
///unclosed object list
static void __cl_ClearMemory();
#endif //LUCENE_ENABLE_MEMLEAKTRACKING
int __cl_refcount;
LuceneBase(){
__cl_refcount=1;
}
inline int __cl_getref(){
return __cl_refcount;
}
inline int __cl_addref(){
__cl_refcount++;
return __cl_refcount;
}
inline int __cl_decref(){
__cl_refcount--;
return __cl_refcount;
}
virtual ~LuceneBase(){};
};
class LuceneVoidBase{
public:
#ifdef _DEBUG
//a compile time check to make sure that _CLDELETE and _CLDECDELETE is being
//used correctly.
int dummy__see_mem_h_for_details;
#endif
virtual ~LuceneVoidBase(){};
};
CL_NS_END
#endif //_lucene_debug_lucenebase_