DCMTK Version 3.7.0 OFFIS DICOM Toolkit

Public Member Functions | Protected Member Functions | Static Protected Member Functions | Protected Attributes | Private Attributes | List of all members
DSRDocumentSubTree Class Reference

Class managing a SR document subtree. More...

Inheritance diagram for DSRDocumentSubTree:

## Public Member Functions
| DSRDocumentSubTree ()
| default constructor
| DSRDocumentSubTree (const DSRDocumentSubTree &tree)
| copy constructor. More...
virtual | ~DSRDocumentSubTree ()
| destructor
DSRDocumentSubTree & | operator= (DSRDocumentSubTree tree)
| assignment operator. More...
virtual DSRDocumentSubTree * | clone () const
| clone this subtree. More...
virtual void | clear ()
| clear internal member variables
virtual OFBool | isValid () const
| check whether the current internal state is valid. More...
virtual OFBool | isCursorValid () const
| check whether the internal cursor, which points to the current content item, is valid More...
virtual OFBool | isValidDocumentTree (const E_RelationshipType defaultRelType=RT_unknown) const
| check whether this subtree is a valid document tree. More...
virtual OFBool | isExpandedDocumentTree () const
| check whether this subtree is an expanded document tree. More...
virtual OFBool | hasTemplateIdentification () const
| check whether template identification is set More...
virtual OFBool | canUseTemplateIdentification () const
| check whether template identification is possible at all. More...
virtual OFCondition | print (STD_NAMESPACE ostream &stream, const size_t flags=0, const DSRPositionCounter *posCounter=NULL)
| print current SR document tree to specified output stream More...
virtual OFCondition | writeXML (STD_NAMESPACE ostream &stream, const size_t flags=0)
| write current SR document tree in XML format More...
virtual DSRContentItem & | getCurrentContentItem ()
| get reference to current content item. More...
virtual const DSRDocumentTreeNode * | getCurrentNode () const
| get read-only access to current node (content item) More...
virtual OFBool | getCursorToRootNode (DSRDocumentTreeNodeCursor &cursor) const
| get a cursor to the root node of this document tree. More...
virtual OFBool | getCursorToRootNode (DSRIncludedTemplateNodeCursor &cursor) const
| get a cursor to the root node of this document tree. More...
virtual OFBool | getCursorToCurrentNode (DSRDocumentTreeNodeCursor &cursor) const
| get a cursor to the current node of this document tree. More...
virtual OFBool | getCursorToSubTree (DSRDocumentTreeNodeCursor &cursor) const
| get a cursor to the subtree below the current node. More...
size_t | countNodes (const OFBool searchIntoSubTemplates=OFFalse, const OFBool countIncludedTemplateNodes=OFTrue) const
| count number of content items (nodes) in the document tree. More...
virtual size_t | gotoMatchingNode (const DSRDocumentTreeNodeFilter &filter, const OFBool startFromRoot=OFTrue, const OFBool searchIntoSub=OFTrue)
| set internal cursor to a matching node. More...
virtual size_t | gotoNextMatchingNode (const DSRDocumentTreeNodeFilter &filter, const OFBool searchIntoSub=OFTrue)
| set internal cursor to the next matching node. More...
virtual size_t | gotoNamedNode (const DSRCodedEntryValue &conceptName, const OFBool startFromRoot=OFTrue, const OFBool searchIntoSub=OFTrue)
| set internal cursor to a named node. More...
virtual size_t | gotoNamedChildNode (const DSRCodedEntryValue &conceptName)
| set internal cursor to a named node (starting from the first child of the current node and searching on this level only). More...
virtual size_t | gotoNamedNodeInSubTree (const DSRCodedEntryValue &conceptName, const OFBool searchIntoSub=OFTrue)
| set internal cursor to a named node in the subtree below the current node. More...
virtual size_t | gotoNextNamedNode (const DSRCodedEntryValue &conceptName, const OFBool searchIntoSub=OFTrue)
| set internal cursor to the next named node. More...
virtual size_t | gotoAnnotatedNode (const OFString &annotationText, const OFBool startFromRoot=OFTrue)
| set internal cursor to an annotated node. More...
virtual size_t | gotoNextAnnotatedNode (const OFString &annotationText)
| set internal cursor to the next annotated node. More...
virtual OFBool | canAddContentItem (const E_RelationshipType relationshipType, const E_ValueType valueType, const E_AddMode addMode=AM_afterCurrent) const
| check whether specified content item can be added to the current one. More...
virtual OFBool | canAddByReferenceRelationship (const E_RelationshipType relationshipType, const E_ValueType targetValueType) const
| check whether specified by-reference relationship can be added to the current content item. More...
virtual size_t | addContentItem (const E_RelationshipType relationshipType, const E_ValueType valueType, const E_AddMode addMode=AM_afterCurrent)
| add specified content item to the current one. More...
virtual OFCondition | addContentItem (DSRDocumentTreeNode *node, const E_AddMode addMode=AM_afterCurrent, const OFBool deleteIfFail=OFFalse)
| add specified content item to the current one. More...
virtual OFCondition | addContentItem (const E_RelationshipType relationshipType, const E_ValueType valueType, const DSRCodedEntryValue &conceptName, const OFBool check=OFTrue)
| add specified content item after the current one. More...
virtual OFCondition | addChildContentItem (const E_RelationshipType relationshipType, const E_ValueType valueType, const DSRCodedEntryValue &conceptName, const OFBool check=OFTrue)
| add specified content item below the current one. More...
virtual size_t | addByReferenceRelationship (const E_RelationshipType relationshipType, const size_t referencedNodeID)
| add specified by-reference relationship to the current content item. More...
virtual OFCondition | updateByReferenceRelationships (const OFBool updateIncludedTemplates=OFFalse)
| update the position strings used to encode by-reference relationships (if any). More...
virtual OFBool | canInsertSubTree (const DSRDocumentSubTree *tree, const E_AddMode addMode=AM_belowCurrent, const E_RelationshipType defaultRelType=RT_unknown) const
| check whether specified subtree can be inserted at the current position, i.e. added to the current content item. More...
virtual OFCondition | insertSubTree (DSRDocumentSubTree *tree, const E_AddMode addMode=AM_belowCurrent, const E_RelationshipType defaultRelType=RT_unknown, const OFBool deleteIfFail=OFFalse)
| insert specified subtree to this tree, i.e. add it to the current content item. More...
virtual DSRDocumentSubTree * | extractSubTree ()
| extract a subtree, i.e. a fragment from this tree. More...
virtual size_t | removeCurrentContentItem ()
| remove current content item from tree. More...
virtual OFCondition | removeSubTree (const size_t searchID=0)
| remove a subtree from this tree. More...
virtual DSRDocumentTreeNode * | cloneCurrentTreeNode () const
| clone the current tree node. More...
virtual DSRDocumentSubTree * | cloneSubTree (const size_t stopAfterNodeID=0) const
| clone a subtree, i.e. a fragment of this tree. More...
virtual OFCondition | createExpandedSubTree (DSRDocumentSubTree *&tree) const
| created an expanded version of this (sub)tree. More...
virtual OFCondition | setObservationDateTime (const OFString &observationDateTime, const OFBool check=OFTrue)
| set observation date/time for all content items in the document tree. More...
virtual OFBool | compareTemplateIdentification (const OFString &templateIdentifier, const OFString &mappingResource, const OFString &mappingResourceUID="") const
| compare template identification of the root node with given values. More...
virtual OFCondition | getTemplateIdentification (OFString &templateIdentifier, OFString &mappingResource) const
| get template identifier and mapping resource from the root node of this tree. More...
virtual OFCondition | getTemplateIdentification (OFString &templateIdentifier, OFString &mappingResource, OFString &mappingResourceUID) const
| get template identifier, mapping resource and optional mapping resource UID from the root node of this tree. More...
virtual OFCondition | setTemplateIdentification (const OFString &templateIdentifier, const OFString &mappingResource, const OFString &mappingResourceUID="", const OFBool check=OFTrue)
| set template identifier and mapping resource to the root node of this tree. More...
Public Member Functions inherited from DSRTree< DSRDocumentTreeNode >
| DSRTree ()
| default constructor
| DSRTree (const DSRTree< DSRDocumentTreeNode > &tree)
| copy constructor. More...
virtual | ~DSRTree ()
| destructor
DSRTree & | operator= (DSRTree< DSRDocumentTreeNode > tree)
| assignment operator. More...
void | clearAnnotations ()
| clear annotations of all tree nodes
OFBool | isEmpty () const
| check whether tree has any nodes More...
size_t | countNodes () const
| count number of nodes in the tree. More...
size_t | getNextNodeID () const
| get ID of the next node to be created. More...
size_t | gotoRoot ()
| set internal cursor to root node More...
size_t | gotoNode (const size_t searchID, const OFBool startFromRoot=OFTrue)
| set internal cursor to specified node More...
size_t | gotoNode (const OFString &reference, const OFBool startFromRoot=OFTrue)
| set internal cursor to specified node More...
size_t | gotoNode (const DSRTreeNodeAnnotation &annotation, const OFBool startFromRoot=OFTrue)
| set internal cursor to specified node More...
size_t | gotoNode (const DSRDocumentTreeNode &nodeValue, const OFBool startFromRoot=OFTrue)
| set internal cursor to specified node (given by its value). More...
virtual size_t | addNode (DSRDocumentTreeNode *node, const E_AddMode addMode=AM_afterCurrent)
| add new node to the current one. More...
virtual size_t | replaceNode (DSRDocumentTreeNode *node)
| replace current node by the given one. More...
Public Member Functions inherited from DSRTreeNodeCursor< DSRDocumentTreeNode >
| DSRTreeNodeCursor ()
| default constructor
| DSRTreeNodeCursor (const DSRTreeNodeCursor< DSRDocumentTreeNode > &cursor)
| copy constructor More...
| DSRTreeNodeCursor (DSRDocumentTreeNode *node, const DSRPositionCounter *position=NULL)
| constructor. More...
virtual | ~DSRTreeNodeCursor ()
| destructor
DSRTreeNodeCursor< DSRDocumentTreeNode > & | operator= (const DSRTreeNodeCursor< DSRDocumentTreeNode > &cursor)
| assignment operator More...
DSRTreeNodeCursor< DSRDocumentTreeNode > & | operator= (DSRDocumentTreeNode *node)
| assignment operator. More...
virtual size_t | countChildNodes (const OFBool searchIntoSub=OFTrue) const
| count number of children of the current node. More...
OFBool | hasParentNode () const
| check whether the current node has a parent More...
OFBool | hasChildNodes () const
| check whether the current node has any children More...
OFBool | hasPreviousNode () const
| check whether the current node has a preceding sibling More...
OFBool | hasNextNode () const
| check whether the current node has a following sibling More...
OFBool | hasSiblingNodes () const
| check whether the current node has any siblings More...
virtual const DSRDocumentTreeNode * | getParentNode () const
| get pointer to parent node. More...
virtual const DSRDocumentTreeNode * | getChildNode () const
| get pointer to first child node. More...
virtual const DSRDocumentTreeNode * | getPreviousNode () const
| get pointer to previous node. More...
virtual const DSRDocumentTreeNode * | getNextNode () const
| get pointer to next node. More...
virtual size_t | gotoFirst ()
| goto first node on the same level (first sibling). More...
virtual size_t | gotoLast ()
| goto last node on the same level (last sibling). More...
virtual size_t | gotoPrevious ()
| goto previous node on the same level (preceding sibling) More...
virtual size_t | gotoNext ()
| goto next node on the same level (following sibling) More...
virtual size_t | goUp ()
| goto parent node (one level up) More...
virtual size_t | goDown ()
| goto first child node (one level down) More...
virtual size_t | gotoParent ()
| goto parent node (one level up) More...
virtual size_t | gotoChild ()
| goto first child node (one level down) More...
virtual size_t | iterate (const OFBool searchIntoSub=OFTrue)
| iterate over all nodes (starting from current position!) More...
size_t | gotoNode (const size_t searchID)
| set cursor to specified node. More...
size_t | gotoNode (const OFString &position, const char separator='.')
| set cursor to specified node. More...
size_t | gotoNode (const DSRTreeNodeAnnotation &annotation)
| set cursor to specified node. More...
size_t | gotoNode (const DSRDocumentTreeNode &nodeValue)
| set cursor to specified node. More...
size_t | getNodeID () const
| get current node ID. More...
size_t | getLevel () const
| get current level. More...
DSRPositionCounter & | getPositionCounter ()
| get reference to internal position counter. More...
const OFString & | getPosition (OFString &position, const char separator='.') const
| get position string of the current node. More...

