158 lines
6.0 KiB
C++
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
|