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

158 lines
6.0 KiB
C++

/*
*
* Copyright (C) 1994-2015, 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: Andreas Barth
*
* Purpose: Interface of class DcmCharString
*
*/
#ifndef DCCHRSTR_H
#define DCCHRSTR_H
#include "dcmtk/config/osconfig.h" /* make sure OS specific configuration is included first */
//
// This implementation does not support 16 bit character sets. Since 8 bit
// character sets are supported by the class DcmByteString the class
// DcmCharString is derived from DcmByteString without any extensions.
//
// If the extension for 16 bit character sets will be implemented, this class
// must be derived directly from DcmElement. This class is designed to support
// the value representations (LO, LT, PN, SH, ST, UC and UT). They are a problem
// because their value width (1, 2, ... bytes) is specified by the element
// SpecificCharacterSet (0008,0005) and an implementation must support
// different value widths that cannot be derived from the value representation.
//
#include "dcmtk/dcmdata/dcbytstr.h"
/** base class for DICOM elements with value representation LO, LT, PN, SH, ST, UC and UT
*/
class DCMTK_DCMDATA_EXPORT DcmCharString
: public DcmByteString
{
public:
/** constructor.
* Create new element from given tag and length.
* @param tag DICOM tag for the new element
* @param len value length for the new element
*/
DcmCharString(const DcmTag &tag,
const Uint32 len);
/** copy constructor
* @param old element to be copied
*/
DcmCharString(const DcmCharString &old);
/** destructor
*/
virtual ~DcmCharString();
/** assignment operator
* @param obj element to be assigned/copied
* @return reference to this object
*/
DcmCharString &operator=(const DcmCharString &obj);
/** clone method
* @return deep copy of this object
*/
virtual DcmObject *clone() const
{
return new DcmCharString(*this);
}
/** Virtual object copying. This method can be used for DcmObject
* and derived classes to get a deep copy of an object. Internally
* the assignment operator is called if the given DcmObject parameter
* is of the same type as "this" object instance. If not, an error
* is returned. This function permits copying an object by value
* in a virtual way which therefore is different to just calling the
* assignment operator of DcmElement which could result in slicing
* the object.
* @param rhs - [in] The instance to copy from. Has to be of the same
* class type as "this" object
* @return EC_Normal if copying was successful, error otherwise
*/
virtual OFCondition copyFrom(const DcmObject& rhs);
/** check the currently stored string value.
* Checks every string component for the maximum length specified for the particular
* value representation.
* @param autocorrect correct value and value component length if OFTrue.
* NB: This parameter does currently nothing since it is unknown to this class
* whether a character consists of one or more bytes. To be fixed in a future
* version when multi-byte character sets are (hopefully) supported.
* @return status, EC_Normal if value length is correct, an error code otherwise
*/
virtual OFCondition verify(const OFBool autocorrect = OFFalse);
/** check if this element contains non-ASCII characters. Please note that this check
* is pretty simple and only works for single-byte character sets that do include
* the 7-bit ASCII codes, e.g. for the ISO 8859 family. In other words: All character
* codes below 128 are considered to be ASCII codes and all others are considered to
* be non-ASCII.
* @param checkAllStrings not used in this class
* @return true if element contains non-ASCII characters, false otherwise
*/
virtual OFBool containsExtendedCharacters(const OFBool checkAllStrings = OFFalse);
/** check if this element is affected by SpecificCharacterSet
* @return always returns true since all derived VR classes are affected by the
* SpecificCharacterSet (0008,0005) element
*/
virtual OFBool isAffectedBySpecificCharacterSet() const;
/** convert this element value from the currently selected source character set to
* the currently selected destination character set
* @param converter character set converter to be used to convert the element value
* @return always returns EC_Normal, since nothing to do in this base class
*/
virtual OFCondition convertCharacterSet(DcmSpecificCharacterSet &converter);
protected:
/** delimiter characters specifying when to switch back to the default character set
* (in case code extension techniques like ISO 2022 are used)
* @param characters delimiter characters to be used for character set conversion
*/
void setDelimiterChars(const OFString &characters) { delimiterChars = characters; }
/** get value of the SpecificCharacterSet element of the surrounding dataset/item
* @param charset reference to variable that will store the result value. The
* variable is not cleared in case of error!
* @return status, EC_Normal if successful (i.e. the element could be found),
* an error code otherwise. Typical error codes are:
* - EC_TagNotFound if the SpecificCharacterSet element could not be found
* - EC_CorruptedData if this object is not contained in a dataset/item
*/
OFCondition getSpecificCharacterSet(OFString &charset);
private:
/// delimiter characters specifying when to switch back to the default character set
/// (in case code extension techniques like ISO 2022 are used)
OFString delimiterChars;
};
#endif // DCCHRSTR_H