/usr/include/dcmtk/dcmdata/dcdicdir.h is in libdcmtk-dev 3.6.2-3build3.
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 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 | /*
*
* Copyright (C) 1994-2014, 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: dcmdata
*
* Author: Gerd Ehlers, Andreas Barth
*
* Purpose: Interface of class DcmDicomDir
*
*/
#ifndef DCDICDIR_H
#define DCDICDIR_H
#include "dcmtk/config/osconfig.h" /* make sure OS specific configuration is included first */
#include "dcmtk/ofstd/ofmap.h"
#include "dcmtk/dcmdata/dcdirrec.h"
#include "dcmtk/dcmdata/dcvrulup.h"
#define DEFAULT_DICOMDIR_NAME "DICOMDIR"
#define DICOMDIR_BACKUP_SUFFIX ".$$$"
#define DICOMDIR_TEMP_SUFFIX ".tmp"
#define DICOMDIR_DEFAULT_TRANSFERSYNTAX EXS_LittleEndianExplicit
/** helper structure for item offsets
*/
typedef struct
{
/// DICOM item containing a directory record
DcmItem *item;
/// offset in file for this item
Uint32 fileOffset;
} ItemOffset;
/** this class implements support for DICOMDIR files, which are special DICOM files
* containing a list of directory records, with a logical tree structure being
* implemented through references between records as byte offsets in file.
*/
class DCMTK_DCMDATA_EXPORT DcmDicomDir
{
public:
/// default constructor
DcmDicomDir();
/** constructor
* @param fileName filename to read a DICOMDIR from. If empty, an attempt is
* made to read file DEFAULT_DICOMDIR_NAME ("DICOMDIR").
* @param fileSetID file set ID of this file set, used only for new DICOMDIRs
*/
DcmDicomDir( const OFFilename &fileName,
const char *fileSetID = NULL ); // only used for new DICOMDIR
/// destructor. If DICOMDIR was modified, writes new file.
virtual ~DcmDicomDir();
/** print all elements of the item to a stream
* @param out output stream
* @param flags optional flag used to customize the output (see DCMTypes::PF_xxx)
* @param level current level of nested items. Used for indentation.
* @param pixelFileName not used
* @param pixelCounter not used
*/
virtual void print(STD_NAMESPACE ostream&out,
const size_t flags = 0,
const int level = 0,
const char *pixelFileName = NULL,
size_t *pixelCounter = NULL);
/// returns current status flag
virtual OFCondition error();
/** returns reference to DICOM file from which DICOMDIR was read.
* Note, this file may be obsolete if the DICOMDIR was modified
* @return reference to DICOM file
*/
virtual DcmFileFormat& getDirFileFormat();
/** returns file name from which DICOMDIR was read.
* @return filename of DICOMDIR
*/
virtual const OFFilename &getDirFileName();
/// returns root directory record
virtual DcmDirectoryRecord& getRootRecord();
/// returns container in which all MRDR (multi-reference directory records) are stored
virtual DcmSequenceOfItems& getMRDRSequence();
/** look up directory record for the given referenced file ID (not OS file path)
* @return directory record if found, NULL otherwise
*/
virtual DcmDirectoryRecord* matchFilename( const char *filename );
/** look up MRDR for the given referenced file ID (not OS file path).
* If there is none yet, create one.
* @return MRDR for given referenced file ID
*/
virtual DcmDirectoryRecord* matchOrCreateMRDR( const char *filename );
/** writes DICOMDIR to file
* @param oxfer must be DICOMDIR_DEFAULT_TRANSFERSYNTAX
* @param enctype encoding type for sequences
* @param glenc encoding type for group lengths
* @return status, EC_Normal if value length is correct, an error code otherwise
*/
virtual OFCondition write(
const E_TransferSyntax oxfer = DICOMDIR_DEFAULT_TRANSFERSYNTAX,
const E_EncodingType enctype = EET_UndefinedLength,
const E_GrpLenEncoding glenc = EGL_withoutGL );
/** check the currently stored element value
* @param autocorrect correct value length if OFTrue
* @return status, EC_Normal if value length is correct, an error code otherwise
*/
virtual OFCondition verify( OFBool autocorrect = OFFalse );
protected:
// Manipulation of member variables
OFCondition createNewElements(const char* fileSetID); // in
DcmDataset& getDataset(void);
// side-effect free methods for manipulation and conversion
DcmSequenceOfItems& getDirRecSeq( DcmDataset &dset ); // inout
DcmUnsignedLongOffset* lookForOffsetElem( DcmObject *obj, // in
const DcmTagKey &offsetTag ); // in
DcmDirectoryRecord* recurseMatchFile( DcmDirectoryRecord* startRec, // in
const char *filename ); // in
DcmDirectoryRecord* searchMatchFile( DcmSequenceOfItems& recSeq, // in
const char *filename ); // in
OFCondition resolveGivenOffsets( DcmObject *startPoint, // inout
const OFMap<Uint32, DcmDirectoryRecord *> &itOffsets, // in
const DcmTagKey &offsetTag ); // in
OFCondition resolveAllOffsets( DcmDataset &dset ); // inout
OFCondition linkMRDRtoRecord( DcmDirectoryRecord *dRec ); // inout
OFCondition moveRecordToTree( DcmDirectoryRecord *startRec, // in
DcmSequenceOfItems &fromDirSQ, // inout
DcmDirectoryRecord *toRecord ); // inout
OFCondition moveMRDRbetweenSQs( DcmSequenceOfItems &fromSQ, // in
DcmSequenceOfItems &toDirSQ ); // inout
Uint32 lengthUntilSQ( DcmDataset &dset, // in
E_TransferSyntax oxfer, // in
E_EncodingType enctype ); // in
Uint32 lengthOfRecord( DcmItem *item, // in
E_TransferSyntax oxfer, // in
E_EncodingType enctype ); // in
OFCondition convertGivenPointer( DcmObject *startPoint, // inout
const DcmTagKey &offsetTag ); // in
OFCondition convertAllPointer( DcmDataset &dset, // inout
Uint32 beginOfFileSet, // in
E_TransferSyntax oxfer, // in
E_EncodingType enctype ); // in
OFCondition copyRecordPtrToSQ( DcmDirectoryRecord *record, // in
DcmSequenceOfItems &toDirSQ, // inout
DcmDirectoryRecord **firstRec, // out
DcmDirectoryRecord **lastRec ); // out
OFCondition insertMediaSOPUID( DcmMetaInfo &metaInfo ); // inout
OFCondition countMRDRRefs( DcmDirectoryRecord *startRec, // in
ItemOffset *refCounter, // inout
const unsigned long numCounters ); // in
OFCondition checkMRDRRefCounter( DcmDirectoryRecord *startRec, // in
ItemOffset *refCounter, // inout
const unsigned long numCounters ); // in
// complete re-organization of the managed directory records (side effect)
OFCondition convertLinearToTree();
OFCondition convertTreeToLinear( Uint32 beginOfFileSet, // in
E_TransferSyntax oxfer, // in
E_EncodingType enctype, // in
E_GrpLenEncoding glenc, // in
DcmSequenceOfItems &unresRecs);// inout
private:
/// private undefined copy assignment operator
DcmDicomDir &operator=(const DcmDicomDir &);
/// private undefined copy constructor
DcmDicomDir( const DcmDicomDir &newDir );
/// condition flag
OFCondition errorFlag;
/// file name the DICOMDIR was read from, or DEFAULT_DICOMDIR_NAME
OFFilename dicomDirFileName;
/** flag indicating whether or not this DICOMDIR has been modified after being read from file.
* If true, the destructor of this class will write the modified DICOMDIR back to file
*/
OFBool modified;
/// flag indicating whether the DICOM file in DirFile needs to be re-created upon writing
OFBool mustCreateNewDir;
/** DICOM file into which a DICOMDIR is read first before the logical tree
* structure is created.
*/
DcmFileFormat * DirFile;
/// root directory record of this DICOMDIR
DcmDirectoryRecord * RootRec;
/// container in which all MRDR (multi-reference directory records) for this DICOMDIR are kept
DcmSequenceOfItems * MRDRSeq;
};
#endif // DCDICDIR_H
|