/usr/include/dcmtk/dcmiod/iodrules.h is in libdcmtk-dev 3.6.2-3build3.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 | /*
*
* Copyright (C) 2015-2016, Open Connections GmbH
* All rights reserved. See COPYRIGHT file for details.
*
* This software and supporting documentation are maintained by
*
* OFFIS e.V.
* R&D Division Health
* Escherweg 2
* D-26121 Oldenburg, Germany
*
*
* Module: dcmiod
*
* Author: Michael Onken
*
* Purpose: Class for managing attribute rules as found in DICOM modules
*
*/
#ifndef IODRULES_H
#define IODRULES_H
#include "dcmtk/config/osconfig.h"
#include "dcmtk/ofstd/ofstring.h"
#include "dcmtk/ofstd/ofmap.h"
#include "dcmtk/ofstd/ofcond.h"
#include "dcmtk/dcmdata/dctagkey.h"
#include "dcmtk/dcmiod/iodtypes.h"
#define INCLUDE_OSTREAM // for debugging
#include "dcmtk/ofstd/ofstdinc.h"
class DcmItem;
class DcmTagKey;
class DcmElement;
class IODRule;
/** Class representing rules for a set of DICOM attributes, e.g.\ for
* all attributes of a module, macro or the like. At the moment
* attributes within sequences are not yet supported.
*/
class DCMTK_DCMIOD_EXPORT IODRules
{
public:
/// iterator type to iterate over rule set
typedef OFMap<DcmTagKey, IODRule*>::iterator iterator;
/// const iterator type to iterate over rule set
typedef OFMap<DcmTagKey, IODRule*>::const_iterator const_iterator;
/** Constructor
*/
IODRules();
/** Returns deep copy of this object
* @return Deep copy of "this" object
*/
IODRules* clone();
/** Return iterator to first rule
* @return Iterator to the first rule
*/
iterator begin();
/** Return iterator to last rule
* @return Iterator to the last rule
*/
iterator end();
/** Adds rule to this rule set
* @param rule The rule to add (ownership is transferred to this class)
* @param overwriteExisting If OFTrue (default), an existing rule for the
* same attribute (tag) is overwritten, otherwise the rule is not
* taken over (and ownership stays with caller)
* @return OFTrue if rule could be added, error otherwise
*/
virtual OFBool addRule(IODRule* rule,
const OFBool overwriteExisting = OFFalse);
/** Delete rule by given tag key
* @param key Tag of the attribute rule to be deleted
* @return OFTrue if a rule could be found and deleted, OFFalse otherwise
*/
virtual OFBool deleteRule(const DcmTagKey key);
/** Get all rules that are marked belonging to a specific module
* @param moduleName The module name (e.g.\ "PatientModule")
* @return Vector with pointers to all the rules belonging to given module
*/
const OFVector<IODRule*> getByModule(const OFString& moduleName);
/** Get a rule by its tag
* @param key The tag to find the rule for
* @return The rule, if found, NULL otherwise
*/
IODRule* getByTag(const DcmTagKey& key) const;
/** Clear all rules
*/
virtual void clear();
/** Dump rules to stream, useful for debugging
* @param out The stream to dump to
*/
virtual void dump(STD_NAMESPACE ostream &out);
/** Destructor
*/
virtual ~IODRules();
private:
/// Map that holds all rules, accessible by their tag key
OFMap<DcmTagKey, IODRule*> m_Rules;
};
/** Class representing a single rule, that refers to a single attribute.
* Each rule is uniquely identified by the attribute's tag key and includes
* information on the Value Multiplicity (VM) of the attribute, its type
* (1, 1C, 2,...), the module (e.g.\ "PatientModule") or structure (e.g.
* "CodeSequenceMacro") it belongs to, a default value and its private
* creator if it is a private attribute. On top, the Information Entity
* according to the DICOM Model of the Real World can be stored, e.g.
* "Patient" for the "PatientModule".
*/
class DCMTK_DCMIOD_EXPORT IODRule
{
public:
/** Constructor to create a new attribute rule
* @param key The tag key of the attribute
* @param VM The VM of the attribute (notation like in DICOM part 6,
* e.g.\ "1-n")
* @param type The "IOD type" of the attribute.
* Allowed values "1", "1C", "2", "2C" and "3"
* @param module The module or "component" this attribute belongs to
* @param ie The Information Entity the module belongs to
* @param defaultValue The default value (default: empty)
* @param privateCreator The private creator of the attribute if attribute
* (default: No private creator)
*/
IODRule(const DcmTagKey& key,
const OFString& VM,
const OFString& type,
const OFString& module,
const DcmIODTypes::IOD_IE ie,
const OFString& defaultValue = "",
const OFString& privateCreator = "");
/** Return deep copy of this object
* @return Deep copy of "this" object
*/
IODRule* clone();
/** Get tag key of the attribute rule
* @return The tag key of the rule
*/
virtual DcmTagKey getTagKey() const;
/** Get private creator of the related attribute
* @return The private creator of the attribute
*/
virtual OFString getPrivateCreator() const;
/** The requirement type of the attribute (1, 1C, 2, 2C or 3)
* @return The requirement type of the attribute
*/
virtual OFString getType() const;
/** The VM of the attribute as noted in the DICOM standard part 6,
* e.g.\ "1-n" or "2"
* @return The VM
*/
virtual OFString getVM() const;
/** Get module (or component name) the related attribute belongs to
* @return The module or component name (e.g.\ "PatientModule" or
* "CodeSequenceMacro")
*/
virtual OFString getModule() const;
/** Get default value of this attribute
* @return The default value (might be empty)
*/
virtual OFString getDefaultValue() const;
/** Get Information Entity the related attribute belongs to
* @return The Information Entity (might be empty)
*/
virtual DcmIODTypes::IOD_IE getIE() const;
virtual OFBool setPrivateCreator(const OFString& val);
virtual OFBool setType(const OFString& val);
virtual OFBool setVM(const OFString& val);
virtual OFBool setModule(const OFString& val);
virtual OFBool setDefaultValue(const OFString& val);
/** Check whether the given item fulfills the requirements of
* this rule, i.e.\ the related attribute is checked within the
* given item
* @param item The item to check the attribute in
* @param quiet If OFTrue, no error or warning messages will be produced
* but only the return code will indicate OK or error.
* @return EC_Normal if this rule is fulfilled, error otherwise
*/
virtual OFCondition check(DcmItem& item,
const OFBool quiet = OFFalse);
/** Virtual Destructor
*/
virtual ~IODRule();
private:
/// Private undefined default constructor
IODRule();
/// Private undefined copy constructor
IODRule(const IODRule& rhs);
/// Tag key
DcmTagKey m_Key;
/// VM, see DcmElement::checkVM() for permitted values (e.g.\ "1-n")
OFString m_VM;
/// Requirement type: 1, 1C, 2, 2C or 3
OFString m_Type;
/// Module (e.g.\ "PatientModule" or "component name", e.g.\ "CodeSequenceMacro"
OFString m_Module;
/// The Information Entity the related attribute belongs to according to the
/// DICOM Model of the Real World, e.g.\ "Patient" for the attribute
/// "Patient Name"
DcmIODTypes::IOD_IE m_IE;
/// Default value for attribute
OFString m_DefaultValue;
/// Private Creator (if private attribute)
OFString m_PrivateCreator;
};
#endif // IODRULES_H
|