⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dcdict.h

📁 转化为DIB位图再显示出来的dicom文件C++代码
💻 H
字号:
/* * *  Copyright (C) 1994-2005, OFFIS * *  This software and supporting documentation were developed by * *    Kuratorium OFFIS e.V. *    Healthcare Information and Communication Systems *    Escherweg 2 *    D-26121 Oldenburg, Germany * *  THIS SOFTWARE IS MADE AVAILABLE,  AS IS,  AND OFFIS MAKES NO  WARRANTY *  REGARDING  THE  SOFTWARE,  ITS  PERFORMANCE,  ITS  MERCHANTABILITY  OR *  FITNESS FOR ANY PARTICULAR USE, FREEDOM FROM ANY COMPUTER DISEASES  OR *  ITS CONFORMITY TO ANY SPECIFICATION. THE ENTIRE RISK AS TO QUALITY AND *  PERFORMANCE OF THE SOFTWARE IS WITH THE USER. * *  Module:  dcmdata * *  Author:  Andrew Hewett * *  Purpose: Interface for loadable DICOM data dictionary * *  Last Update:      $Author: meichel $ *  Update Date:      $Date: 2005/12/08 16:28:09 $ *  CVS/RCS Revision: $Revision: 1.20 $ *  Status:           $State: Exp $ * *  CVS/RCS Log at end of file * */#ifndef DCMDICT_H#define DCMDICT_H#include "dcmtk/config/osconfig.h"    /* make sure OS specific configuration is included first */#include "dcmtk/dcmdata/dchashdi.h"#include "dcmtk/ofstd/ofthread.h"/// maximum length of a line in the loadable DICOM dictionary#define DCM_MAXDICTLINESIZE     2048/// maximum number of fields per entry in the loadable DICOM dictionary#define DCM_MAXDICTFIELDS       6/// environment variable pointing to the data dictionary file#define DCM_DICT_ENVIRONMENT_VARIABLE   "DCMDICTPATH"#ifndef DCM_DICT_DEFAULT_PATH/*** The default dictionary path is system dependent.  It should** be defined in a configuration file included from "osconfig.h"*/#error "DCM_DICT_DEFAULT_PATH is not defined via osconfig.h"#endif /* !DCM_DICT_DEFAULT_PATH */#ifndef ENVIRONMENT_PATH_SEPARATOR#define ENVIRONMENT_PATH_SEPARATOR '\n' /* at least define something unlikely */#endif/** this class implements a loadable DICOM Data Dictionary */class DcmDataDictionary{public:    /** constructor     *  @param loadBuiltin flag indicating if a built-in data dictionary     *    (if any) should be loaded.     *  @param loadExternal flag indicating if an external data dictionary     *    should be read from file.     */    DcmDataDictionary(OFBool loadBuiltin, OFBool loadExternal);    /// destructor    ~DcmDataDictionary();    /** checks if a data dictionary is loaded (excluding the skeleton dictionary)     *  @return true if loaded, false if no dictionary is present     */    OFBool isDictionaryLoaded() const { return dictionaryLoaded; }    /// returns the number of normal (non-repeating) tag entries    int numberOfNormalTagEntries() const { return hashDict.size(); }    /// returns the number of repeating tag entries    int numberOfRepeatingTagEntries() const { return repDict.size(); }    /** returns the number of dictionary entries that were loaded     *  either from file or from a built-in dictionary or both.     */    int numberOfEntries() const        { return numberOfNormalTagEntries()              + numberOfRepeatingTagEntries() - skeletonCount; }    /** returns the number of skeleton entries. The skeleton is a collection     *  of dictionary entries which are always present, even if neither internal     *  nor external dictionary have been loaded. It contains very basic     *  things like item delimitation and sequence delimitation.     */    int numberOfSkeletonEntries() const { return skeletonCount; }    /** load a particular dictionary from file.     *  @param fileName filename     *  @param errorIfAbsent causes the method to return false     *     if the file cannot be opened     *  @return false if the file contains a parse error or if the file could     *     not be opened and errorIfAbsent was set, true otherwise.     */    OFBool loadDictionary(const char* fileName, OFBool errorIfAbsent=OFTrue);    /** dictionary lookup for the given tag key and private creator name.     *  First the normal tag dictionary is searched.  If not found     *  then the repeating tag dictionary is searched.     *  @param key tag key     *  @param privCreator private creator name, may be NULL     */    const DcmDictEntry* findEntry(const DcmTagKey& key, const char *privCreator) const;    /** dictionary lookup for the given attribute name.     *  First the normal tag dictionary is searched.  If not found     *  then the repeating tag dictionary is searched.     *  Only considers standard attributes (i. e. without private creator)     *  @param name attribute name     */    const DcmDictEntry* findEntry(const char *name) const;    /// deletes all dictionary entries    void clear();    /** adds an entry to the dictionary.  Must be allocated via new.     *  The entry becomes the property of the dictionary and will be     *  deallocated (via delete) upon clear() or dictionary destruction.     *  If an equivalent entry already exists it will be replaced by     *  the new entry and the old entry deallocated (via delete).     *  @param entry pointer to new entry     */    void addEntry(DcmDictEntry* entry);    /* Iterators to access the normal and the repeating entries */    /// returns an iterator to the start of the normal (non-repeating) dictionary    DcmHashDictIterator normalBegin() { return hashDict.begin(); }    /// returns an iterator to the end of the normal (non-repeating) dictionary    DcmHashDictIterator normalEnd() { return hashDict.end(); }    /// returns an iterator to the start of the repeating tag dictionary    DcmDictEntryListIterator repeatingBegin() { return repDict.begin(); }    /// returns an iterator to the end of the repeating tag dictionary    DcmDictEntryListIterator repeatingEnd() { return repDict.end(); }private:    /** private undefined assignment operator     */    DcmDataDictionary &operator=(const DcmDataDictionary &);    /** private undefined copy constructor     */    DcmDataDictionary(const DcmDataDictionary &);    /** loads external dictionaries defined via environment variables     *  @return true if successful     */    OFBool loadExternalDictionaries();    /** loads a builtin (compiled) data dictionary.     *  Depending on which code is in use, this function may not     *  do anything.     */    void loadBuiltinDictionary();    /** loads the skeleton dictionary (the bare minimum needed to run)     *  @return true if successful     */    OFBool loadSkeletonDictionary();    /** looks up the given directory entry in the two dictionaries.     *  @return pointer to entry if found, NULL otherwise     */    const DcmDictEntry* findEntry(const DcmDictEntry& entry) const;    /** deletes the given entry from either dictionary     */    void deleteEntry(const DcmDictEntry& entry);    /** dictionary of normal tags     */    DcmHashDict hashDict;    /** dictionary of repeating tags     */    DcmDictEntryList repDict;    /** the number of skeleton entries     */    int skeletonCount;    /** is a dictionary loaded (more than skeleton)     */    OFBool dictionaryLoaded;};/** encapsulates a data dictionary with access methods which allow safe *  read and write access from multiple threads in parallel. *  A read/write lock is used to protect threads from each other. *  This allows parallel read-only access by multiple threads, which is *  the most common case. */class GlobalDcmDataDictionary{public:  /** constructor.   *  @param loadBuiltin if true, the dictionary constructor calls loadBuiltinDictionary().   *  @param loadExternal if true, the dictionary constructor calls loadExternalDictionaries().   */  GlobalDcmDataDictionary(OFBool loadBuiltin, OFBool loadExternal);  /** destructor   */  ~GlobalDcmDataDictionary();  /** acquires a read lock and returns a const reference to   *  the dictionary.   *  @return const reference to dictionary   */  const DcmDataDictionary& rdlock();  /** acquires a write lock and returns a non-const reference   *  to the dictionary.   *  @return non-const reference to dictionary.   */  DcmDataDictionary& wrlock();  /** unlocks the read or write lock which must have been acquired previously.   */  void unlock();  /** checks if a data dictionary has been loaded. This method acquires and   *  releases a read lock. It must not be called with another lock on the   *  dictionary being held by the calling thread.   *  @return OFTrue if dictionary has been loaded, OFFalse otherwise.   */  OFBool isDictionaryLoaded();  /** erases the contents of the dictionary. This method acquires and   *  releases a write lock. It must not be called with another lock on the   *  dictionary being held by the calling thread.  This method is intended   *  as a help for debugging memory leaks.   */  void clear();private:  /** private undefined assignment operator   */  GlobalDcmDataDictionary &operator=(const GlobalDcmDataDictionary &);  /** private undefined copy constructor   */  GlobalDcmDataDictionary(const GlobalDcmDataDictionary &);  /** the data dictionary managed by this class   */  DcmDataDictionary dataDict;#ifdef _REENTRANT  /** the read/write lock used to protect access from multiple threads   */  OFReadWriteLock dataDictLock;#endif};/** The Global DICOM Data Dictionary. *  Will be created before main() starts. *  Tries to load a builtin data dictionary (if compiled in). *  Tries to load data dictionaries from files specified by *  the DCMDICTPATH environment variable.  If this environment *  variable does not exist then a default file is loaded (if *  it exists). *  It is possible that no data dictionary gets loaded.  This *  is likely to cause unexpected behaviour in the dcmdata *  toolkit classes. */extern GlobalDcmDataDictionary dcmDataDict;#endif/*** CVS/RCS Log:** $Log: dcdict.h,v $** Revision 1.20  2005/12/08 16:28:09  meichel** Changed include path schema for all DCMTK header files**** Revision 1.19  2004/01/16 14:07:27  joergr** Removed acknowledgements with e-mail addresses from CVS log.**** Revision 1.18  2002/07/23 14:21:25  meichel** Added support for private tag data dictionaries to dcmdata**** Revision 1.17  2002/02/27 14:21:20  meichel** Declare dcmdata read/write locks only when compiled in multi-thread mode**** Revision 1.16  2001/06/01 15:48:38  meichel** Updated copyright header**** Revision 1.15  2000/05/03 14:19:08  meichel** Added new class GlobalDcmDataDictionary which implements read/write lock**   semantics for safe access to the DICOM dictionary from multiple threads**   in parallel. The global dcmDataDict now uses this class.**** Revision 1.14  2000/03/08 16:26:13  meichel** Updated copyright header.**** Revision 1.13  1999/03/31 09:24:35  meichel** Updated copyright header in module dcmdata**** Revision 1.12  1998/07/15 15:48:45  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.11  1997/08/26 14:02:56  hewett** New data structures for data-dictionary.  The main part of the** data-dictionary is now stored in an hash table using an optimized** hash function.  This new data structure reduces data-dictionary** load times by a factor of 4!  he data-dictionary specific linked-list** has been replaced by a linked list derived from OFList class** (see ofstd/include/oflist.h).** The only interface modifications are related to iterating over the entire** data dictionary which should not be needed by "normal" applications.**** Revision 1.10  1997/07/21 08:25:07  andreas** - Replace all boolean types (BOOLEAN, CTNBOOLEAN, DICOM_BOOL, BOOL)**   with one unique boolean type OFBool.**** Revision 1.9  1997/05/22 13:15:54  hewett** Added method DcmDataDictionary::isDictionaryLoaded() to ask if a full** data dictionary has been loaded.  This method should be used in tests** rather that querying the number of entries (a sekelton dictionary is** now always present).**** Revision 1.8  1997/05/13 13:58:41  hewett** Added member function (loadSkeletomDictionary) to preload of a few** essential attribute descriptions into the data dictionary (e.g. Item** and ItemDelimitation tags).**** Revision 1.7  1996/09/18 16:37:10  hewett** Added capability to search data dictionary by tag name.**** Revision 1.6  1996/03/22 13:09:12  hewett** Moved the definition of DCM_DICT_DEFAULT_PATH to the system** dependent configuration files included via "osconfig.h".**** Revision 1.5  1996/03/21 09:50:38  hewett** Added a  method numberOfEntries() to return the total number of** dictionary entries.**** Revision 1.4  1996/03/20 16:43:49  hewett** Updated for revised data dictionary.  Repeating tags are now handled better.** A linear list of repeating tags has been introduced with a subset ordering** mechanism to ensure that dictionary searches locate the most precise** dictionary entry.***/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -