/usr/include/dcmtk/dcmdata/dcdicdir.h is in libdcmtk2-dev 3.6.0-15.
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 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 | /*
*
* Copyright (C) 1994-2010, 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
*
* Last Update: $Author: uli $
* Update Date: $Date: 2010-11-15 13:58:43 $
* CVS/RCS Revision: $Revision: 1.28 $
* Status: $State: Exp $
*
* CVS/RCS Log at end of file
*
*/
#ifndef DCDICDIR_H
#define DCDICDIR_H
#include "dcmtk/config/osconfig.h" /* make sure OS specific configuration is included first */
#include "dcmtk/dcmdata/dcdirrec.h"
#include "dcmtk/dcmdata/dcvrulup.h"
#define DEFAULT_DICOMDIR_NAME "DICOMDIR"
#define TEMPNAME_TEMPLATE "DDXXXXXX"
#define DICOMDIR_BACKUP_SUFFIX ".$$$"
#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 DcmDicomDir
{
public:
/// default constructor
DcmDicomDir();
/** constructor
* @param fileName filename to read a DICOMDIR from. If NULL, 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 char *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 char* 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
ItemOffset *itOffsets, // in
const unsigned long numOffsets, // 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
ItemOffset *itOffsets, // in
const unsigned long numOffsets, // in
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
char * 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
/*
** CVS/RCS Log:
** $Log: dcdicdir.h,v $
** Revision 1.28 2010-11-15 13:58:43 uli
** Fixed some errors in doxygen comments.
**
** Revision 1.27 2010-10-14 13:15:40 joergr
** Updated copyright header. Added reference to COPYRIGHT file.
**
** Revision 1.26 2010-08-18 15:13:26 joergr
** Added const specifier to char pointers where appropriate. Thanks to forum
** user "takeos" for the report.
**
** Revision 1.25 2010-03-01 09:08:44 uli
** Removed some unnecessary include directives in the headers.
**
** Revision 1.24 2010-02-22 11:39:53 uli
** Remove some unneeded includes.
**
** Revision 1.23 2009-11-04 09:58:07 uli
** Switched to logging mechanism provided by the "new" oflog module
**
** Revision 1.22 2007-11-29 14:30:19 meichel
** Write methods now handle large raw data elements (such as pixel data)
** without loading everything into memory. This allows very large images to
** be sent over a network connection, or to be copied without ever being
** fully in memory.
**
** Revision 1.21 2007/06/29 14:17:49 meichel
** Code clean-up: Most member variables in module dcmdata are now private,
** not protected anymore.
**
** Revision 1.20 2006/08/15 15:49:56 meichel
** Updated all code in module dcmdata to correctly compile when
** all standard C++ classes remain in namespace std.
**
** Revision 1.19 2005/12/08 16:28:07 meichel
** Changed include path schema for all DCMTK header files
**
** Revision 1.18 2005/11/07 16:59:24 meichel
** Cleaned up some copy constructors in the DcmObject hierarchy.
**
** Revision 1.17 2003/08/14 09:00:56 meichel
** Adapted type casts to new-style typecast operators defined in ofcast.h
**
** Revision 1.16 2002/12/06 12:49:09 joergr
** Enhanced "print()" function by re-working the implementation and replacing
** the boolean "showFullData" parameter by a more general integer flag.
** Added doc++ documentation.
** Made source code formatting more consistent with other modules/files.
**
** Revision 1.15 2001/09/25 17:19:25 meichel
** Adapted dcmdata to class OFCondition
**
** Revision 1.14 2001/06/01 15:48:36 meichel
** Updated copyright header
**
** Revision 1.13 2000/04/14 15:31:31 meichel
** Removed default value from output stream passed to print() method.
** Required for use in multi-thread environments.
**
** Revision 1.12 2000/03/08 16:26:12 meichel
** Updated copyright header.
**
** Revision 1.11 2000/03/03 14:05:23 meichel
** Implemented library support for redirecting error messages into memory
** instead of printing them to stdout/stderr for GUI applications.
**
** Revision 1.10 2000/02/10 10:50:50 joergr
** Added new feature to dcmdump (enhanced print method of dcmdata): write
** pixel data/item value fields to raw files.
**
** Revision 1.9 1999/03/31 09:24:34 meichel
** Updated copyright header in module dcmdata
**
** Revision 1.8 1998/07/15 15:48:44 joergr
** Removed several compiler warnings reported by gcc 2.8.1 with
** additional options, e.g. missing copy constructors and assignment
** operators, initialization of member variables in the body of a
** constructor instead of the member initialization list, hiding of
** methods by use of identical names, uninitialized member variables,
** missing const declaration of char pointers. Replaced tabs by spaces.
**
** Revision 1.7 1997/09/11 15:02:16 hewett
** Changed DcmDicomDir constructor to take const char* arguments.
**
** Revision 1.6 1997/07/21 08:25:06 andreas
** - Replace all boolean types (BOOLEAN, CTNBOOLEAN, DICOM_BOOL, BOOL)
** with one unique boolean type OFBool.
**
** Revision 1.5 1997/05/16 08:31:19 andreas
** - Revised handling of GroupLength elements and support of
** DataSetTrailingPadding elements. The enumeratio E_GrpLenEncoding
** got additional enumeration values (for a description see dctypes.h).
** addGroupLength and removeGroupLength methods are replaced by
** computeGroupLengthAndPadding. To support Padding, the parameters of
** element and sequence write functions changed.
**
** Revision 1.4 1997/04/24 12:08:28 hewett
** Fixed DICOMDIR generation bug affecting inclusion of Group Length
** attributes (file offsets were not being computed correctly).
**
** Revision 1.3 1996/08/05 08:45:18 andreas
** new print routine with additional parameters:
** - print into files
** - fix output length for elements
** corrected error in search routine with parameter ESM_fromStackTop
**
** Revision 1.2 1996/01/05 13:22:54 andreas
** - changed to support new streaming facilities
** - more cleanups
** - merged read / write methods for block and file transfer
**
*/
|