GDCM  2.2.6
gdcmFileMetaInformation.h
Go to the documentation of this file.
1 /*=========================================================================
2 
3  Program: GDCM (Grassroots DICOM). A DICOM library
4 
5  Copyright (c) 2006-2011 Mathieu Malaterre
6  All rights reserved.
7  See Copyright.txt or http://gdcm.sourceforge.net/Copyright.html for details.
8 
9  This software is distributed WITHOUT ANY WARRANTY; without even
10  the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
11  PURPOSE. See the above copyright notice for more information.
12 
13 =========================================================================*/
14 #ifndef GDCMFILEMETAINFORMATION_H
15 #define GDCMFILEMETAINFORMATION_H
16 
17 #include "gdcmPreamble.h"
18 #include "gdcmDataSet.h"
19 #include "gdcmDataElement.h"
20 #include "gdcmMediaStorage.h"
21 #include "gdcmTransferSyntax.h"
23 
24 namespace gdcm
25 {
41 {
42 public:
43  // FIXME: TransferSyntax::TS_END -> TransferSyntax::ImplicitDataElement
44  FileMetaInformation():DataSetTS(TransferSyntax::TS_END),MetaInformationTS(TransferSyntax::Unknown),DataSetMS(MediaStorage::MS_END) {}
45 
46  friend std::ostream &operator<<(std::ostream &_os, const FileMetaInformation &_val);
47 
48  bool IsValid() const { return true; }
49 
50  TransferSyntax::NegociatedType GetMetaInformationTS() const { return MetaInformationTS; }
51  void SetDataSetTransferSyntax(const TransferSyntax &ts);
52  const TransferSyntax &GetDataSetTransferSyntax() const { return DataSetTS; }
53  MediaStorage GetMediaStorage() const;
54 
55  // FIXME: no virtual function means: duplicate code...
56  void Insert(const DataElement& de) {
57  if( de.GetTag().GetGroup() == 0x0002 )
58  {
59  InsertDataElement( de );
60  }
61  else
62  {
63  gdcmErrorMacro( "Cannot add element with group != 0x0002 in the file meta header: " << de );
64  }
65  }
66  void Replace(const DataElement& de) {
67  Remove(de.GetTag());
68  Insert(de);
69  }
70 
72  std::istream &Read(std::istream &is);
73  std::istream &ReadCompat(std::istream &is);
74 
76  std::ostream &Write(std::ostream &os) const;
77 
79  void FillFromDataSet(DataSet const &ds);
80 
82  const Preamble &GetPreamble() const { return P; }
83  Preamble &GetPreamble() { return P; }
84  void SetPreamble(const Preamble &p) { P = p; }
85 
87  static void SetImplementationClassUID(const char * imp);
88  static void AppendImplementationClassUID(const char * imp);
89  static const char *GetImplementationClassUID();
90  static void SetImplementationVersionName(const char * version);
91  static const char *GetImplementationVersionName();
92  static void SetSourceApplicationEntityTitle(const char * title);
93  static const char *GetSourceApplicationEntityTitle();
94 
96  {
97  DataSetTS = fmi.DataSetTS;
98  MetaInformationTS = fmi.MetaInformationTS;
99  DataSetMS = fmi.DataSetMS;
100  }
101 
102  VL GetFullLength() const {
103  return P.GetLength() + DataSet::GetLength<ExplicitDataElement>();
104  }
105 
106 protected:
107  void ComputeDataSetTransferSyntax(); // FIXME
108 
109  template <typename TSwap>
110  std::istream &ReadCompatInternal(std::istream &is);
111 
112  void Default();
113  void ComputeDataSetMediaStorageSOPClass();
114 
118 
119 protected:
120  static const char * GetFileMetaInformationVersion();
121  static const char * GetGDCMImplementationClassUID();
122  static const char * GetGDCMImplementationVersionName();
123  static const char * GetGDCMSourceApplicationEntityTitle();
124 
125 private:
126  Preamble P;
127 
128 //static stuff:
129  static const char GDCM_FILE_META_INFORMATION_VERSION[];
130  static const char GDCM_IMPLEMENTATION_CLASS_UID[];
131  static const char GDCM_IMPLEMENTATION_VERSION_NAME[];
132  static const char GDCM_SOURCE_APPLICATION_ENTITY_TITLE[];
133  static std::string ImplementationClassUID;
134  static std::string ImplementationVersionName;
135  static std::string SourceApplicationEntityTitle;
136 };
137 //-----------------------------------------------------------------------------
138 inline std::ostream& operator<<(std::ostream &os, const FileMetaInformation &val)
139 {
140  os << val.GetPreamble() << std::endl;
141  val.Print( os );
142  return os;
143 }
144 
145 } // end namespace gdcm
146 
147 #endif //GDCMFILEMETAINFORMATION_H
void Print(std::ostream &os, std::string const &indent="") const
Definition: gdcmDataSet.h:79
Class to represent a Data Set (which contains Data Elements) A Data Set represents an instance of a r...
Definition: gdcmDataSet.h:55
VL GetLength() const
Definition: gdcmVL.h:68
TransferSyntax::NegociatedType MetaInformationTS
Definition: gdcmFileMetaInformation.h:116
MSType
Definition: gdcmMediaStorage.h:44
bool IsValid() const
Definition: gdcmFileMetaInformation.h:48
FileMetaInformation(FileMetaInformation const &fmi)
Definition: gdcmFileMetaInformation.h:95
void SetPreamble(const Preamble &p)
Definition: gdcmFileMetaInformation.h:84
void Insert(const DataElement &de)
Definition: gdcmFileMetaInformation.h:56
#define GDCM_EXPORT
Definition: gdcmWin32.h:34
const Preamble & GetPreamble() const
Get Preamble.
Definition: gdcmFileMetaInformation.h:82
void Replace(const DataElement &de)
Definition: gdcmFileMetaInformation.h:66
Value Length.
Definition: gdcmVL.h:29
Class to represent a File Meta Information.
Definition: gdcmFileMetaInformation.h:40
std::ostream & operator<<(std::ostream &os, const Directory &d)
Definition: gdcmDirectory.h:92
NegociatedType
Definition: gdcmTransferSyntax.h:42
Class to represent a Data Element either Implicit or Explicit.
Definition: gdcmDataElement.h:58
DICOM Preamble (Part 10)
Definition: gdcmPreamble.h:27
Class to manipulate Transfer Syntax.
Definition: gdcmTransferSyntax.h:39
Preamble & GetPreamble()
Definition: gdcmFileMetaInformation.h:83
FileMetaInformation()
Definition: gdcmFileMetaInformation.h:44
const Tag & GetTag() const
Get Tag.
Definition: gdcmDataElement.h:67
const TransferSyntax & GetDataSetTransferSyntax() const
Definition: gdcmFileMetaInformation.h:52
VL GetFullLength() const
Definition: gdcmFileMetaInformation.h:102
#define gdcmErrorMacro(msg)
Error this is pretty bad, more than just warning It could mean lost of data, something not handle...
Definition: gdcmTrace.h:163
TransferSyntax::NegociatedType GetMetaInformationTS() const
Definition: gdcmFileMetaInformation.h:50
uint16_t GetGroup() const
Returns the &#39;Group number&#39; of the given Tag.
Definition: gdcmTag.h:55
MediaStorage::MSType DataSetMS
Definition: gdcmFileMetaInformation.h:117
MediaStorage.
Definition: gdcmMediaStorage.h:41
TransferSyntax DataSetTS
Definition: gdcmFileMetaInformation.h:115

Generated on Sat Dec 21 2013 05:56:17 for GDCM by doxygen 1.8.5
SourceForge.net Logo