## Protected Member Functions
| DSRDocumentSubTree (DSRDocumentTreeNode *rootNode)
| special constructor that receives a pointer to the root node. More...
| DSRDocumentSubTree (const DSRDocumentTreeNodeCursor &startCursor, size_t stopAfterNodeID)
| special copy constructor that clones a particular subtree only More...
void | swap (DSRDocumentSubTree &tree)
| fast, non-throwing swap function. More...
virtual DSRDocumentTreeNode * | getNode () const
| get pointer to current node. More...
virtual size_t | addNode (DSRDocumentTreeNode *node, const E_AddMode addMode=AM_afterCurrent)
| add new node to the current one. More...
virtual size_t | replaceNode (DSRDocumentTreeNode *node)
| replace current node by the given one. More...
virtual DSRDocumentTreeNode * | extractNode ()
| extract current node from tree. More...
virtual DSRDocumentTreeNode * | getAndRemoveRootNode ()
| get pointer to root node and "forget" the internal reference to this node. More...
virtual size_t | removeNode ()
| remove current node from tree. More...
virtual OFCondition | includeTemplate (const DSRSharedSubTemplate &subTemplate, const E_AddMode addMode=AM_belowCurrent, const E_RelationshipType defaultRelType=RT_unknown)
| include specified sub-template, i.e. add a new DSRIncludedTemplateTreeNode, which references this template, to the current content item. More...
virtual OFCondition | expandIncludedTemplates (DSRDocumentSubTree *tree) const
| expand all "included template" content items in a given (sub)tree. More...
template<typename T_Cursor >
OFCondition | checkByReferenceRelationships (const size_t mode=0, const size_t flags=0)
| check the by-reference relationships (if any) for validity. More...
virtual void | resetReferenceTargetFlag ()
| reset flag for all content items whether they are target of a by-reference relationship. More...
virtual void | updateTreeForOutput ()
| update the tree for subsequent output, e.g. for being printed or added to an SR document. More...
virtual OFCondition | checkSubTreeConstraints (const DSRDocumentSubTree *tree, const DSRIODConstraintChecker *checker) const
| check whether the given subtree complies with the constraints of the given checker More...
virtual OFBool | validByReferenceRelationship (const OFString &sourcePosition, const OFString &targetPosition)
| check whether a by-reference relationship from a given source to a target node (specified by the position strings) is valid, i.e. is allowed according to the DICOM standard. More...
Protected Member Functions inherited from DSRTree< DSRDocumentTreeNode >
| DSRTree (DSRDocumentTreeNode *rootNode)
| special constructor that receives a pointer to the root node. More...
| DSRTree (const DSRTreeNodeCursor< DSRDocumentTreeNode > &startCursor, size_t stopAfterNodeID)
| special copy constructor that clones a particular subtree only More...
void | swap (DSRTree< DSRDocumentTreeNode > &tree)
| fast, non-throwing swap function. More...
virtual DSRDocumentTreeNode * | getRoot () const
| get pointer to root node More...
virtual void | deleteTreeFromRootNode (DSRDocumentTreeNode *rootNode)
| delete a tree given by its root node. More...
Protected Member Functions inherited from DSRTreeNodeCursor< DSRDocumentTreeNode >
void | swap (DSRTreeNodeCursor< DSRDocumentTreeNode > &cursor)
| fast, non-throwing swap function. More...
void | clearNodeCursorStack ()
| clear the internal node cursor stack
const DSRTreeNodeCursor< DSRDocumentTreeNode > & | getCursor () const
| get cursor More...
void | setCursor (const DSRTreeNodeCursor< DSRDocumentTreeNode > &cursor)
| set cursor to specified object More...
size_t | setCursor (DSRDocumentTreeNode *node)
| set cursor to specified node. More...
DSRDocumentTreeNode * | getChild () const
| get pointer to first child node More...
Protected Member Functions inherited from DSRTypes
virtual | ~DSRTypes ()
| destructor. More...

