Main Page | Class Hierarchy | Alphabetical List | Class List | Directories | File List | Class Members | Related Pages

dcitem.h

00001 /*
00002  *
00003  *  Copyright (C) 1994-2004, OFFIS
00004  *
00005  *  This software and supporting documentation were developed by
00006  *
00007  *    Kuratorium OFFIS e.V.
00008  *    Healthcare Information and Communication Systems
00009  *    Escherweg 2
00010  *    D-26121 Oldenburg, Germany
00011  *
00012  *  THIS SOFTWARE IS MADE AVAILABLE,  AS IS,  AND OFFIS MAKES NO  WARRANTY
00013  *  REGARDING  THE  SOFTWARE,  ITS  PERFORMANCE,  ITS  MERCHANTABILITY  OR
00014  *  FITNESS FOR ANY PARTICULAR USE, FREEDOM FROM ANY COMPUTER DISEASES  OR
00015  *  ITS CONFORMITY TO ANY SPECIFICATION. THE ENTIRE RISK AS TO QUALITY AND
00016  *  PERFORMANCE OF THE SOFTWARE IS WITH THE USER.
00017  *
00018  *  Module:  dcmdata
00019  *
00020  *  Author:  Gerd Ehlers
00021  *
00022  *  Purpose: Interface of class DcmItem
00023  *
00024  *  Last Update:      $Author: joergr $
00025  *  Update Date:      $Date: 2004/02/04 16:02:08 $
00026  *  CVS/RCS Revision: $Revision: 1.49 $
00027  *  Status:           $State: Exp $
00028  *
00029  *  CVS/RCS Log at end of file
00030  *
00031  */
00032 
00033 
00034 #ifndef DCITEM_H
00035 #define DCITEM_H
00036 
00037 #include "osconfig.h"    /* make sure OS specific configuration is included first */
00038 
00039 #include "ofconsol.h"
00040 #include "dctypes.h"
00041 #include "dcobject.h"
00042 #include "dcvrui.h"
00043 #include "dclist.h"
00044 #include "dcstack.h"
00045 #include "dcpcache.h"
00046 
00047 
00048 // forward declaration
00049 class DcmSequenceOfItems;
00050 
00051 
00054 class DcmItem
00055   : public DcmObject
00056 {
00057 
00058   public:
00059 
00062     DcmItem();
00063 
00069     DcmItem(const DcmTag &tag,
00070             const Uint32 len = 0);
00071 
00075     DcmItem(const DcmItem &old);
00076 
00079     virtual ~DcmItem();
00080 
00084     virtual DcmEVR ident() const;
00085 
00089     virtual unsigned long getVM();
00090 
00091     virtual unsigned long card() const;
00092 
00093     virtual OFBool isLeaf() const { return OFFalse; }
00094 
00102     virtual void print(ostream &out,
00103                        const size_t flags = 0,
00104                        const int level = 0,
00105                        const char *pixelFileName = NULL,
00106                        size_t *pixelCounter = NULL);
00107 
00108     virtual Uint32 calcElementLength(const E_TransferSyntax xfer,
00109                                      const E_EncodingType enctype);
00110 
00111     virtual Uint32 getLength(const E_TransferSyntax xfer = EXS_LittleEndianImplicit,
00112                              const E_EncodingType enctype = EET_UndefinedLength);
00113 
00114     virtual void transferInit();
00115     virtual void transferEnd();
00116 
00117     virtual OFBool canWriteXfer(const E_TransferSyntax newXfer,
00118                                 const E_TransferSyntax oldXfer);
00119 
00133     virtual OFCondition read(DcmInputStream &inStream,
00134                              const E_TransferSyntax ixfer,
00135                              const E_GrpLenEncoding glenc = EGL_noChange,
00136                              const Uint32 maxReadLength = DCM_MaxReadLength);
00137 
00144     virtual OFCondition write(DcmOutputStream &outStream,
00145                               const E_TransferSyntax oxfer,
00146                               const E_EncodingType enctype = EET_UndefinedLength);
00147 
00153     virtual OFCondition writeXML(ostream &out,
00154                                  const size_t flags = 0);
00155 
00162     virtual OFCondition writeSignatureFormat(DcmOutputStream &outStream,
00163                                              const E_TransferSyntax oxfer,
00164                                              const E_EncodingType enctype = EET_UndefinedLength);
00165 
00169     virtual OFBool containsUnknownVR() const;
00170 
00183     virtual OFCondition insert(DcmElement *elem,
00184                                OFBool replaceOld = OFFalse,
00185                                OFBool checkInsertOrder = OFFalse);
00186 
00187     virtual DcmElement *getElement(const unsigned long num);
00188 
00189     // get next Object from position in stack. If stack empty
00190     // get next Object in this item. if intoSub true, scan
00191     // complete hierarchy, false scan only elements direct in this
00192     // item (not deeper).
00193     virtual OFCondition nextObject(DcmStack &stack,
00194                                    const OFBool intoSub);
00195     virtual DcmObject  *nextInContainer(const DcmObject *obj);
00196     virtual DcmElement *remove(const unsigned long num);
00197     virtual DcmElement *remove(DcmObject *elem);
00198     virtual DcmElement *remove(const DcmTagKey &tag);
00199     virtual OFCondition clear();
00200     virtual OFCondition verify(const OFBool autocorrect = OFFalse );
00201     virtual OFCondition search(const DcmTagKey &xtag,              // in
00202                                DcmStack &resultStack,              // inout
00203                                E_SearchMode mode = ESM_fromHere,   // in
00204                                OFBool searchIntoSub = OFTrue );    // in
00205     virtual OFCondition searchErrors( DcmStack &resultStack );     // inout
00206     virtual OFCondition loadAllDataIntoMemory();
00207 
00236     virtual OFCondition computeGroupLengthAndPadding(const E_GrpLenEncoding glenc,
00237                                                      const E_PaddingEncoding padenc = EPD_noChange,
00238                                                      const E_TransferSyntax xfer = EXS_Unknown,
00239                                                      const E_EncodingType enctype = EET_ExplicitLength,
00240                                                      const Uint32 padlen = 0,
00241                                                      const Uint32 subPadlen = 0,
00242                                                      Uint32 instanceLength = 0);
00243 
00244     /* simple tests for existance */
00245     OFBool tagExists(const DcmTagKey &key,
00246                      OFBool searchIntoSub = OFFalse);
00247     OFBool tagExistsWithValue(const DcmTagKey &key,
00248                               OFBool searchIntoSub = OFFalse);
00249 
00250 
00251     /* --- findAndGet functions: find an element and get it or the value, respectively --- */
00252 
00261     OFCondition findAndGetElement(const DcmTagKey &tagKey,
00262                                   DcmElement *&element,
00263                                   const OFBool searchIntoSub = OFFalse);
00264 
00272     OFCondition findAndGetElements(const DcmTagKey &tagKey,
00273                                    DcmStack &resultStack);
00274 
00285     OFCondition findAndGetString(const DcmTagKey &tagKey,
00286                                  const char *&value,
00287                                  const OFBool searchIntoSub = OFFalse);
00288 
00305     OFCondition findAndGetOFString(const DcmTagKey &tagKey,
00306                                    OFString &value,
00307                                    const unsigned long pos = 0,
00308                                    const OFBool searchIntoSub = OFFalse);
00309 
00323     OFCondition findAndGetOFStringArray(const DcmTagKey &tagKey,
00324                                         OFString &value,
00325                                         const OFBool searchIntoSub = OFFalse);
00326 
00336     OFCondition findAndGetUint8(const DcmTagKey &tagKey,
00337                                 Uint8 &value,
00338                                 const unsigned long pos = 0,
00339                                 const OFBool searchIntoSub = OFFalse);
00340 
00350     OFCondition findAndGetUint8Array(const DcmTagKey &tagKey,
00351                                      const Uint8 *&value,
00352                                      unsigned long *count = NULL,
00353                                      const OFBool searchIntoSub = OFFalse);
00354 
00364     OFCondition findAndGetUint16(const DcmTagKey &tagKey,
00365                                  Uint16 &value,
00366                                  const unsigned long pos = 0,
00367                                  const OFBool searchIntoSub = OFFalse);
00368 
00378     OFCondition findAndGetUint16Array(const DcmTagKey &tagKey,
00379                                       const Uint16 *&value,
00380                                       unsigned long *count = NULL,
00381                                       const OFBool searchIntoSub = OFFalse);
00382 
00392     OFCondition findAndGetSint16(const DcmTagKey &tagKey,
00393                                  Sint16 &value,
00394                                  const unsigned long pos = 0,
00395                                  const OFBool searchIntoSub = OFFalse);
00396 
00406     OFCondition findAndGetSint16Array(const DcmTagKey &tagKey,
00407                                       const Sint16 *&value,
00408                                       unsigned long *count = NULL,
00409                                       const OFBool searchIntoSub = OFFalse);
00410 
00420     OFCondition findAndGetUint32(const DcmTagKey &tagKey,
00421                                  Uint32 &value,
00422                                  const unsigned long pos = 0,
00423                                  const OFBool searchIntoSub = OFFalse);
00424 
00434     OFCondition findAndGetUint32Array(const DcmTagKey &tagKey,
00435                                       const Uint32 *&value,
00436                                       unsigned long *count = NULL,
00437                                       const OFBool searchIntoSub = OFFalse);
00438 
00448     OFCondition findAndGetSint32(const DcmTagKey &tagKey,
00449                                  Sint32 &value,
00450                                  const unsigned long pos = 0,
00451                                  const OFBool searchIntoSub = OFFalse);
00452 
00462     OFCondition findAndGetSint32Array(const DcmTagKey &tagKey,
00463                                       const Sint32 *&value,
00464                                       unsigned long *count = NULL,
00465                                       const OFBool searchIntoSub = OFFalse);
00466 
00476     OFCondition findAndGetLongInt(const DcmTagKey &tagKey,
00477                                   long int &value,
00478                                   const unsigned long pos = 0,
00479                                   const OFBool searchIntoSub = OFFalse);
00480 
00490     OFCondition findAndGetFloat32(const DcmTagKey &tagKey,
00491                                   Float32 &value,
00492                                   const unsigned long pos = 0,
00493                                   const OFBool searchIntoSub = OFFalse);
00494 
00504     OFCondition findAndGetFloat32Array(const DcmTagKey &tagKey,
00505                                        const Float32 *&value,
00506                                        unsigned long *count = NULL,
00507                                        const OFBool searchIntoSub = OFFalse);
00508 
00518     OFCondition findAndGetFloat64(const DcmTagKey &tagKey,
00519                                   Float64 &value,
00520                                   const unsigned long pos = 0,
00521                                   const OFBool searchIntoSub = OFFalse);
00522 
00532     OFCondition findAndGetFloat64Array(const DcmTagKey &tagKey,
00533                                        const Float64 *&value,
00534                                        unsigned long *count = NULL,
00535                                        const OFBool searchIntoSub = OFFalse);
00536 
00546     OFCondition findAndGetSequence(const DcmTagKey &seqTagKey,
00547                                    DcmSequenceOfItems *&sequence,
00548                                    const OFBool searchIntoSub = OFFalse);
00549 
00560     OFCondition findAndGetSequenceItem(const DcmTagKey &seqTagKey,
00561                                        DcmItem *&item,
00562                                        const signed long itemNum = 0);
00563 
00564 
00565     /* --- findOrCreate functions: find an element or create a new one --- */
00566 
00579     OFCondition findOrCreateSequenceItem(const DcmTag &seqTag,
00580                                          DcmItem *&item,
00581                                          const signed long itemNum = 0);
00582 
00583 
00584     /* --- findAndXXX functions: find an element and do something with it --- */
00585 
00594     OFCondition findAndDeleteElement(const DcmTagKey &tagKey,
00595                                      const OFBool allOccurrences = OFFalse,
00596                                      const OFBool searchIntoSub = OFFalse);
00597 
00607     OFCondition findAndCopyElement(const DcmTagKey &tagKey,
00608                                    DcmElement *&newElement,
00609                                    const OFBool searchIntoSub = OFFalse);
00610 
00611     /* --- putAndInsert functions: put value and insert new element --- */
00612 
00621     OFCondition putAndInsertString(const DcmTag &tag,
00622                                    const char *value,
00623                                    const OFBool replaceOld = OFTrue);
00624 
00632     OFCondition putAndInsertOFStringArray(const DcmTag &tag,
00633                                           const OFString &value,
00634                                           const OFBool replaceOld = OFTrue);
00635 
00644     OFCondition putAndInsertUint8Array(const DcmTag &tag,
00645                                        const Uint8 *value,
00646                                        const unsigned long count,
00647                                        const OFBool replaceOld = OFTrue);
00648 
00657     OFCondition putAndInsertUint16(const DcmTag &tag,
00658                                    const Uint16 value,
00659                                    const unsigned long pos = 0,
00660                                    const OFBool replaceOld = OFTrue);
00661 
00670     OFCondition putAndInsertUint16Array(const DcmTag &tag,
00671                                         const Uint16 *value,
00672                                         const unsigned long count,
00673                                         const OFBool replaceOld = OFTrue);
00674 
00683     OFCondition putAndInsertSint16(const DcmTag &tag,
00684                                    const Sint16 value,
00685                                    const unsigned long pos = 0,
00686                                    const OFBool replaceOld = OFTrue);
00687 
00696     OFCondition putAndInsertSint16Array(const DcmTag &tag,
00697                                         const Sint16 *value,
00698                                         const unsigned long count,
00699                                         const OFBool replaceOld = OFTrue);
00700 
00709     OFCondition putAndInsertUint32(const DcmTag &tag,
00710                                    const Uint32 value,
00711                                    const unsigned long pos = 0,
00712                                    const OFBool replaceOld = OFTrue);
00713 
00722     OFCondition putAndInsertSint32(const DcmTag &tag,
00723                                    const Sint32 value,
00724                                    const unsigned long pos = 0,
00725                                    const OFBool replaceOld = OFTrue);
00726 
00735     OFCondition putAndInsertFloat32(const DcmTag &tag,
00736                                     const Float32 value,
00737                                     const unsigned long pos = 0,
00738                                     const OFBool replaceOld = OFTrue);
00739 
00748     OFCondition putAndInsertFloat64(const DcmTag &tag,
00749                                     const Float64 value,
00750                                     const unsigned long pos = 0,
00751                                     const OFBool replaceOld = OFTrue);
00752 
00760     OFCondition insertEmptyElement(const DcmTag &tag,
00761                                    const OFBool replaceOld = OFTrue);
00762 
00763 
00764   protected:
00765 
00767     DcmList *elementList;
00768 
00773     OFBool lastElementComplete;
00774 
00779     Uint32 fStartPosition;
00780 
00799     OFCondition readTagAndLength(DcmInputStream &inStream,       // inout
00800                                  const E_TransferSyntax xfer,    // in
00801                                  DcmTag &tag,                    // out
00802                                  Uint32 &length,                 // out
00803                                  Uint32 &bytesRead);             // out
00804 
00821     OFCondition readSubElement(DcmInputStream &inStream,         // inout
00822                                DcmTag &newTag,                   // inout
00823                                const Uint32 newLength,           // in
00824                                const E_TransferSyntax xfer,      // in
00825                                const E_GrpLenEncoding glenc,     // in
00826                                const Uint32 maxReadLength = DCM_MaxReadLength);
00827 
00837     E_TransferSyntax checkTransferSyntax(DcmInputStream &inStream);
00838 
00839 
00840   private:
00841 
00843     DcmItem &operator=(const DcmItem &);
00844 
00845     DcmObject*  copyDcmObject(DcmObject *oldObj);
00846 
00847     OFCondition searchSubFromHere(const DcmTagKey &tag,          // in
00848                                   DcmStack &resultStack,         // inout
00849                                   OFBool searchIntoSub );        // in
00850 
00851     OFBool foundVR(char *atposition);
00852 
00854     DcmPrivateTagCache privateCreatorCache;
00855 };
00856 
00857 
00858 //
00859 // SUPPORT FUNCTIONS
00860 //
00861 
00862 
00863 // Function: newDicomElement
00864 // creates a new DicomElement from a Tag.
00865 //
00866 // Input:
00867 //   tag    : Tag of the new element
00868 //   length : length of the element value
00869 //
00870 // Output:
00871 //   newElement: point of a heap allocated new element. If the tag does not
00872 //               describe a dicom element or has ambigious VR (e.g. EVR_ox)
00873 //               a NULL pointer is returned.
00874 //
00875 // Result:
00876 //   EC_Normal:     tag describes an element (possibly with ambiguous VR)
00877 //   EC_InvalidTag: tag describes an item begin or an unknown element
00878 //   EC_SequEnd:    tag describes a sequence delimitation element
00879 //   EC_ItemEnd:    tag describes an item delmitation element
00880 //   other: an error
00881 OFCondition newDicomElement(DcmElement *&newElement,
00882                             const DcmTag &tag,
00883                             const Uint32 length = 0);
00884 
00885 
00886 
00887 // Functions: newDicomElement
00888 // creates a new DicomElement from a Tag. They differ from the above functions
00889 // in not returning a condition.
00890 DcmElement *newDicomElement(const DcmTag &tag,
00891                             const Uint32 length = 0);
00892 
00893 // Function: nextUp
00894 // pop Object from stack and get next Object in top of stack
00895 OFCondition nextUp(DcmStack &st);
00896 
00897 
00898 #endif // DCITEM_H
00899 
00900 
00901 /*
00902 ** CVS/RCS Log:
00903 ** $Log: dcitem.h,v $
00904 ** Revision 1.49  2004/02/04 16:02:08  joergr
00905 ** Removed pointer declaration from parameter "resultStack" in method
00906 ** findAndGetElements().
00907 **
00908 ** Revision 1.48  2003/10/08 10:24:40  joergr
00909 ** Added support for AT, OB, OF, OW, SL, SS, UL, US to putAndInsertString().
00910 **
00911 ** Revision 1.47  2003/07/16 14:34:05  joergr
00912 ** Added new function findAndGetSequence().
00913 **
00914 ** Revision 1.46  2003/06/26 09:17:25  onken
00915 ** Added commandline-application dcmodify.
00916 **
00917 ** Revision 1.45  2003/06/12 13:33:46  joergr
00918 ** Fixed inconsistent API documentation reported by Doxygen.
00919 **
00920 ** Revision 1.44  2003/06/02 17:16:23  joergr
00921 ** Added new helper function DcmItem::findAndCopyElement().
00922 **
00923 ** Revision 1.43  2003/06/02 16:58:12  meichel
00924 ** Renamed local variables to avoid name clashes with STL
00925 **
00926 ** Revision 1.42  2003/05/20 09:01:58  joergr
00927 ** Added new helper methods: findAndGetElement(), findAndGetUint32Array(),
00928 ** FindAndGetSint32Array(), findAndGetFloat64Array(), findAndDeleteElement().
00929 ** Enhanced findAndGetSequenceItem() and findOrCreateSequenceItem() by checking
00930 ** the return value of ident() - avoids crashes when applied to non-sequence
00931 ** elements.
00932 **
00933 ** Revision 1.41  2002/12/09 09:31:15  wilkens
00934 ** Modified/Added doc++ documentation.
00935 **
00936 ** Revision 1.40  2002/12/06 12:49:10  joergr
00937 ** Enhanced "print()" function by re-working the implementation and replacing
00938 ** the boolean "showFullData" parameter by a more general integer flag.
00939 ** Added doc++ documentation.
00940 ** Made source code formatting more consistent with other modules/files.
00941 **
00942 ** Revision 1.39  2002/08/27 16:55:34  meichel
00943 ** Initial release of new DICOM I/O stream classes that add support for stream
00944 **   compression (deflated little endian explicit VR transfer syntax)
00945 **
00946 ** Revision 1.38  2002/08/02 08:42:44  joergr
00947 ** Added optional 'pos' parameter to the putAndInsertXXX() methods.
00948 **
00949 ** Revision 1.37  2002/07/23 14:21:26  meichel
00950 ** Added support for private tag data dictionaries to dcmdata
00951 **
00952 ** Revision 1.36  2002/06/26 15:47:40  joergr
00953 ** Added support for polymorp OB/OW value representation (e.g. pixel data) to
00954 ** putAndInsertUint8/16Array() methods.
00955 **
00956 ** Revision 1.35  2002/05/17 09:58:14  meichel
00957 ** fixed bug in DcmItem which caused the parser to fail if the same attribute
00958 **   tag appeared twice within one dataset (which is illegal in DICOM anyway).
00959 **   Added console warning if the attributes read are not in ascending order.
00960 **
00961 ** Revision 1.34  2002/04/25 10:06:46  joergr
00962 ** Added support for XML output of DICOM objects.
00963 **
00964 ** Revision 1.33  2001/12/18 11:37:24  joergr
00965 ** Added helper method allowing to create and insert empty elements into an
00966 ** item/dataset.
00967 **
00968 ** Revision 1.32  2001/11/16 15:54:38  meichel
00969 ** Adapted digital signature code to final text of supplement 41.
00970 **
00971 ** Revision 1.31  2001/11/09 15:51:59  joergr
00972 ** Added new helper routines for managing sequences and items.
00973 **
00974 ** Revision 1.30  2001/10/10 15:14:04  joergr
00975 ** Changed parameter DcmTagKey to DcmTag in DcmItem::putAndInsert... methods
00976 ** to support elements which are not in the data dictionary (e.g. private
00977 ** extensions).
00978 **
00979 ** Revision 1.29  2001/10/02 11:46:45  joergr
00980 ** Added functions to get/put 8 bit values/arrays from/to an item/dataset.
00981 **
00982 ** Revision 1.28  2001/10/01 15:01:14  joergr
00983 ** Introduced new general purpose functions to get/put DICOM element values
00984 ** from/to an item/dataset - removed some old and rarely used functions.
00985 **
00986 ** Revision 1.27  2001/09/25 17:19:26  meichel
00987 ** Adapted dcmdata to class OFCondition
00988 **
00989 ** Revision 1.26  2001/06/01 15:48:40  meichel
00990 ** Updated copyright header
00991 **
00992 ** Revision 1.25  2000/11/07 16:56:06  meichel
00993 ** Initial release of dcmsign module for DICOM Digital Signatures
00994 **
00995 ** Revision 1.24  2000/04/14 15:31:32  meichel
00996 ** Removed default value from output stream passed to print() method.
00997 **   Required for use in multi-thread environments.
00998 **
00999 ** Revision 1.23  2000/03/08 16:26:15  meichel
01000 ** Updated copyright header.
01001 **
01002 ** Revision 1.22  2000/03/03 14:05:24  meichel
01003 ** Implemented library support for redirecting error messages into memory
01004 **   instead of printing them to stdout/stderr for GUI applications.
01005 **
01006 ** Revision 1.21  2000/02/10 10:50:51  joergr
01007 ** Added new feature to dcmdump (enhanced print method of dcmdata): write
01008 ** pixel data/item value fields to raw files.
01009 **
01010 ** Revision 1.20  1999/03/31 09:24:40  meichel
01011 ** Updated copyright header in module dcmdata
01012 **
01013 ** Revision 1.19  1998/07/15 15:48:48  joergr
01014 ** Removed several compiler warnings reported by gcc 2.8.1 with
01015 ** additional options, e.g. missing copy constructors and assignment
01016 ** operators, initialization of member variables in the body of a
01017 ** constructor instead of the member initialization list, hiding of
01018 ** methods by use of identical names, uninitialized member variables,
01019 ** missing const declaration of char pointers. Replaced tabs by spaces.
01020 **
01021 ** Revision 1.18  1997/09/22 14:50:43  hewett
01022 ** - Added 2 simple methods to test for the existance of an attribute
01023 **   to DcmItem class (tagExists and tagExistsWithValue).  This code
01024 **   was part of dcmgpdir.cc but is more generally useful.
01025 ** - Added 2 methods to find an attribute and retrieve numeric values
01026 **   to DcmItem class (findIntegerNumber and findRealNumber).  The old
01027 **   method findLong is now marked as obsolete and reimplemented using
01028 **   findIntegerNumber.
01029 **
01030 ** Revision 1.17  1997/09/11 15:13:11  hewett
01031 ** Modified getOFString method arguments by removing a default value
01032 ** for the pos argument.  By requiring the pos argument to be provided
01033 ** ensures that callers realise getOFString only gets one component of
01034 ** a multi-valued string.
01035 **
01036 ** Revision 1.16  1997/08/29 08:32:39  andreas
01037 ** - Added methods getOFString and getOFStringArray for all
01038 **   string VRs. These methods are able to normalise the value, i. e.
01039 **   to remove leading and trailing spaces. This will be done only if
01040 **   it is described in the standard that these spaces are not relevant.
01041 **   These methods do not test the strings for conformance, this means
01042 **   especially that they do not delete spaces where they are not allowed!
01043 **   getOFStringArray returns the string with all its parts separated by \
01044 **   and getOFString returns only one value of the string.
01045 **   CAUTION: Currently getString returns a string with trailing
01046 **   spaces removed (if dcmEnableAutomaticInputDataCorrection == OFTrue) and
01047 **   truncates the original string (since it is not copied!). If you rely on this
01048 **   behaviour please change your application now.
01049 **   Future changes will ensure that getString returns the original
01050 **   string from the DICOM object (NULL terminated) inclusive padding.
01051 **   Currently, if you call getOF... before calling getString without
01052 **   normalisation, you can get the original string read from the DICOM object.
01053 **
01054 ** Revision 1.15  1997/07/21 08:25:08  andreas
01055 ** - Replace all boolean types (BOOLEAN, CTNBOOLEAN, DICOM_BOOL, BOOL)
01056 **   with one unique boolean type OFBool.
01057 **
01058 ** Revision 1.14  1997/07/07 07:42:03  andreas
01059 ** - Changed parameter type DcmTag & to DcmTagKey & in all search functions
01060 **   in DcmItem, DcmSequenceOfItems, DcmDirectoryRecord and DcmObject
01061 **
01062 ** Revision 1.13  1997/05/30 06:45:42  andreas
01063 ** - fixed problem of inconsistent interfaces and implementation that the
01064 **   syntax check of GNU C++ does not find.
01065 **
01066 ** Revision 1.12  1997/05/27 13:48:28  andreas
01067 ** - Add method canWriteXfer to class DcmObject and all derived classes.
01068 **   This method checks whether it is possible to convert the original
01069 **   transfer syntax to an new transfer syntax. The check is used in the
01070 **   dcmconv utility to prohibit the change of a compressed transfer
01071 **   syntax to a uncompressed.
01072 **
01073 ** Revision 1.11  1997/05/16 08:13:43  andreas
01074 ** - Revised handling of GroupLength elements and support of
01075 **   DataSetTrailingPadding elements. The enumeratio E_GrpLenEncoding
01076 **   got additional enumeration values (for a description see dctypes.h).
01077 **   addGroupLength and removeGroupLength methods are replaced by
01078 **   computeGroupLengthAndPadding. To support Padding, the parameters of
01079 **   element and sequence write functions changed.
01080 ** - Added a new method calcElementLength to calculate the length of an
01081 **   element, item or sequence. For elements it returns the length of
01082 **   tag, length field, vr field, and value length, for item and
01083 **   sequences it returns the length of the whole item. sequence including
01084 **   the Delimitation tag (if appropriate).  It can never return
01085 **   UndefinedLength.
01086 ** - Deleted obsolete method DcmItem::calcHeaderLength because the
01087 **   samce functionality is performed by DcmXfer::sizeofTagHeader
01088 **
01089 ** Revision 1.10  1996/08/05 08:45:23  andreas
01090 ** new print routine with additional parameters:
01091 **         - print into files
01092 **         - fix output length for elements
01093 ** corrected error in search routine with parameter ESM_fromStackTop
01094 **
01095 ** Revision 1.9  1996/07/17 12:38:58  andreas
01096 ** new nextObject to iterate a DicomDataset, DicomFileFormat, Item, ...
01097 **
01098 ** Revision 1.8  1996/04/29 15:08:53  hewett
01099 ** Replaced DcmItem::findInt(...) with the more general DcmItem::findLong(...).
01100 **
01101 ** Revision 1.7  1996/04/16 16:00:05  andreas
01102 ** - added const for Tag in newDicomElement
01103 **
01104 ** Revision 1.6  1996/03/28 18:52:30  hewett
01105 ** Added 2 simple find&get methods (findString & findInt).
01106 **
01107 ** Revision 1.5  1996/01/29 13:38:12  andreas
01108 ** - new put method for every VR to put value as a string
01109 ** - better and unique print methods
01110 **
01111 ** Revision 1.4  1996/01/09 11:06:15  andreas
01112 ** New Support for Visual C++
01113 ** Correct problems with inconsistent const declarations
01114 **
01115 ** Revision 1.3  1996/01/05 13:22:56  andreas
01116 ** - changed to support new streaming facilities
01117 ** - more cleanups
01118 ** - merged read / write methods for block and file transfer
01119 **
01120 */


Generated on 29 Apr 2005 for OFFIS DCMTK Version 3.5.3 by Doxygen 1.4.2