/usr/include/dcmtk/dcmimgle/diobjcou.h is in libdcmtk-dev 3.6.1~20160216-4.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 | /*
*
* Copyright (C) 1996-2011, OFFIS e.V.
* All rights reserved. See COPYRIGHT file for details.
*
* This software and supporting documentation were developed by
*
* OFFIS e.V.
* R&D Division Health
* Escherweg 2
* D-26121 Oldenburg, Germany
*
*
* Module: dcmimgle
*
* Author: Joerg Riesmeier
*
* Purpose: DicomObjectCounter (Header)
*
*/
#ifndef DIOBJCOU_H
#define DIOBJCOU_H
#include "dcmtk/config/osconfig.h"
#ifdef WITH_THREADS
#include "dcmtk/ofstd/ofthread.h"
#endif
#include "dcmtk/dcmimgle/didefine.h"
/*---------------------*
* class declaration *
*---------------------*/
/** Class to count number of instances (objects created from a certain class).
* used to manage more than one reference to an object in a secure way.
*/
class DCMTK_DCMIMGLE_EXPORT DiObjectCounter
{
public:
/** add a reference.
* Increase the internal counter by 1.
*/
inline void addReference()
{
#ifdef WITH_THREADS
theMutex.lock();
#endif
++Counter;
#ifdef WITH_THREADS
theMutex.unlock();
#endif
}
/** remove a reference.
* Decrease the internal counter by 1 and delete the object only if the counter is zero.
*/
inline void removeReference()
{
#ifdef WITH_THREADS
theMutex.lock();
#endif
if (--Counter == 0)
{
#ifdef WITH_THREADS
theMutex.unlock();
#endif
delete this;
#ifdef WITH_THREADS
} else {
theMutex.unlock();
#endif
}
}
protected:
/** constructor.
* Internal counter is initialized with 1.
*/
DiObjectCounter()
: Counter(1)
#ifdef WITH_THREADS
,theMutex()
#endif
{
}
/** destructor
*/
virtual ~DiObjectCounter()
{
}
private:
/// internal counter
unsigned long Counter;
#ifdef WITH_THREADS
/** if compiled for multi-thread operation, the Mutex protecting
* access to the value of this object.
*/
OFMutex theMutex;
#endif
};
#endif
|