## Static Protected Member Functions
static DSRDocumentSubTree * | cloneSubTree (const DSRDocumentTreeNodeCursor &startCursor, const size_t stopAfterNodeID=0)
| clone a particular subtree, i.e. a fragment of a tree More...
Static Protected Member Functions inherited from DSRTypes
static const char * | documentTypeToSOPClassUID (const E_DocumentType documentType)
| convert SR document type to SOP class UID More...
static const char * | documentTypeToModality (const E_DocumentType documentType)
| convert SR document type to modality More...
static const char * | documentTypeToReadableName (const E_DocumentType documentType)
| convert SR document type to readable name. More...
static const char * | documentTypeToDocumentTitle (const E_DocumentType documentType, OFString &documentTitle)
| convert SR document type to document title. More...
static OFBool | requiresEnhancedEquipmentModule (const E_DocumentType documentType)
| check whether a given SR document type requires the Enhanced General Equipment Module More...
static OFBool | requiresTimezoneModule (const E_DocumentType documentType)
| check whether a given SR document type requires the Timezone Module More...
static OFBool | requiresSynchronizationModule (const E_DocumentType documentType)
| check whether a given SR document type requires the Synchronization Module More...
static OFBool | usesSRDocumentSeriesModule (const E_DocumentType documentType)
| check whether a given SR document type uses the SR Document Series Module (instead of the Key Object Document Series Module) More...
static OFBool | usesKeyObjectDocumentSeriesModule (const E_DocumentType documentType)
| check whether a given SR document type uses the Key Object Document Series Module (instead of the SR Document Series Module) More...
static OFBool | usesSRDocumentGeneralModule (const E_DocumentType documentType)
| check whether a given SR document type uses the SR Document General Module (instead of the Key Object Document Module) More...
static OFBool | usesKeyObjectDocumentModule (const E_DocumentType documentType)
| check whether a given SR document type uses the Key Object Document Module (instead of the SR Document General Module) More...
static const char * | relationshipTypeToDefinedTerm (const E_RelationshipType relationshipType)
| convert relationship type to DICOM defined term More...
static const char * | relationshipTypeToReadableName (const E_RelationshipType relationshipType)
| convert relationship type to readable name. More...
static const char * | valueTypeToDefinedTerm (const E_ValueType valueType)
| convert value type to DICOM defined term More...
static const char * | valueTypeToXMLTagName (const E_ValueType valueType)
| convert value type to XML tag name More...
static const char * | valueTypeToReadableName (const E_ValueType valueType)
| convert value type to readable name. More...
static const char * | presentationStateTypeToShortName (const E_PresentationStateType pstateType)
| convert presentation state type to short name. More...
static const char * | graphicTypeToEnumeratedValue (const E_GraphicType graphicType)
| convert graphic type to DICOM enumerated value More...
static const char * | graphicTypeToReadableName (const E_GraphicType graphicType)
| convert graphic type to readable name. More...
static const char * | graphicType3DToEnumeratedValue (const E_GraphicType3D graphicType)
| convert graphic type (3D) to DICOM enumerated value More...
static const char * | graphicType3DToReadableName (const E_GraphicType3D graphicType)
| convert graphic type (3D) to readable name. More...
static const char * | temporalRangeTypeToEnumeratedValue (const E_TemporalRangeType temporalRangeType)
| convert temporal range type to DICOM enumerated value More...
static const char * | temporalRangeTypeToReadableName (const E_TemporalRangeType temporalRangeType)
| convert temporal range type to readable name. More...
static const char * | continuityOfContentToEnumeratedValue (const E_ContinuityOfContent continuityOfContent)
| convert continuity of content flag to DICOM enumerated value More...
static const char * | preliminaryFlagToEnumeratedValue (const E_PreliminaryFlag preliminaryFlag)
| convert preliminary flag to DICOM enumerated value More...
static const char * | completionFlagToEnumeratedValue (const E_CompletionFlag completionFlag)
| convert completion flag to DICOM enumerated value More...
static const char * | verificationFlagToEnumeratedValue (const E_VerificationFlag verificationFlag)
| convert verification flag to DICOM enumerated value More...
static const char * | characterSetToDefinedTerm (const E_CharacterSet characterSet)
| convert character set to DICOM defined term More...
static const char * | characterSetToHTMLName (const E_CharacterSet characterSet)
| convert character set to HTML name. More...
static const char * | characterSetToXMLName (const E_CharacterSet characterSet)
| convert character set to XML name. More...
static E_DocumentType | sopClassUIDToDocumentType (const OFString &sopClassUID)
| convert SOP class UID to SR document type More...
static E_RelationshipType | definedTermToRelationshipType (const OFString &definedTerm)
| convert DICOM defined term to relationship type More...
static E_ValueType | definedTermToValueType (const OFString &definedTerm)
| convert DICOM defined term to value type More...
static E_PresentationStateType | sopClassUIDToPresentationStateType (const OFString &sopClassUID)
| convert SOP class UID to presentation state type More...
static E_ValueType | xmlTagNameToValueType (const OFString &xmlTagName)
| convert XML tag name to value type More...
static E_GraphicType | enumeratedValueToGraphicType (const OFString &enumeratedValue)
| convert DICOM enumerated value to graphic type More...
static E_GraphicType3D | enumeratedValueToGraphicType3D (const OFString &enumeratedValue)
| convert DICOM enumerated value to graphic type (3D) More...
static E_TemporalRangeType | enumeratedValueToTemporalRangeType (const OFString &enumeratedValue)
| convert DICOM enumerated value to temporal range type More...
static E_ContinuityOfContent | enumeratedValueToContinuityOfContent (const OFString &enumeratedValue)
| convert DICOM enumerated value to continuity of content flag More...
static E_PreliminaryFlag | enumeratedValueToPreliminaryFlag (const OFString &enumeratedValue)
| convert DICOM enumerated value to preliminary flag More...
static E_CompletionFlag | enumeratedValueToCompletionFlag (const OFString &enumeratedValue)
| convert DICOM enumerated value to completion flag More...
static E_VerificationFlag | enumeratedValueToVerificationFlag (const OFString &enumeratedValue)
| convert DICOM enumerated value to verification flag More...
static E_CharacterSet | definedTermToCharacterSet (const OFString &definedTerm)
| convert DICOM defined term to character set. More...
static OFBool | isDocumentTypeSupported (const E_DocumentType documentType)
| check whether specified SR document type is supported by this library More...
static const OFString & | currentDate (OFString &dateString)
| get current date in DICOM 'DA' format. More...
static const OFString & | currentTime (OFString &timeString)
| get current time in DICOM 'TM' format. More...
static const OFString & | currentDateTime (OFString &dateTimeString)
| get current date and time in DICOM 'DT' format. More...
static const OFString & | localTimezone (OFString &timezoneString)
| get local timezone in DICOM format. More...
static const OFString & | dicomToReadableDate (const OFString &dicomDate, OFString &readableDate)
| convert DICOM date string to readable format. More...
static const OFString & | dicomToReadableTime (const OFString &dicomTime, OFString &readableTime)
| convert DICOM time string to readable format. More...
static const OFString & | dicomToReadableDateTime (const OFString &dicomDateTime, OFString &readableDateTime)
| convert DICOM date time string to readable format. More...
static const OFString & | dicomToReadablePersonName (const OFString &dicomPersonName, OFString &readablePersonName)
| convert DICOM person name to readable format. More...
static const OFString & | dicomToXMLPersonName (const OFString &dicomPersonName, OFString &xmlPersonName, const OFBool writeEmptyValue=OFFalse)
| convert DICOM person name to XML format. More...
static const char * | numberToString (const size_t number, char *stringValue, size_t stringLength)
| convert unsigned integer number to character string More...
static size_t | stringToNumber (const char *stringValue)
| convert string to unsigned integer number More...
static const OFString & | convertToPrintString (const OFString &sourceString, OFString &printString)
| convert character string to print string. More...
static const OFString & | convertToHTMLString (const OFString &sourceString, OFString &markupString, const size_t flags=0, const OFBool newlineAllowed=OFFalse)
| convert character string to HTML mnenonic string. More...
static const OFString & | convertToXMLString (const OFString &sourceString, OFString &markupString)
| convert character string to XML mnenonic string. More...
static OFBool | checkForValidReference (const OFString &stringValue)
| check string for valid reference (as used for by-reference relationships). More...
static DSRIODConstraintChecker * | createIODConstraintChecker (const E_DocumentType documentType)
| create specified SR IOD content relationship constraint checker object. More...
static DSRDocumentTreeNode * | createDocumentTreeNode (const E_RelationshipType relationshipType, const E_ValueType valueType)
| create specified document tree node. More...
static OFCondition | addElementToDataset (OFCondition &result, DcmItem &dataset, DcmElement *delem, const OFString &vm, const OFString &type, const char *moduleName=NULL)
| add given element to the dataset. More...
static void | removeAttributeFromSequence (DcmSequenceOfItems &sequence, const DcmTagKey &tagKey)
| remove given attribute from the sequence. More...
static OFCondition | getElementFromDataset (DcmItem &dataset, DcmElement &delem)
| get element from dataset More...
static const char * | getStringValueFromElement (const DcmElement &delem)
| get string value from element More...
static const OFString & | getStringValueFromElement (const DcmElement &delem, OFString &stringValue)
| get string value from element. More...
static OFCondition | getStringValueFromElement (const DcmElement &delem, OFString &stringValue, const signed long pos)
| get string value from element More...
static const OFString & | getPrintStringFromElement (const DcmElement &delem, OFString &stringValue)
| get string value from element and convert to "print" format. More...
static const OFString & | getMarkupStringFromElement (const DcmElement &delem, OFString &stringValue, const OFBool convertNonASCII=OFFalse)
| get string value from element and convert to HTML/XML. More...
static OFCondition | getStringValueFromDataset (DcmItem &dataset, const DcmTagKey &tagKey, OFString &stringValue, const signed long pos=0)
| get string value from dataset More...
static OFCondition | putStringValueToDataset (DcmItem &dataset, const DcmTag &tag, const OFString &stringValue, const OFBool allowEmpty=OFTrue)
| put string value to dataset More...
static OFBool | checkElementValue (DcmElement *delem, const DcmTagKey &tagKey, const OFString &vm, const OFString &type, const OFCondition &searchCond=EC_Normal, const char *moduleName=NULL, const OFBool acceptViolation=OFFalse)
| check element value for correct value multiplicity and type. More...
static OFBool | checkElementValue (DcmElement &delem, const OFString &vm, const OFString &type, const OFCondition &searchCond=EC_Normal, const char *moduleName=NULL, const OFBool acceptViolation=OFFalse)
| check element value for correct value multiplicity and type. More...
static OFCondition | getAndCheckElementFromDataset (DcmItem &dataset, DcmElement &delem, const OFString &vm, const OFString &type, const char *moduleName=NULL, const OFBool acceptViolation=OFFalse)
| get element from dataset and check it for correct value multiplicity and type. More...
static OFCondition | getAndCheckStringValueFromDataset (DcmItem &dataset, const DcmTagKey &tagKey, OFString &stringValue, const OFString &vm, const OFString &type, const char *moduleName=NULL, const OFBool acceptViolation=OFFalse)
| get string value from dataset and check it for correct value multiplicity and type. More...
static void | printInvalidContentItemMessage (const char *action, const DSRDocumentTreeNode *node, const char *location=NULL)
| print the warning message that the current content item is invalid/incomplete. More...
static void | printContentItemErrorMessage (const char *action, const OFCondition &result, const DSRDocumentTreeNode *node, const char *location=NULL)
| print an error message for the current content item. More...
static void | printUnknownValueWarningMessage (const char *valueName, const char *readValue=NULL, const char *action="Reading")
| print a warning message that an unknown/unsupported value has been determined More...
static OFBool | writeStringValueToXML (STD_NAMESPACE ostream &stream, const OFString &stringValue, const OFString &tagName, const OFBool writeEmptyValue=OFFalse)
| write string value to XML output stream. More...
static OFBool | writeStringFromElementToXML (STD_NAMESPACE ostream &stream, DcmElement &delem, const OFString &tagName, const OFBool writeEmptyValue=OFFalse)
| write string value from DICOM element to XML output stream. More...
static size_t | createHTMLAnnexEntry (STD_NAMESPACE ostream &docStream, STD_NAMESPACE ostream &annexStream, const OFString &referenceText, size_t &annexNumber, const size_t flags=0)
| create an HTML annex entry with hyperlinks. More...
static size_t | createHTMLFootnote (STD_NAMESPACE ostream &docStream, STD_NAMESPACE ostream &footnoteStream, size_t &footnoteNumber, const size_t nodeID, const size_t flags=0)
| create an HTML footnote with hyperlinks More...
static OFCondition | appendStream (STD_NAMESPACE ostream &mainStream, OFOStringStream &tempStream, const char *heading=NULL)
| append one output stream to another. More...

## Protected Attributes
DSRIODConstraintChecker * | ConstraintChecker
| check relationship content constraints of the associated IOD
Protected Attributes inherited from DSRTreeNodeCursor< DSRDocumentTreeNode >
DSRDocumentTreeNode * | NodeCursor
| pointer to current node
OFStack< DSRDocumentTreeNode * > | NodeCursorStack
| stack of node pointers. Used to store the cursor position of upper levels.
DSRPositionCounter | Position
| counter for the current position within the current level and on upper levels

## Private Attributes
DSRContentItem | CurrentContentItem
| current content item. Introduced to avoid the external use of pointers.

