DYTSrouce/Tool/3rdParty_x64/include/dcmtk/dcmsr/dsrstrvl.h
2024-11-22 23:19:31 +08:00

210 lines
8.2 KiB
C++

/*
*
* Copyright (C) 2000-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: dcmsr
*
* Author: Joerg Riesmeier
*
* Purpose:
* classes: DSRStringValue
*
*/
#ifndef DSRSTRVL_H
#define DSRSTRVL_H
#include "dcmtk/config/osconfig.h" /* make sure OS specific configuration is included first */
#include "dcmtk/dcmsr/dsrtypes.h"
/*---------------------*
* class declaration *
*---------------------*/
/** Class for string values
*/
class DCMTK_DCMSR_EXPORT DSRStringValue
{
public:
/** default constructor
*/
DSRStringValue();
/** constructor
** @param stringValue initial value to be set
* @param check if enabled, check 'stringValue' for validity before setting it.
* See checkValue() for details. An empty value is never accepted.
*/
DSRStringValue(const OFString &stringValue,
const OFBool check = OFTrue);
/** copy constructor
** @param stringValue string value to be copied (not checked !)
*/
DSRStringValue(const DSRStringValue &stringValue);
/** destructor
*/
virtual ~DSRStringValue();
/** assignment operator
** @param stringValue string value to be copied (not checked !)
** @return reference to this string value after 'stringValue' has been copied
*/
DSRStringValue &operator=(const DSRStringValue &stringValue);
/** clear all internal variables.
* Please note that the string value might become invalid afterwards.
*/
virtual void clear();
/** check whether the current code is valid.
* See checkValue() for details.
** @return OFTrue if code is valid, OFFalse otherwise
*/
virtual OFBool isValid() const;
/** print string value.
* The output of a typical string value looks like this: "Short text" or "Very long t..."
* (incl. the quotation marks).
** @param stream output stream to which the string value should be printed
* @param maxLength maximum number of characters to be printed. If the string value is
* longer the output is shortened automatically and three dots "..." are
* added. The value of 'maxLength' includes these three trailing char's.
* A value of 0 turns this mechanism off (default), i.e. the full string
* value is printed.
*/
void print(STD_NAMESPACE ostream &stream,
const size_t maxLength = 0) const;
/** read string value from dataset.
* If error/warning output is enabled, a warning message is printed if the string value
* does not conform with the type (1), value multiplicity (1) and/or value representation.
** @param dataset DICOM dataset from which the string value should be read
* @param tagKey DICOM tag specifying the attribute which should be read
* @param flags flag used to customize the reading process (see DSRTypes::RF_xxx)
** @return status, EC_Normal if successful, an error code otherwise
*/
OFCondition read(DcmItem &dataset,
const DcmTagKey &tagKey,
const size_t flags);
/** write string value to dataset
** @param dataset DICOM dataset to which the string value should be written
* @param tagKey DICOM tag specifying the attribute which should be written
** @return status, EC_Normal if successful, an error code otherwise
*/
OFCondition write(DcmItem &dataset,
const DcmTagKey &tagKey) const;
/** read string value from XML document
** @param doc document containing the XML file content
* @param cursor cursor pointing to the starting node
* @param flags flag used to customize the reading process (see DSRTypes::XF_xxx)
* @param encoding use encoding handler if OFTrue, ignore character set otherwise
** @return status, EC_Normal if successful, an error code otherwise
*/
OFCondition readXML(const DSRXMLDocument &doc,
DSRXMLCursor cursor,
const size_t flags,
const OFBool encoding = OFFalse);
/** render string value in HTML/XHTML format
** @param docStream output stream to which the main HTML/XHTML document is written
* @param flags flag used to customize the output (see DSRTypes::HF_xxx)
** @return status, EC_Normal if successful, an error code otherwise
*/
OFCondition renderHTML(STD_NAMESPACE ostream &docStream,
const size_t flags) const;
/** get string value
** @return reference to string value
*/
inline const OFString &getValue() const
{
return Value;
}
/** set string value.
* Before setting the string value, it is usually checked. If the value is invalid, the
* current value is not replaced and remains unchanged. Use the clear() method to empty
* the string value (which becomes invalid afterwards).
** @param stringValue value to be set (various VRs, mandatory)
* @param check if enabled, check value for validity before setting it. See
* checkValue() method for details. An empty value is never accepted.
** @return status, EC_Normal if successful, an error code otherwise
*/
OFCondition setValue(const OFString &stringValue,
const OFBool check = OFTrue);
/** set string value from element.
* Before setting the string value, it is usually checked. If the value is invalid, the
* current value is not replaced and remains unchanged.
** @param delem DICOM element from which the string value should be retrieved
* @param pos index of the value in case of multi-valued elements (0..vm-1)
* @param check if enabled, check string value for validity before setting it. See
* checkValue() method for details. An empty value is never accepted.
** @return status, EC_Normal if successful, an error code otherwise
*/
OFCondition setValue(const DcmElement &delem,
const unsigned long pos = 0,
const OFBool check = OFTrue);
/** set string value from dataset.
* Before setting the string value, it is usually checked. If the value is invalid, the
* current value is not replaced and remains unchanged.
** @param dataset DICOM dataset from which the string value should be retrieved
* @param tagKey DICOM tag specifying the attribute from which the value should be
* retrieved. The search is limited to the top-level of the dataset.
* @param pos index of the value in case of multi-valued elements (0..vm-1)
* @param check if enabled, check string value for validity before setting it. See
* checkValue() method for details. An empty value is never accepted.
** @return status, EC_Normal if successful, an error code otherwise
*/
OFCondition setValue(DcmItem &dataset,
const DcmTagKey &tagKey,
const unsigned long pos = 0,
const OFBool check = OFTrue);
protected:
/** check the specified string value for validity.
* This base class just checks that the string value is not empty (since all corresponding
* DICOM attributes are type 1). Derived classes should overwrite this method to perform
* more sophisticated tests.
** @param stringValue value to be checked
** @return status, EC_Normal if current value is valid, an error code otherwise
*/
virtual OFCondition checkValue(const OFString &stringValue) const;
/** check the currently stored string value for validity.
* See above checkValue() method for details.
** @return status, EC_Normal if value is valid, an error code otherwise
*/
OFCondition checkCurrentValue() const;
private:
/// string value (various VRs, type 1)
OFString Value;
};
#endif