Listing 2: Reference counting class definition
///////////////////////////////////////////////////////////////////
// Copyright (c) Panos Kougiouris 1997
///////////////////////////////////////////////////////////////////
#ifndef __CKFREFERENCECOUNT_HH_
#define __CKFREFERENCECOUNT_HH_
#include <kfBase.h>
#ifdef POSIX_THREADS
#include <pthread.h>
#endif
// This class is intended as a superclass for classes
// that need reference counting. In an MT environment
// reference counting simplifies memory management.
class CKFEXPORT CKFReferenceCount {
public:
// Create a new RefernceCount with count 1
CKFReferenceCount();
// Increments the count in an atomic way
void increment();
// decrements the count in an atomic way. If the
// count reaches 0 it calls the destructor
void decrement();
int count();
protected:
virtual ~CKFReferenceCount();
#ifdef WIN32
volatile LONG m_count;
#elif defined(POSIX_THREADS)
pthread_mutex_t m_mutex;
volatile int m_count;
#else
error specify a POSIX_THREADS or WIN32
#endif
};
#endif
//End of File