www.pudn.com > 99273898StereoMatch_1_0.zip > RefCntMem.h


/////////////////////////////////////////////////////////////////////////// 
// 
// NAME 
//  RefCntMem.h -- reference-counted heap memory 
// 
// DESCRIPTION 
//  The CRefCntMem class is used to manage reference-counted 
//  dynamically allocatable memory.  This memory can be shared 
//  across many instances of the class object, provided they 
//  were created from each other through copy construction or assignment. 
// 
//  Using the class in a large memory object class such as CImage allows 
//  the including class to achieve a similar kind of memory sharing as 
//  is found in garbage collected languages such as Java and C#. 
// 
// SEE ALSO 
//  RefCntMem.cpp       implementation 
//  Image.h             class that uses a CRefCntMem object 
// 
// Copyright © Richard Szeliski, 2001. 
// See Copyright.h for more details 
// 
/////////////////////////////////////////////////////////////////////////// 
 
struct CRefCntMemPtr         // shared component of reference counted memory 
{ 
    void *m_memory;         // allocated memory 
    int m_refCnt;           // reference count 
    int m_nBytes;           // number of bytes 
    bool m_deleteWhenDone;  // delete memory when ref-count drops to 0 
    void (*m_delFn)(void *ptr); // optional delete function 
}; 
 
class CRefCntMem            // reference-counted memory allocator 
{ 
public: 
    CRefCntMem(void);           // default constructor 
    CRefCntMem(const CRefCntMem& ref);  // copy constructor 
    ~CRefCntMem(void);          // destructor 
    CRefCntMem& operator=(const CRefCntMem& ref);  // assignment 
 
    void ReAllocate(int nBytes, void *memory, bool deleteWhenDone, 
                    void (*deleteFunction)(void *ptr) = 0); 
        // allocate/deallocate memory 
    int NBytes(void);           // number of stored bytes 
    bool InBounds(int i);       // check if index is in bounds 
    void* Memory(void);         // pointer to allocated memory 
private: 
    void DecrementCount(void);  // decrement the reference count and delete if done 
    void IncrementCount(void);  // increment the reference count 
    CRefCntMemPtr *m_ptr;       // shared reference-counted memory pointer 
};