DYT/Tool/3rdParty_x64/include/dcmtk/dcmqrdb/dcmqridx.h
2024-11-22 23:19:31 +08:00

390 lines
13 KiB
C++

/*
*
* Copyright (C) 1993-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: dcmqrdb
*
* Author: Marco Eichelberg / Didier Lemoine / Gilles Mevel
*
* Purpose: enums and structures used for the database index file
*
*/
#ifndef DATAPRIV_H
#define DATAPRIV_H
#include "dcmtk/config/osconfig.h" /* make sure OS specific configuration is included first */
#include "dcmtk/dcmnet/dicom.h"
#include "dcmtk/dcmdata/dcdatset.h"
#include "dcmtk/dcmdata/dcuid.h"
#include "dcmtk/dcmdata/dcdeftag.h"
#include "dcmtk/dcmqrdb/dcmqrdbi.h"
BEGIN_EXTERN_C
#ifdef HAVE_IO_H
#define access my_access // Workaround to make Visual C++ Compiler happy!
#include <io.h>
#undef access
#endif
END_EXTERN_C
/** types of query keys
*/
enum DB_KEY_TYPE
{
/// unique key
UNIQUE_KEY,
/// required key
REQUIRED_KEY,
/// optional key
OPTIONAL_KEY
};
/** query models
*/
enum DB_QUERY_CLASS
{
/// patient root Q/R model
PATIENT_ROOT,
/// study root Q/R model
STUDY_ROOT,
/// patient/study only Q/R model
PATIENT_STUDY
};
/** types of database keys
*/
enum DB_KEY_CLASS
{
/// a date entry
DATE_CLASS,
/// a time entry
TIME_CLASS,
/// a UID entry
UID_CLASS,
/// a string entry
STRING_CLASS,
/// an entry not belonging to any other class
OTHER_CLASS
};
/** Level Strings
*/
#define PATIENT_LEVEL_STRING "PATIENT"
#define STUDY_LEVEL_STRING "STUDY"
#define SERIE_LEVEL_STRING "SERIES"
#define IMAGE_LEVEL_STRING "IMAGE"
/*
** Maximum size of things to put in db records.
** Some values will have vm>1 thus these maximums are
** intended to leave enough space for most common uses.
*/
#define AE_MAX_LENGTH 128 /* Application Entity */
#define AS_MAX_LENGTH 32 /* Age String */
#define AT_MAX_LENGTH 32 /* Attribute Tag */
#define CS_MAX_LENGTH 128 /* Code String */
#define DA_MAX_LENGTH 80 /* Date */
#define DS_MAX_LENGTH 128 /* Decimal String */
#define DT_MAX_LENGTH 208 /* Date Time */
#define FL_MAX_LENGTH 32 /* FLoating point single */
#define FD_MAX_LENGTH 64 /* Floating point Double */
#define IS_MAX_LENGTH 96 /* Integer String */
#define LO_MAX_LENGTH 64 /* Long String */
#define LT_MAX_LENGTH 10240 /* Long Text */
#define PN_MAX_LENGTH 64 /* Person Name */
#define SH_MAX_LENGTH 16 /* Short String */
#define SL_MAX_LENGTH 32 /* Signed Long */
#define SS_MAX_LENGTH 16 /* Signed Short */
#define ST_MAX_LENGTH 1024 /* Short Text */
#define TM_MAX_LENGTH 128 /* Time */
#define UI_MAX_LENGTH 64 /* Unique Identifier */
#define UL_MAX_LENGTH 32 /* Unsigned Long */
#define US_MAX_LENGTH 16 /* Unsigned Short */
#define CS_LABEL_MAX_LENGTH 16 /* Code String - Presentation Label */
#define DESCRIPTION_MAX_LENGTH 128 /* Not related to any particular DICOM attribute */
#define DBC_MAXSTRING 256
#define MAX_MAX_STUDIES DB_UpperMaxStudies
#define MAX_NUMBER_OF_IMAGES 10000
#define SIZEOF_IDXRECORD (sizeof (IdxRecord))
#define SIZEOF_STUDYDESC (sizeof (StudyDescRecord) * MAX_MAX_STUDIES)
/** this class provides a primitive interface for handling a flat DICOM element,
* similar to DcmElement, but only for use within the database module
*/
struct DCMTK_DCMQRDB_EXPORT DB_SmallDcmElmt
{
public:
/// default constructor
DB_SmallDcmElmt();
/// pointer to the value field
char* PValueField ;
/// value length in bytes
Uint32 ValueLength ;
/// attribute tag
DcmTagKey XTag ;
private:
/// private undefined copy constructor
DB_SmallDcmElmt(const DB_SmallDcmElmt& copy);
/// private undefined copy assignment operator
DB_SmallDcmElmt& operator=(const DB_SmallDcmElmt& copy);
};
/** this class provides a primitive interface for handling a list of flat DICOM elements,
* similar to DcmItem, but only for use within the database module
*/
struct DCMTK_DCMQRDB_EXPORT DB_ElementList
{
/// default constructor
DB_ElementList(): elem(), next(NULL) {}
/// current list element
DB_SmallDcmElmt elem ;
/// pointer to next in list
struct DB_ElementList *next ;
private:
/// private undefined copy constructor
DB_ElementList(const DB_ElementList& copy);
/// private undefined copy assignment operator
DB_ElementList& operator=(const DB_ElementList& copy);
};
struct DCMTK_DCMQRDB_EXPORT DB_UidList
{
char *patient ;
char *study ;
char *serie ;
char *image ;
struct DB_UidList *next ;
};
struct DCMTK_DCMQRDB_EXPORT DB_CounterList
{
int idxCounter ;
struct DB_CounterList *next ;
};
struct DCMTK_DCMQRDB_EXPORT DB_FindAttr
{
DcmTagKey tag ;
DB_LEVEL level ;
DB_KEY_TYPE keyAttr ;
DB_KEY_CLASS keyClass ;
/* to passify some C++ compilers */
DB_FindAttr(const DcmTagKey& t, DB_LEVEL l, DB_KEY_TYPE kt, DB_KEY_CLASS kc)
: tag(t), level(l), keyAttr(kt), keyClass(kc) { }
};
struct DCMTK_DCMQRDB_EXPORT DB_Private_Handle
{
int pidx ;
DB_ElementList *findRequestList ;
DB_ElementList *findResponseList ;
DB_LEVEL queryLevel ;
char indexFilename[DBC_MAXSTRING+1] ;
char storageArea[DBC_MAXSTRING+1] ;
long maxBytesPerStudy ;
long maxStudiesAllowed ;
int idxCounter ;
DB_CounterList *moveCounterList ;
int NumberRemainOperations ;
DB_QUERY_CLASS rootLevel ;
DB_UidList *uidList ;
DB_Private_Handle()
: pidx(0)
, findRequestList(NULL)
, findResponseList(NULL)
, queryLevel(STUDY_LEVEL)
// , indexFilename()
// , storageArea()
, maxBytesPerStudy(0)
, maxStudiesAllowed(0)
, idxCounter(0)
, moveCounterList(NULL)
, NumberRemainOperations(0)
, rootLevel(STUDY_ROOT)
, uidList(NULL)
{
}
};
/** this struct defines the structure of each "Study Record" in the index.dat
* file maintained by this module. A Study Record is a direct binary copy
* of an instance of this struct.
*/
struct DCMTK_DCMQRDB_EXPORT StudyDescRecord
{
/// Study Instance UID of the study described by this record
char StudyInstanceUID [UI_MAX_LENGTH+1] ;
/// combined size (in bytes) of all images of this study in the database
long StudySize ;
/// timestamp for last update of this study. Format: output of time(2) converted to double.
double LastRecordedDate ;
/// number of images of this study in the database
int NumberofRegistratedImages ;
};
struct DCMTK_DCMQRDB_EXPORT ImagesofStudyArray
{
int idxCounter ;
double RecordedDate ;
long ImageSize ;
};
/* the following constants define which array element
* of the param[] array in the IdxRecord structure
* is linked to which value field in the IdxRecord.
* numbers must be continuous, starting with 0.
*
* The constant NBPARAMETERS must contain the number
* of array elements to be referenced in param[]
* (= highest index +1)
*/
#define RECORDIDX_PatientBirthDate 0
#define RECORDIDX_PatientSex 1
#define RECORDIDX_PatientName 2
#define RECORDIDX_PatientID 3
#define RECORDIDX_PatientBirthTime 4
#define RECORDIDX_OtherPatientIDs 5
#define RECORDIDX_OtherPatientNames 6
#define RECORDIDX_EthnicGroup 7
#define RECORDIDX_NumberofPatientRelatedStudies 8
#define RECORDIDX_NumberofPatientRelatedSeries 9
#define RECORDIDX_NumberofPatientRelatedInstances 10
#define RECORDIDX_StudyDate 11
#define RECORDIDX_StudyTime 12
#define RECORDIDX_StudyID 13
#define RECORDIDX_StudyDescription 14
#define RECORDIDX_NameOfPhysiciansReadingStudy 15
#define RECORDIDX_AccessionNumber 16
#define RECORDIDX_ReferringPhysicianName 17
#define RECORDIDX_ProcedureDescription 18
#define RECORDIDX_AttendingPhysiciansName 19
#define RECORDIDX_StudyInstanceUID 20
#define RECORDIDX_OtherStudyNumbers 21
#define RECORDIDX_AdmittingDiagnosesDescription 22
#define RECORDIDX_PatientAge 23
#define RECORDIDX_PatientSize 24
#define RECORDIDX_PatientWeight 25
#define RECORDIDX_Occupation 26
#define RECORDIDX_NumberofStudyRelatedSeries 27
#define RECORDIDX_NumberofStudyRelatedInstances 28
#define RECORDIDX_SeriesNumber 29
#define RECORDIDX_SeriesInstanceUID 30
#define RECORDIDX_Modality 31
#define RECORDIDX_ImageNumber 32
#define RECORDIDX_SOPInstanceUID 33
#define RECORDIDX_SeriesDate 34
#define RECORDIDX_SeriesTime 35
#define RECORDIDX_SeriesDescription 36
#define RECORDIDX_ProtocolName 37
#define RECORDIDX_OperatorsName 38
#define RECORDIDX_PerformingPhysicianName 39
#define RECORDIDX_PresentationLabel 40
#define NBPARAMETERS 41
/** this class manages an instance entry of the index file.
* Each instance/image record within the index.dat file is
* a direct (binary) copy of this structure.
*/
struct DCMTK_DCMQRDB_EXPORT IdxRecord
{
/// default constructor
IdxRecord();
char filename [DBC_MAXSTRING+1] ;
char SOPClassUID [UI_MAX_LENGTH+1] ;
double RecordedDate ;
int ImageSize ;
DB_SmallDcmElmt param [NBPARAMETERS] ;
char PatientBirthDate [DA_MAX_LENGTH+1] ;
char PatientSex [CS_MAX_LENGTH+1] ;
char PatientName [PN_MAX_LENGTH+1] ;
char PatientID [LO_MAX_LENGTH+1] ;
char PatientBirthTime [TM_MAX_LENGTH+1] ;
char OtherPatientIDs [LO_MAX_LENGTH+1] ;
char OtherPatientNames [PN_MAX_LENGTH+1] ;
char EthnicGroup [SH_MAX_LENGTH+1] ;
char NumberofPatientRelatedStudies [IS_MAX_LENGTH+1] ;
char NumberofPatientRelatedSeries [IS_MAX_LENGTH+1] ;
char NumberofPatientRelatedInstances [IS_MAX_LENGTH+1] ;
char StudyDate [DA_MAX_LENGTH+1] ;
char StudyTime [TM_MAX_LENGTH+1] ;
char StudyID [CS_MAX_LENGTH+1] ;
char StudyDescription [LO_MAX_LENGTH+1] ;
char NameOfPhysiciansReadingStudy [PN_MAX_LENGTH+1] ;
char AccessionNumber [CS_MAX_LENGTH+1] ;
char ReferringPhysicianName [PN_MAX_LENGTH+1] ;
char ProcedureDescription [LO_MAX_LENGTH+1] ;
char AttendingPhysiciansName [PN_MAX_LENGTH+1] ;
char StudyInstanceUID [UI_MAX_LENGTH+1] ;
char OtherStudyNumbers [IS_MAX_LENGTH+1] ;
char AdmittingDiagnosesDescription [LO_MAX_LENGTH+1] ;
char PatientAge [AS_MAX_LENGTH+1] ;
char PatientSize [DS_MAX_LENGTH+1] ;
char PatientWeight [DS_MAX_LENGTH+1] ;
char Occupation [SH_MAX_LENGTH+1] ;
char NumberofStudyRelatedSeries [IS_MAX_LENGTH+1] ;
char NumberofStudyRelatedInstances [IS_MAX_LENGTH+1] ;
char SeriesNumber [IS_MAX_LENGTH+1] ;
char SeriesInstanceUID [UI_MAX_LENGTH+1] ;
char Modality [CS_MAX_LENGTH+1] ;
char ImageNumber [IS_MAX_LENGTH+1] ;
char SOPInstanceUID [UI_MAX_LENGTH+1] ;
char SeriesDate [DA_MAX_LENGTH+1] ;
char SeriesTime [TM_MAX_LENGTH+1] ;
char SeriesDescription [LO_MAX_LENGTH+1] ;
char ProtocolName [LO_MAX_LENGTH+1] ;
char OperatorsName [PN_MAX_LENGTH+1] ;
char PerformingPhysicianName [PN_MAX_LENGTH+1] ;
char PresentationLabel [CS_LABEL_MAX_LENGTH+1] ;
DVIFhierarchyStatus hstat;
// Not related to any particular DICOM attribute !
char InstanceDescription [DESCRIPTION_MAX_LENGTH+1] ;
private:
/* undefined */ IdxRecord(const IdxRecord& copy);
/* undefined */ IdxRecord& operator=(const IdxRecord& copy);
};
#endif