## Additional Inherited Members
Protected Types inherited from DSRTypes
enum | E_DocumentType { DT_invalid , DT_unknown = DT_invalid , DT_BasicTextSR , DT_EnhancedSR , DT_ComprehensiveSR , DT_KeyObjectSelectionDocument , DT_MammographyCadSR , DT_ChestCadSR , DT_ColonCadSR , DT_ProcedureLog , DT_XRayRadiationDoseSR , DT_EnhancedXRayRadiationDoseSR , DT_SpectaclePrescriptionReport , DT_MacularGridThicknessAndVolumeReport , DT_ImplantationPlanSRDocument , DT_Comprehensive3DSR , DT_RadiopharmaceuticalRadiationDoseSR , DT_ExtensibleSR , DT_AcquisitionContextSR , DT_SimplifiedAdultEchoSR , DT_PatientRadiationDoseSR , DT_PerformedImagingAgentAdministrationSR , DT_PlannedImagingAgentAdministrationSR , DT_RenditionSelectionDocument , DT_WaveformAnnotationSR , DT_last = DT_WaveformAnnotationSR }
| SR document types (DICOM IOD) More...
enum | E_RelationshipType { RT_invalid , RT_unknown , RT_isRoot , RT_contains , RT_hasObsContext , RT_hasAcqContext , RT_hasConceptMod , RT_hasProperties , RT_inferredFrom , RT_selectedFrom , RT_last = RT_selectedFrom }
| SR relationship types. More...
enum | E_ValueType { VT_invalid , VT_Text , VT_Code , VT_Num , VT_DateTime , VT_Date , VT_Time , VT_UIDRef , VT_PName , VT_SCoord , VT_SCoord3D , VT_TCoord , VT_Composite , VT_Image , VT_Waveform , VT_Container , VT_byReference , VT_includedTemplate , VT_last = VT_includedTemplate }
| SR value types. More...
enum | E_PresentationStateType { PT_invalid , PT_unknown = PT_invalid , PT_Grayscale , PT_Color , PT_PseudoColor , PT_Blending , PT_XAXRFGrayscale , PT_GrayscalePlanarMPR , PT_CompositingPlanarMPR , PT_AdvancedBlending , PT_VolumeRendering , PT_SegmentedVolumeRendering , PT_MultipleVolumeRendering , PT_VariableModalityLUT , PT_Waveform , PT_WaveformAcquisition , PT_last = PT_WaveformAcquisition }
| Softcopy presentation state types. More...
enum | E_GraphicType { GT_invalid , GT_unknown = GT_invalid , GT_Point , GT_Multipoint , GT_Polyline , GT_Circle , GT_Ellipse , GT_last = GT_Ellipse }
| SR graphic types. More...
enum | E_GraphicType3D { GT3_invalid , GT3_unknown = GT3_invalid , GT3_Point , GT3_Multipoint , GT3_Polyline , GT3_Polygon , GT3_Ellipse , GT3_Ellipsoid , GT3_last = GT3_Ellipsoid }
| SR graphic types (3D). More...
enum | E_TemporalRangeType { TRT_invalid , TRT_unknown = TRT_invalid , TRT_Point , TRT_Multipoint , TRT_Segment , TRT_Multisegment , TRT_Begin , TRT_End , TRT_last = TRT_End }
| SR temporal range types. More...
enum | E_ContinuityOfContent { COC_invalid , COC_Separate , COC_Continuous , COC_last = COC_Continuous }
| SR continuity of content flag. More...
enum | E_PreliminaryFlag { PF_invalid , PF_Preliminary , PF_Final , PF_last = PF_Final }
| SR document preliminary flag. More...
enum | E_CompletionFlag { CF_invalid , CF_Partial , CF_Complete , CF_last = CF_Complete }
| SR document completion flag. More...
enum | E_VerificationFlag { VF_invalid , VF_Unverified , VF_Verified , VF_last = VF_Verified }
| SR document verification flag. More...
enum | E_CharacterSet { CS_invalid , CS_unknown = CS_invalid , CS_ASCII , CS_default = CS_ASCII , CS_Latin1 , CS_Latin2 , CS_Latin3 , CS_Latin4 , CS_Cyrillic , CS_Arabic , CS_Greek , CS_Hebrew , CS_Latin5 , CS_Latin9 , CS_Thai , CS_Japanese , CS_Korean , CS_ChineseISO , CS_ChineseGB18030 , CS_ChineseGBK , CS_UTF8 , CS_last = CS_UTF8 }
| Specific character set. More...
enum | E_CodeValueType { CVT_auto , CVT_Short , CVT_Long , CVT_URN }
| Code value type. More...
enum | E_AddMode { AM_afterCurrent , AM_beforeCurrent , AM_belowCurrent , AM_belowCurrentBeforeFirstChild }
| Add node mode. More...
Static Protected Attributes inherited from DSRTypes
static const size_t | RF_readDigitalSignatures
| read digital signatures from dataset
static const size_t | RF_acceptUnknownRelationshipType
| accept unknown/missing relationship type
static const size_t | RF_acceptInvalidContentItemValue
| accept invalid content item value (e.g. violation of VR or VM definition)
static const size_t | RF_ignoreRelationshipConstraints
| ignore relationship constraints for this document class
static const size_t | RF_ignoreContentItemErrors
| do not abort on content item errors (e.g. missing value type specific attributes)
static const size_t | RF_skipInvalidContentItems
| do not abort when detecting an invalid content item, skip invalid sub-tree instead
static const size_t | RF_showCurrentlyProcessedItem
| show the currently processed content item (e.g. "1.2.3")
static const size_t | HF_neverExpandChildrenInline
| external: never expand child nodes inline
static const size_t | HF_alwaysExpandChildrenInline
| external: always expand child nodes inline
static const size_t | HF_renderInlineCodes
| external: render codes even if they appear inline
static const size_t | HF_useCodeDetailsTooltip
| external: render code details as a tooltip (not with HTML 3.2)
static const size_t | HF_renderConceptNameCodes
| external: render concept name codes (default: code meaning only)
static const size_t | HF_renderNumericUnitCodes
| external: render the code of the numeric measurement unit
static const size_t | HF_useCodeMeaningAsUnit
| external: use code meaning for the numeric measurement unit (default: code value)
static const size_t | HF_renderPatientTitle
| external: use patient information as document title (default: document type)
static const size_t | HF_renderNoDocumentHeader
| external: render no general document information (header)
static const size_t | HF_renderDcmtkFootnote
| external: render dcmtk/dcmsr comment at the end of the document
static const size_t | HF_renderFullData
| external: render the full data of all content items
static const size_t | HF_renderSectionTitlesInline
| external: render section titles inline (default: separate paragraph)
static const size_t | HF_copyStyleSheetContent
| external: copy Cascading Style Sheet (CSS) content to HTML file
static const size_t | HF_HTML32Compatibility
| external: output compatible to HTML version 3.2 (default: 4.01)
static const size_t | HF_XHTML11Compatibility
| external: output compatible to XHTML version 1.1 (default: HTML 4.01)
static const size_t | HF_addDocumentTypeReference
| external: add explicit reference to HTML document type (DTD)
static const size_t | HF_omitGeneratorMetaElement
| external: omit generator meta element referring to the DCMTK
static const size_t | HF_renderItemsSeparately
| internal: render items separately (for container with SEPARATE flag)
static const size_t | HF_renderItemInline
| internal: expand items inline when they are short and have no child nodes
static const size_t | HF_currentlyInsideAnnex
| internal: content item is rendered fully inside the annex
static const size_t | HF_createFootnoteReferences
| internal: create footnote references
static const size_t | HF_convertNonASCIICharacters
| internal: convert non-ASCII characters (> #127) to &#nnn;
static const size_t | HF_renderAllCodes
| shortcut: render all codes
static const size_t | HF_internalUseOnly
| shortcut: filter all flags that are only used internally
static const size_t | XF_writeEmptyTags
| write: write all tags even if their value is empty
static const size_t | XF_writeTemplateIdentification
| write: write template identification information (TID and mapping resource)
static const size_t | XF_alwaysWriteItemIdentifier
| write: always write item identifier "id", not only when item is referenced
static const size_t | XF_codeComponentsAsAttribute
| write: encode code value, coding scheme designator and coding scheme version as attribute instead of element text
static const size_t | XF_relationshipTypeAsAttribute
| write: encode relationship type as attribute instead of element text
static const size_t | XF_valueTypeAsAttribute
| write: encode value type as attribute instead of element text
static const size_t | XF_templateIdentifierAsAttribute
| write: encode template identifier as attribute instead of element text
static const size_t | XF_useDcmsrNamespace
| write: add DCMSR namespace declaration to the XML output
static const size_t | XF_addSchemaReference
| write: add Schema reference to XML document
static const size_t | XF_validateSchema
| read: validate content of XML document against Schema
static const size_t | XF_templateElementEnclosesItems
| read/write: template identification element encloses content items
static const size_t | XF_addCommentsForIncludedTemplate
| write: add comments with details at beginning/end of included template (might be useful for debugging purposes)
static const size_t | XF_acceptEmptyStudySeriesInstanceUID
| read: accept empty Study/Series/SOP Instance UID attribute values (must be filled later)
static const size_t | XF_encodeEverythingAsAttribute
| shortcut: combines all XF_xxxAsAttribute write flags (see above)
static const size_t | PF_printItemPosition
| print item position ("1.2.3") instead of line indentation
static const size_t | PF_shortenLongItemValues
| shorten long item value (e.g. long texts)
static const size_t | PF_printSOPInstanceUID
| print SOP instance UID of referenced objects
static const size_t | PF_printConceptNameCodes
| print coding scheme designator/version and code value of concept names
static const size_t | PF_printNoDocumentHeader
| print no general document information (header)
static const size_t | PF_printTemplateIdentification
| print template identification (TID and mapping resource)
static const size_t | PF_useANSIEscapeCodes
| use ANSI escape codes for output
static const size_t | PF_printLongSOPClassName
| print long SOP class name of referenced objects (default: short name for images)
static const size_t | PF_printSOPClassUID
| print SOP class UID of referenced objects (instead of the name)
static const size_t | PF_printInvalidCodes
| print code triple for invalid codes (instead of the text "invalid code")
static const size_t | PF_printNodeID
| print node ID at the beginning of each line (might be useful for debugging purposes)
static const size_t | PF_indicateEnhancedEncodingMode
| indicate with a "*" that the "enhanced encoding mode" is used for codes
static const size_t | PF_printAnnotation
| print annotation of a content item (optional, e.g. user-defined information)
static const size_t | PF_hideIncludedTemplateNodes
| do not print internal "included template" nodes (position counter is still increased)
static const size_t | PF_dontCountIncludedTemplateNodes
| do not count internal "included template" nodes (only with PF_hideIncludedTemplateNodes)
static const size_t | PF_printEmptyCodes
| print text "empty code" for empty codes (instead of "invalid code")
static const size_t | PF_printAllCodes
| shortcut: print all codes (combines all PF_printXxxCodes flags, see above)
static const size_t | CM_updatePositionString
| update the position string using the node ID
static const size_t | CM_updateNodeID
| update the node ID using the position string
static const size_t | CM_resetReferenceTargetFlag
| reset the reference target flag for all nodes
static const size_t | CB_maskPrintFlags
| bit mask (filter) for valid print flags (see PF_xxx)
static const size_t | CB_maskReadFlags
| bit mask (filter) for valid read flags (see RF_xxx)

## Detailed Description

Class managing a SR document subtree.

A subtree represents an extract of an SR document tree. Compared to the "SR Document Content Tree" that is defined in the DICOM standard, there are almost no restrictions regarding the value and relationship types. It is also possible to have multiple nodes on the top-level, i.e. no dedicated root, or to use "unknown" relationship types.

## Constructor & Destructor Documentation

## ◆ DSRDocumentSubTree() [1/3]

DSRDocumentSubTree::DSRDocumentSubTree | ( | const DSRDocumentSubTree & | tree | ) |

copy constructor.

Please note that the internal cursor is not copied but reset, i.e. set to the root node. Also the IOD constraint checker is not copied by this class but recreated by the derived class DSRDocumentTree (based on the corresponding document type). This constructor also updates any by-reference relationships, i.e. translates the references from the source 'tree' (based on the position string) to the IDs of the newly created nodes.

Parameters

  tree | subtree to be copied

## ◆ DSRDocumentSubTree() [2/3]

DSRDocumentSubTree::DSRDocumentSubTree | ( | DSRDocumentTreeNode * | rootNode | ) |
| protected

special constructor that receives a pointer to the root node.

Please note that the 'rootNode' and the associated tree is not copied!

Parameters

  rootNode | pointer to the root node of the "new" tree

## ◆ DSRDocumentSubTree() [3/3]

DSRDocumentSubTree::DSRDocumentSubTree | ( | const DSRDocumentTreeNodeCursor & | startCursor,
|  | size_t | stopAfterNodeID
| ) |  |
| protected

special copy constructor that clones a particular subtree only

Parameters

  startCursor | cursor pointing to first node of the subtree to be copied
  stopAfterNodeID | ID of the node after which the cloning should stop

## Member Function Documentation

## ◆ addByReferenceRelationship()

virtual size_t DSRDocumentSubTree::addByReferenceRelationship | ( | const E_RelationshipType | relationshipType,
|  | const size_t | referencedNodeID
| ) |  |
| virtual

add specified by-reference relationship to the current content item.

If possible, this method creates a new pseudo-node (relationship) and adds it to the current one. The method canAddByReferenceRelationship() is called internally to check parameters first. The internal cursor is automatically re-set to the current node.

Parameters

  relationshipType | relationship type between current and referenced node
  referencedNodeID | ID of the referenced node (target content item)

Returns
  ID of new pseudo-node if successful, 0 otherwise

## ◆ addChildContentItem()

virtual OFCondition DSRDocumentSubTree::addChildContentItem | ( | const E_RelationshipType | relationshipType,
|  | const E_ValueType | valueType,
|  | const DSRCodedEntryValue & | conceptName,
|  | const OFBool | check = `OFTrue`
| ) |  |
| virtual

add specified content item below the current one.

If possible, this method creates a new node as specified and adds it below the current one, i.e. as a child. Internally, the first variant of the addContentItem() method is called with the third parameter being DSRTypes::AM_belowCurrent. If successful, the given concept name is set for the new node, and the cursor is updated.

Note
  This is a convenience function that avoids calling several other functions.

Parameters

  relationshipType | relationship type of node to be added with regard to the current one
  valueType | value type of node to be added
  conceptName | concept name of the node to be added
  check | if enabled, check 'conceptName for validity before setting it

Returns
  status, EC_Normal if successful, an error code otherwise

## ◆ addContentItem() [1/3]

virtual OFCondition DSRDocumentSubTree::addContentItem | ( | const E_RelationshipType | relationshipType,
|  | const E_ValueType | valueType,
|  | const DSRCodedEntryValue & | conceptName,
|  | const OFBool | check = `OFTrue`
| ) |  |
| virtual

add specified content item after the current one.

If possible, this method creates a new node as specified and adds it after the current one, i.e. on the same level. Internally, the first variant of the addContentItem() method is called with the third parameter being DSRTypes::AM_afterCurrent. If successful, the given concept name is set for the new node, and the cursor is updated.

Note
  This is a convenience function that avoids calling several other functions.

Parameters

  relationshipType | relationship type of node to be added with regard to the current one
  valueType | value type of node to be added
  conceptName | concept name of the node to be added
  check | if enabled, check 'conceptName for validity before setting it

Returns
  status, EC_Normal if successful, an error code otherwise

## ◆ addContentItem() [2/3]

virtual size_t DSRDocumentSubTree::addContentItem | ( | const E_RelationshipType | relationshipType,
|  | const E_ValueType | valueType,
|  | const E_AddMode | addMode = `AM_afterCurrent`
| ) |  |
| virtual

add specified content item to the current one.

If possible, this method creates a new node as specified and adds it to the current one. The method canAddContentItem() is called internally to check parameters first. If the node could be added successfully, the cursor is set to it automatically.

Parameters

  relationshipType | relationship type of node to be added with regard to the current one
  valueType | value type of node to be added
  addMode | flag specifying at which position to add the new node (e.g. after or below the current node)

Returns
  ID of new node if successful, 0 otherwise

## ◆ addContentItem() [3/3]

virtual OFCondition DSRDocumentSubTree::addContentItem | ( | DSRDocumentTreeNode * | node,
|  | const E_AddMode | addMode = `AM_afterCurrent`,
|  | const OFBool | deleteIfFail = `OFFalse`
| ) |  |
| virtual

add specified content item to the current one.

If possible, this method adds a given new node to the current one. The method canAddContentItem() is called internally to check parameters first. If the node could be added successfully, the cursor is set to it automatically. Please note that no copy of the given node is created. Therefore, the node has to be created with new() or with DSRTypes::createDocumentTreeNode() - do not use a reference to a local variable and do not delete it a second time.

Parameters

  node | pointer to the new node to be added (should not be empty). Reference remains valid after successful insertion.
  addMode | flag specifying at which position to add the new node (e.g. after or below the current node)
  deleteIfFail | flag specifying whether to delete the given 'node' if adding fails. By default, the item is not deleted, i.e. in case of error it has to be deleted by the caller.

Returns
  status, EC_Normal if successful, an error code otherwise

## ◆ addNode()

virtual size_t DSRDocumentSubTree::addNode | ( | DSRDocumentTreeNode * | node,
|  | const E_AddMode | addMode = `AM_afterCurrent`
| ) |  |
| protected virtual

add new node to the current one.

Please note that no copy of the given node is created. Therefore, the node has to be created with new() - do not use a reference to a local variable. If the node could be added successfully, the cursor is set to it automatically.

Parameters

  node | pointer to the new node to be added
  addMode | flag specifying at which position to add the new node (e.g. after or below the current node)

Returns
  ID of the new node if successful, 0 otherwise

## ◆ canAddByReferenceRelationship()

virtual OFBool DSRDocumentSubTree::canAddByReferenceRelationship | ( | const E_RelationshipType | relationshipType,
|  | const E_ValueType | targetValueType
| ) |  | const
| virtual

check whether specified by-reference relationship can be added to the current content item.

Always returns true if no constraint checker is available but 'relationshipType' and 'targetValueType' have valid values. The value type DSRTypes::VT_includedTemplate is never allowed for the target content item.

Parameters

  relationshipType | type of relationship between current and target node
  targetValueType | value type of the referenced node (target content item)

Returns
  OFTrue if specified by-reference relationship can be added, OFFalse otherwise

## ◆ canAddContentItem()

virtual OFBool DSRDocumentSubTree::canAddContentItem | ( | const E_RelationshipType | relationshipType,
|  | const E_ValueType | valueType,
|  | const E_AddMode | addMode = `AM_afterCurrent`
| ) |  | const
| virtual

check whether specified content item can be added to the current one.

This method can be used to decide which type of content items can be added prior to really doing so. Please note that only by-value relationships are supported. Always returns true if no constraint checker is available but 'relationshipType' and 'valueType' have valid values.

Parameters

  relationshipType | relationship type of node to be checked with regard to the current one
  valueType | value type of node to be checked
  addMode | flag specifying at which position the new node would be added (e.g. after or below the current node)

Returns
  OFTrue if specified node can be added, OFFalse otherwise

Reimplemented in DSRDocumentTree.

## ◆ canInsertSubTree()

virtual OFBool DSRDocumentSubTree::canInsertSubTree | ( | const DSRDocumentSubTree * | tree,
|  | const E_AddMode | addMode = `AM_belowCurrent`,
|  | const E_RelationshipType | defaultRelType = `RT_unknown`
| ) |  | const
| virtual

check whether specified subtree can be inserted at the current position, i.e. added to the current content item.

Internally, the method canAddContentItem() is used for all top-level nodes of the document subtree. In addition, if a constraint checker is available, the remaining nodes of the given subtree are also checked for their compliance with the relationship content constraints of the underlying SR IOD.

Parameters

  tree | pointer to new subtree to be inserted (should not be empty)
  addMode | flag specifying at which position the new subtree would be added (e.g. after or below the current node)
  defaultRelType | default relationship type between the top-level nodes of the given subtree and the current node. This relationship type is used if the one of a top-level node is "unknown".

Returns
  OFTrue if specified subtree can be inserted, OFFalse otherwise

Reimplemented in DSRDocumentTree.

## ◆ canUseTemplateIdentification()

virtual OFBool DSRDocumentSubTree::canUseTemplateIdentification | ( |  | ) | const
| virtual

check whether template identification is possible at all.

According to the DICOM standard, it can be used if "the template consists of a single CONTAINER with nested content, and it is the outermost invocation of a set of nested templates that start with the same CONTAINER." With other words, the tree should have a single root node with value type "CONTAINER".

Returns
  OFTrue if template identification is possible, OFFalse otherwise

## ◆ checkByReferenceRelationships()

template<typename T_Cursor >

OFCondition DSRDocumentSubTree::checkByReferenceRelationships | ( | const size_t | mode = `0`,
|  | const size_t | flags = `0`
| ) |  |
| protected

check the by-reference relationships (if any) for validity.

This function checks whether all by-reference relationships possibly contained in the document tree are valid according to the following restrictions: source and target node are not identical and the target node is not an ancestor of the source node (requirement from the DICOM standard to prevent loops -> directed acyclic graph, though this is not 100% true - see "reportlp.dcm" example). In addition, the position strings (used to encode by-reference relationships according to the DICOM standard) OR the node IDs (used internally to uniquely identify nodes) can be updated. Please note that the checking modes DSRTypes::CM_updatePositionString and DSRTypes::CM_updateNodeID are mutually exclusive.

Template Parameters

  T_Cursor | template type used for the cursor iterating the document (sub)tree

Parameters

  mode | mode used to customize the checking process (see DSRTypes::CM_xxx)
  flags | flag used to customize the reading (see DSRTypes::RF_xxx) and/or printing process (see DSRTypes::PF_xxx). Conflicting definitions are avoided using the appropriate bit mask (see DSRTypes::CB_xxx).

Returns
  status, EC_Normal if successful, an error code otherwise

## ◆ checkSubTreeConstraints()

virtual OFCondition DSRDocumentSubTree::checkSubTreeConstraints | ( | const DSRDocumentSubTree * | tree,
|  | const DSRIODConstraintChecker * | checker
| ) |  | const
| protected virtual

check whether the given subtree complies with the constraints of the given checker

Parameters

  tree | pointer to subtree that should be checked
  checker | pointer to relationship content constraints checker to be used. If NULL, no checks are performed by this method.

Returns
  status, EC_Normal if successful, an error code otherwise

## ◆ clone()

virtual DSRDocumentSubTree* DSRDocumentSubTree::clone | ( |  | ) | const
| virtual

clone this subtree.

Internally, the copy constructor is used, so the corresponding comments apply.

Returns
  copy of this subtree

Reimplemented in DSRSubTemplate, DSRRootTemplate, and DSRDocumentTree.

## ◆ cloneCurrentTreeNode()

virtual DSRDocumentTreeNode* DSRDocumentSubTree::cloneCurrentTreeNode | ( |  | ) | const
| virtual

clone the current tree node.

Internally, the copy constructor of the respective tree node class is used, so the corresponding comments apply. Please note that the returned tree node has to be deleted by the caller if it is not added to the document tree using addContentItem().

Returns
  pointer to a copy of the current tree node, NULL in case of error

## ◆ cloneSubTree() [1/2]

static DSRDocumentSubTree* DSRDocumentSubTree::cloneSubTree | ( | const DSRDocumentTreeNodeCursor & | startCursor,
|  | const size_t | stopAfterNodeID = `0`
| ) |  |
| static protected

clone a particular subtree, i.e. a fragment of a tree

Parameters

  startCursor | cursor pointing to first node of the subtree to be copied
  stopAfterNodeID | ID of the node after which the cloning should stop

Returns
  pointer to a copy of the specified subtree, NULL in case of error

## ◆ cloneSubTree() [2/2]

virtual DSRDocumentSubTree* DSRDocumentSubTree::cloneSubTree | ( | const size_t | stopAfterNodeID = `0` | ) | const
| virtual

clone a subtree, i.e. a fragment of this tree.

The cloning starts with the current node and ends with the given node. Please note that the returned subtree has to be deleted by the caller if it is not inserted into the document tree using insertSubTree().

Parameters

  stopAfterNodeID | ID of the node after which the cloning should stop. By default (0), the process ends after cloning the current node with all of its child nodes (if any).

Returns
  pointer to a copy of the specified subtree, NULL in case of error

Reimplemented from DSRTree< DSRDocumentTreeNode >.

## ◆ compareTemplateIdentification()

virtual OFBool DSRDocumentSubTree::compareTemplateIdentification | ( | const OFString & | templateIdentifier,
|  | const OFString & | mappingResource,
|  | const OFString & | mappingResourceUID = `""`
| ) |  | const
| virtual

compare template identification of the root node with given values.

Please note that the comparison only takes place if there is a single node at the root of the tree and its value type is CONTAINER.

Parameters

  templateIdentifier | template identifier to compare with
  mappingResource | mapping resource that defines the template
  mappingResourceUID | uniquely identifies the mapping resource (optional). Not used for comparison if the value is empty.

Returns
  OFTrue if template identification can be compared and the values are identical, OFFalse otherwise

## ◆ countNodes()

size_t DSRDocumentSubTree::countNodes | ( | const OFBool | searchIntoSubTemplates = `OFFalse`,
|  | const OFBool | countIncludedTemplateNodes = `OFTrue`
| ) |  | const

count number of content items (nodes) in the document tree.

This method iterates over all nodes that are stored in the document tree. By default, included sub-templates are counted as a single node (see options).

Parameters

  searchIntoSubTemplates | optional flag indicating whether to also count the content of included sub-templates (i.e. the nodes of the managed subtrees)
  countIncludedTemplateNodes | optional flag indicating whether to count the DSRIncludedTemplateTreeNode instances as nodes. See includeTemplate() for details.

Returns
  number of nodes, 0 if document tree is empty

## ◆ createExpandedSubTree()

virtual OFCondition DSRDocumentSubTree::createExpandedSubTree | ( | DSRDocumentSubTree *& | tree | ) | const
| virtual

created an expanded version of this (sub)tree.

Expanded means that no instance of DSRIncludedTemplateTreeNode will exist in the new document tree, i.e. all of them are replaced by their content (subtree). Please note that the returned subtree has to be deleted by the caller if it is not inserted into the document tree using insertSubTree().

Parameters

  tree | variable that will store the pointer to the new subtree

Returns
  status, EC_Normal if successful, an error code otherwise

## ◆ expandIncludedTemplates()

virtual OFCondition DSRDocumentSubTree::expandIncludedTemplates | ( | DSRDocumentSubTree * | tree | ) | const
| protected virtual

expand all "included template" content items in a given (sub)tree.

Expanding means that all instances of DSRIncludedTemplateTreeNode are replaced by their content (subtree). Please note that the internal cursor of the given 'tree' is set to the root node if no error occurred. Otherwise, the cursor points to the content item that caused the problem.

Parameters

  tree | pointer to the subtree that should be expanded

Returns
  status, EC_Normal if successful, an error code otherwise

## ◆ extractNode()

virtual DSRDocumentTreeNode* DSRDocumentSubTree::extractNode | ( |  | ) |
| protected virtual

extract current node from tree.

Please note that not only the specified node but also all of its child nodes are extracted from the tree. The cursor is set automatically to a new valid position.

Returns
  pointer to extracted node, NULL in case of error (or the tree was empty)

Reimplemented from DSRTree< DSRDocumentTreeNode >.

## ◆ extractSubTree()

virtual DSRDocumentSubTree* DSRDocumentSubTree::extractSubTree | ( |  | ) |
| virtual

extract a subtree, i.e. a fragment from this tree.

The subtree is specified by the current node, which becomes the root of the subtree. In contrast to cloneSubTree(), this method also makes sure that the by-reference relationships are preserved (as long as both source and target node are contained in the same tree). Please note that the returned subtree has to be deleted by the caller if it is not inserted into the document tree using insertSubTree().

Returns
  pointer to the extracted subtree, NULL in case of error

Reimplemented from DSRTree< DSRDocumentTreeNode >.

## ◆ getAndRemoveRootNode()

virtual DSRDocumentTreeNode* DSRDocumentSubTree::getAndRemoveRootNode | ( |  | ) |
| protected virtual

get pointer to root node and "forget" the internal reference to this node.

In other words: after calling this method, the stored tree will be empty. This also means that the caller is responsible for deleting the allocated memory.

Returns
  pointer to root node, might be NULL (empty tree)

Reimplemented from DSRTree< DSRDocumentTreeNode >.

## ◆ getCurrentContentItem()

virtual DSRContentItem& DSRDocumentSubTree::getCurrentContentItem | ( |  | ) |
| virtual

get reference to current content item.

This mechanism allows to access all content items without using pointers.

Returns
  reference to current content item (might be invalid)

Reimplemented in DSRSubTemplate.

## ◆ getCurrentNode()

virtual const DSRDocumentTreeNode* DSRDocumentSubTree::getCurrentNode | ( |  | ) | const
| virtual

get read-only access to current node (content item)

Returns
  pointer to current node (might be NULL)

## ◆ getCursorToCurrentNode()

virtual OFBool DSRDocumentSubTree::getCursorToCurrentNode | ( | DSRDocumentTreeNodeCursor & | cursor | ) | const
| virtual

get a cursor to the current node of this document tree.

This cursor can be used to iterate over the nodes of the document subtree that starts at the current node without changing the internal cursor. Please note that the cursor might become invalid, e.g. by pointing to a non-existing node if the content of the document tree is modified after the cursor has been retrieved. Included sub-templates are not supported by this type of cursor, i.e. the subtree that is managed by an instance of DSRIncludedTemplateTreeNode is not iterated.

Parameters

  cursor | reference to variable where the cursor is stored

Returns
  OFTrue is the returned 'cursor' is valid, OFFalse otherwise

## ◆ getCursorToRootNode() [1/2]

virtual OFBool DSRDocumentSubTree::getCursorToRootNode | ( | DSRDocumentTreeNodeCursor & | cursor | ) | const
| virtual

get a cursor to the root node of this document tree.

This cursor can be used to iterate over the nodes of the document tree without changing the internal cursor. Please note that the cursor might become invalid, e.g. by pointing to a non-existing node if the content of the document tree is modified after the cursor has been retrieved. Included sub-templates are not supported by this type of cursor, i.e. the subtree that is managed by an instance of DSRIncludedTemplateTreeNode is not iterated.

Parameters

  cursor | reference to variable where the cursor is stored

Returns
  OFTrue is the returned 'cursor' is valid, OFFalse otherwise

## ◆ getCursorToRootNode() [2/2]

virtual OFBool DSRDocumentSubTree::getCursorToRootNode | ( | DSRIncludedTemplateNodeCursor & | cursor | ) | const
| virtual

get a cursor to the root node of this document tree.

This cursor can be used to iterate over the nodes of the document tree without changing the internal cursor. Please note that the cursor might become invalid, e.g. by pointing to a non-existing node if the content of the document tree is modified after the cursor has been retrieved. This type of cursor also supports included sub-templates, i.e. the subtree that is managed by an instance of DSRIncludedTemplateTreeNode is also iterated.

Parameters

  cursor | reference to variable where the cursor is stored

Returns
  OFTrue is the returned 'cursor' is valid, OFFalse otherwise

## ◆ getCursorToSubTree()

virtual OFBool DSRDocumentSubTree::getCursorToSubTree | ( | DSRDocumentTreeNodeCursor & | cursor | ) | const
| virtual

get a cursor to the subtree below the current node.

This cursor can be used to iterate over the nodes of the selected subtree without changing the internal cursor. Please note that the cursor might become invalid, e.g. by pointing to a non-existing node if the content of the document tree is modified after the cursor has been retrieved. Included sub-templates are not supported by this type of cursor, i.e. the subtree that is managed by an instance of DSRIncludedTemplateTreeNode is not iterated.

Parameters

  cursor | reference to variable where the cursor is stored

Returns
  OFTrue is the returned 'cursor' is valid, OFFalse otherwise

## ◆ getNode()

virtual DSRDocumentTreeNode* DSRDocumentSubTree::getNode | ( |  | ) | const
| protected virtual

get pointer to current node.

Hide this inherited method from the public interface.

Returns
  pointer to current node (might be NULL)

Reimplemented from DSRTreeNodeCursor< DSRDocumentTreeNode >.

## ◆ getTemplateIdentification() [1/2]

virtual OFCondition DSRDocumentSubTree::getTemplateIdentification | ( | OFString & | templateIdentifier,
|  | OFString & | mappingResource
| ) |  | const
| virtual

get template identifier and mapping resource from the root node of this tree.

See DSRDocumentTreeNode::getTemplateIdentification() for details on template identification. Please note that the template identification is only retrieved if there is a single node at the root of the tree and its value type is CONTAINER.

Parameters

  templateIdentifier | identifier of the template (might be empty)
  mappingResource | mapping resource that defines the template (might be empty)

Returns
  status, EC_Normal if successful, an error code otherwise

## ◆ getTemplateIdentification() [2/2]

virtual OFCondition DSRDocumentSubTree::getTemplateIdentification | ( | OFString & | templateIdentifier,
|  | OFString & | mappingResource,
|  | OFString & | mappingResourceUID
| ) |  | const
| virtual

get template identifier, mapping resource and optional mapping resource UID from the root node of this tree.

See DSRDocumentTreeNode::getTemplateIdentification() for details on template identification. Please note that the template identification is only retrieved if there is a single node at the root of the tree and its value type is CONTAINER.

Parameters

  templateIdentifier | identifier of the template (might be empty)
  mappingResource | mapping resource that defines the template (might be empty)
  mappingResourceUID | uniquely identifies the mapping resource (might be empty)

Returns
  status, EC_Normal if successful, an error code otherwise

## ◆ gotoAnnotatedNode()

virtual size_t DSRDocumentSubTree::gotoAnnotatedNode | ( | const OFString & | annotationText,
|  | const OFBool | startFromRoot = `OFTrue`
| ) |  |
| virtual

set internal cursor to an annotated node.

If more than one node exists with the given annotation text, the first one will be selected. Use gotoNextAnnotatedNode() in order to go to the next matching node. In contrast to gotoNamedNode(), a "deep search" is always performed.

Parameters

  annotationText | annotation text of the node to be searched for
  startFromRoot | flag indicating whether to start from the root node or the current one

Returns
  ID of the new current node if successful, 0 otherwise

## ◆ gotoMatchingNode()

virtual size_t DSRDocumentSubTree::gotoMatchingNode | ( | const DSRDocumentTreeNodeFilter & | filter,
|  | const OFBool | startFromRoot = `OFTrue`,
|  | const OFBool | searchIntoSub = `OFTrue`
| ) |  |
| virtual

set internal cursor to a matching node.

If more than one node exists matching the given filter, the first one will be selected. Use gotoNextMatchingNode() in order to go to the next matching node.

Parameters

  filter | matching criterion based on a single or multiple filters
  startFromRoot | flag indicating whether to start from the root node or the current one
  searchIntoSub | flag indicating whether to search into sub-trees ("deep search") or on the current level only

Returns
  ID of the new current node if successful, 0 otherwise

## ◆ gotoNamedChildNode()

virtual size_t DSRDocumentSubTree::gotoNamedChildNode | ( | const DSRCodedEntryValue & | conceptName | ) |
| virtual

set internal cursor to a named node (starting from the first child of the current node and searching on this level only).

This is just a shortcut for calling gotoChild() followed by gotoNamedNode() with 'searchIntoSub' being OFFalse, i.e. only the first sub-level is checked. If more than one node exists with the given concept name, the first one will be selected.

Parameters

  conceptName | concept name of the node to be searched for

Returns
  ID of the new current node if successful, 0 otherwise

## ◆ gotoNamedNode()

virtual size_t DSRDocumentSubTree::gotoNamedNode | ( | const DSRCodedEntryValue & | conceptName,
|  | const OFBool | startFromRoot = `OFTrue`,
|  | const OFBool | searchIntoSub = `OFTrue`
| ) |  |
| virtual

set internal cursor to a named node.

If more than one node exists with the given concept name, the first one will be selected. Use gotoNextNamedNode() in order to go to the next matching node.

Parameters

  conceptName | concept name of the node to be searched for
  startFromRoot | flag indicating whether to start from the root node or the current one
  searchIntoSub | flag indicating whether to search into sub-trees ("deep search") or on the current level only

Returns
  ID of the new current node if successful, 0 otherwise

## ◆ gotoNamedNodeInSubTree()

virtual size_t DSRDocumentSubTree::gotoNamedNodeInSubTree | ( | const DSRCodedEntryValue & | conceptName,
|  | const OFBool | searchIntoSub = `OFTrue`
| ) |  |
| virtual

set internal cursor to a named node in the subtree below the current node.

If more than one node exists with the given concept name, the first one will be selected. If the current node has no children, the cursor is not moved.

Parameters

  conceptName | concept name of the node to be searched for
  searchIntoSub | flag indicating whether to search into sub-trees ("deep search") or on the first sub-level only

Returns
  ID of the new current node if successful, 0 otherwise

## ◆ gotoNextAnnotatedNode()

virtual size_t DSRDocumentSubTree::gotoNextAnnotatedNode | ( | const OFString & | annotationText | ) |
| virtual

set internal cursor to the next annotated node.

Starts from "next" node, i.e. either the first child of the current node or the first sibling following the current node.

Parameters

  annotationText | annotation text of the node to be searched for

Returns
  ID of the new current node if successful, 0 otherwise

## ◆ gotoNextMatchingNode()

virtual size_t DSRDocumentSubTree::gotoNextMatchingNode | ( | const DSRDocumentTreeNodeFilter & | filter,
|  | const OFBool | searchIntoSub = `OFTrue`
| ) |  |
| virtual

set internal cursor to the next matching node.

Starts from "next" node, i.e. either the first child of the current node or the first sibling following the current node.

Parameters

  filter | matching criterion based on a single or multiple filters
  searchIntoSub | flag indicating whether to search into sub-trees ("deep search") or on the current level only

Returns
  ID of the new current node if successful, 0 otherwise

## ◆ gotoNextNamedNode()

virtual size_t DSRDocumentSubTree::gotoNextNamedNode | ( | const DSRCodedEntryValue & | conceptName,
|  | const OFBool | searchIntoSub = `OFTrue`
| ) |  |
| virtual

set internal cursor to the next named node.

Starts from "next" node, i.e. either the first child of the current node or the first sibling following the current node.

Parameters

  conceptName | concept name of the node to be searched for
  searchIntoSub | flag indicating whether to search into sub-trees ("deep search") or on the current level only

Returns
  ID of the new current node if successful, 0 otherwise

## ◆ hasTemplateIdentification()

virtual OFBool DSRDocumentSubTree::hasTemplateIdentification | ( |  | ) | const
| virtual

check whether template identification is set

Returns
  OFTrue if template identification is set, OFFalse otherwise

## ◆ includeTemplate()

virtual OFCondition DSRDocumentSubTree::includeTemplate | ( | const DSRSharedSubTemplate & | subTemplate,
|  | const E_AddMode | addMode = `AM_belowCurrent`,
|  | const E_RelationshipType | defaultRelType = `RT_unknown`
| ) |  |
| protected virtual

include specified sub-template, i.e. add a new DSRIncludedTemplateTreeNode, which references this template, to the current content item.

Please note that no checks are performed that would make sure that the template with its top-level nodes can actually be added, e.g. by using an IOD constraint checker. This is also the reason why this method is "protected" and not "public", i.e. it can only be used by derived classes, e.g. DSRSubTemplate and its children.

Parameters

  subTemplate | shared pointer to a sub-template that should be included into this tree (at the current position)
  addMode | flag specifying at which position to add the 'subTemplate' (e.g. after or below the current node)
  defaultRelType | default relationship type that will be used when the subtree that is managed by the 'subTemplate' is inserted into this tree and the relationship type of one of the top-level nodes is "unknown". Also see documentation of createExpandedSubTree().

Returns
  status, EC_Normal if successful, an error code otherwise

## ◆ insertSubTree()

virtual OFCondition DSRDocumentSubTree::insertSubTree | ( | DSRDocumentSubTree * | tree,
|  | const E_AddMode | addMode = `AM_belowCurrent`,
|  | const E_RelationshipType | defaultRelType = `RT_unknown`,
|  | const OFBool | deleteIfFail = `OFFalse`
| ) |  |
| virtual

insert specified subtree to this tree, i.e. add it to the current content item.

If possible, this method adds a given new subtree to the current content item. The method canInsertSubTree() is called internally to check the parameters first. Please note that no copy of the given subtree is created. Therefore, the subtree has to be created with new() or with cloneSubTree() - do not use a reference to a local variable and do not delete it a second time.

Parameters

  tree | pointer to new subtree to be inserted (should not be empty). Reference becomes invalid after successful insertion!
  addMode | flag specifying at which position to add the new subtree (e.g. after or below the current node)
  defaultRelType | default relationship type between the top-level nodes of the given subtree and the current node. This relationship type is used if the one of a top-level node is "unknown".
  deleteIfFail | flag specifying whether to delete the given 'tree' if adding fails. By default, the tree is not deleted, i.e. in case of error it has to be deleted by the caller.

Returns
  status, EC_Normal if successful, an error code otherwise

## ◆ isCursorValid()

virtual OFBool DSRDocumentSubTree::isCursorValid | ( |  | ) | const
| virtual

check whether the internal cursor, which points to the current content item, is valid

Returns
  OFTrue if cursor is valid, OFFalse otherwise

## ◆ isExpandedDocumentTree()

virtual OFBool DSRDocumentSubTree::isExpandedDocumentTree | ( |  | ) | const
| virtual

check whether this subtree is an expanded document tree.

Expanded means that no instances of DSRIncludedTemplateTreeNode exist in the document tree, i.e. no templates were included or all of them were replaced by their content (subtree).

Returns
  OFTrue if subtree is an expanded document tree, OFFalse otherwise

## ◆ isValid()

virtual OFBool DSRDocumentSubTree::isValid | ( |  | ) | const
| virtual

check whether the current internal state is valid.

A subtree is valid if it is not empty.

Returns
  OFTrue if valid, OFFalse otherwise

Reimplemented from DSRTreeNodeCursor< DSRDocumentTreeNode >.

Reimplemented in DSRSubTemplate, DSRRootTemplate, DSRDocumentTree, TID300_Measurement< T_Measurement, T_Units, T_Method, T_Derivation, T_Purpose >, TID1600_ImageLibrary, TID1501_MeasurementGroup< T_Measurement, T_Units, T_Method, T_Derivation, T_Purpose >, TID1500_MeasurementReport, TID1419_ROIMeasurements_Measurement< T_Measurement, T_Units, T_Method, T_Derivation >, and TID1411_VolumetricROIMeasurements< T_Measurement, T_Units, T_Method, T_Derivation >.

## ◆ isValidDocumentTree()

virtual OFBool DSRDocumentSubTree::isValidDocumentTree | ( | const E_RelationshipType | defaultRelType = `RT_unknown` | ) | const
| virtual

check whether this subtree is a valid document tree.

In order to be a valid document tree, there should be a single root node only, with the value type "CONTAINER", and the internal relationship type of this node should be DSRTypes::RT_isRoot.

Parameters

  defaultRelType | default relationship type that is used if the one of the top-level node (root node) is "unknown"

Returns
  OFTrue if subtree is a valid document tree, OFFalse otherwise

## ◆ operator=()

DSRDocumentSubTree& DSRDocumentSubTree::operator= | ( | DSRDocumentSubTree | tree | ) |

assignment operator.

Please note that internally the copy constructor is used, so the same comments apply.

Parameters

  tree | subtree to be copied

Returns
  reference to this subtree after copying

## ◆ print()

virtual OFCondition DSRDocumentSubTree::print | ( | STD_NAMESPACE ostream & | stream,
|  | const size_t | flags = `0`,
|  | const DSRPositionCounter * | posCounter = `NULL`
| ) |  |
| virtual

print current SR document tree to specified output stream

Parameters

  stream | output stream
  flags | optional flag used to customize the output (see DSRTypes::PF_xxx)
  posCounter | optional pointer to position counter that should be used to initialize the counter for line indentation or numbering of nested content items

Returns
  status, EC_Normal if successful, an error code otherwise

Reimplemented in DSRDocumentTree.

## ◆ removeCurrentContentItem()

virtual size_t DSRDocumentSubTree::removeCurrentContentItem | ( |  | ) |
| virtual

remove current content item from tree.

Please note that not only the specified node but also all of its child nodes are removed from the tree and then deleted. The internal cursor is set automatically to a new valid position.

Returns
  ID of the node which became the current one after deletion, 0 if an error occurred or the tree is now empty.

## ◆ removeNode()

virtual size_t DSRDocumentSubTree::removeNode | ( |  | ) |
| protected virtual

remove current node from tree.

Please note that not only the specified node but also all of his child nodes are removed from the tree and deleted afterwards. The cursor is set automatically to a new valid position.

Returns
  ID of the node which became the current one after deletion, 0 if an error occurred or the tree is now empty.

Reimplemented from DSRTree< DSRDocumentTreeNode >.

## ◆ removeSubTree()

virtual OFCondition DSRDocumentSubTree::removeSubTree | ( | const size_t | searchID = `0` | ) |
| virtual

remove a subtree from this tree.

The subtree to be removed (and deleted) is either specified by the current node or by the node with the given ID. Afterwards, the internal cursor is set automatically to a new valid position. It would be an error to remove a subtree from an empty tree.

Parameters

  searchID | ID of the root node specifying the subtree to be removed. By default (0), the current node is used.

Returns
  status, EC_Normal if successful, an error code otherwise

## ◆ replaceNode()

virtual size_t DSRDocumentSubTree::replaceNode | ( | DSRDocumentTreeNode * | node | ) |
| protected virtual

replace current node by the given one.

Please note that no copy of the given node is created. Therefore, the node should be created with new() - do not use a reference to a local variable. If the node could be replaced successfully, the "old" node (and all of its child nodes) are deleted, and the cursor is set to the new one.

Parameters

  node | pointer to the new node to replace the current one

Returns
  ID of the new node if successful, 0 otherwise

## ◆ resetReferenceTargetFlag()

virtual void DSRDocumentSubTree::resetReferenceTargetFlag | ( |  | ) |
| protected virtual

reset flag for all content items whether they are target of a by-reference relationship.

This function calls 'setReferenceTarget(OFFalse)' for all content items in the tree.

## ◆ setObservationDateTime()

virtual OFCondition DSRDocumentSubTree::setObservationDateTime | ( | const OFString & | observationDateTime,
|  | const OFBool | check = `OFTrue`
| ) |  |
| virtual

set observation date/time for all content items in the document tree.

Calling this method might be useful when a (sub)tree is copied into a new document, since content date and time of the new document are likely to be different than the date and time of the original observation.

Parameters

  observationDateTime | value to be set (might be an empty string)
  check | check 'observationDateTime' for conformance with VR (DT) and VM (1) if enabled

Returns
  status, EC_Normal if successful, an error code otherwise

## ◆ setTemplateIdentification()

virtual OFCondition DSRDocumentSubTree::setTemplateIdentification | ( | const OFString & | templateIdentifier,
|  | const OFString & | mappingResource,
|  | const OFString & | mappingResourceUID = `""`,
|  | const OFBool | check = `OFTrue`
| ) |  |
| virtual

set template identifier and mapping resource to the root node of this tree.

The identification is valid if the first two values are either present (non-empty) or all three values are absent (empty). See DSRDocumentTreeNode::getTemplateIdentification() for details. Please note that the template identification is only set if there is a single node at the root of the tree and its value type is CONTAINER.

Parameters

  templateIdentifier | identifier of the template to be set
  mappingResource | mapping resource that defines the template
  mappingResourceUID | uniquely identifies the mapping resource (optional)
  check | check 'templateIdentifier', 'mappingResource' and 'mappingResourceUID' for conformance with VR (CS,UI) and VM (1) if enabled

Returns
  status, EC_Normal if successful, an error code otherwise

## ◆ swap()

void DSRDocumentSubTree::swap | ( | DSRDocumentSubTree & | tree | ) |
| protected

fast, non-throwing swap function.

The time complexity of this function is constant.

Parameters

  tree | subtree to swap with

## ◆ updateByReferenceRelationships()

virtual OFCondition DSRDocumentSubTree::updateByReferenceRelationships | ( | const OFBool | updateIncludedTemplates = `OFFalse` | ) |
| virtual

update the position strings used to encode by-reference relationships (if any).

Internally, this method calls checkByReferenceRelationships() with the 'mode' parameter being DSRTypes::CM_updatePositionString. It should be called before this subtree is cloned in order to make sure that the by-reference relationships (if any) still work on the cloned subtree. This method should also be called before accessing the position string of a referenced content item, see DSRByReferenceTreeNode::getReferencedContentItem().

Parameters

  updateIncludedTemplates | optional flag indicating whether to also update the subtrees managed by included sub-templates

Returns
  status, EC_Normal if successful, an error code otherwise

## ◆ updateTreeForOutput()

virtual void DSRDocumentSubTree::updateTreeForOutput | ( |  | ) |
| protected virtual

update the tree for subsequent output, e.g. for being printed or added to an SR document.

By default, this virtual function does nothing but is called automatically by the affected output methods and should be overwritten in derived classes.

Reimplemented in DSRSubTemplate, and DSRRootTemplate.

## ◆ validByReferenceRelationship()

virtual OFBool DSRDocumentSubTree::validByReferenceRelationship | ( | const OFString & | sourcePosition,
|  | const OFString & | targetPosition
| ) |  |
| protected virtual

check whether a by-reference relationship from a given source to a target node (specified by the position strings) is valid, i.e. is allowed according to the DICOM standard.

This check should prevent loops (directed acyclic graphs).

Parameters

  sourcePosition | position string of the source content item to be checked
  targetPosition | position string of the target content item to be checked

Returns
  OFTrue if by-reference relationship is allowed, OFFalse otherwise

## ◆ writeXML()

virtual OFCondition DSRDocumentSubTree::writeXML | ( | STD_NAMESPACE ostream & | stream,
|  | const size_t | flags = `0`
| ) |  |
| virtual

write current SR document tree in XML format

Parameters

  stream | output stream to which the XML document is written
  flags | optional flag used to customize the output (see DSRTypes::XF_xxx)

Returns
  status, EC_Normal if successful, an error code otherwise

The documentation for this class was generated from the following file:

- dcmsr/include/dcmtk/dcmsr/dsrdocst.h

Generated on Mon Dec 15 2025 for DCMTK Version 3.7.0 by Doxygen 1.9.1