gdcmFileMetaInformation.h

Go to the documentation of this file.
00001 /*=========================================================================
00002 
00003   Program: GDCM (Grassroots DICOM). A DICOM library
00004   Module:  $URL$
00005 
00006   Copyright (c) 2006-2010 Mathieu Malaterre
00007   All rights reserved.
00008   See Copyright.txt or http://gdcm.sourceforge.net/Copyright.html for details.
00009 
00010      This software is distributed WITHOUT ANY WARRANTY; without even
00011      the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
00012      PURPOSE.  See the above copyright notice for more information.
00013 
00014 =========================================================================*/
00015 #ifndef GDCMFILEMETAINFORMATION_H
00016 #define GDCMFILEMETAINFORMATION_H
00017 
00018 #include "gdcmPreamble.h"
00019 #include "gdcmDataSet.h"
00020 #include "gdcmDataElement.h"
00021 #include "gdcmMediaStorage.h"
00022 #include "gdcmTransferSyntax.h"
00023 #include "gdcmExplicitDataElement.h"
00024 
00025 namespace gdcm
00026 {
00041 class GDCM_EXPORT FileMetaInformation : public DataSet
00042 {
00043 public:
00044   // FIXME: TransferSyntax::TS_END -> TransferSyntax::ImplicitDataElement
00045   FileMetaInformation():DataSetTS(TransferSyntax::TS_END),MetaInformationTS(TransferSyntax::Unknown),DataSetMS(MediaStorage::MS_END) {}
00046  ~FileMetaInformation() { };
00047 
00048   friend std::ostream &operator<<(std::ostream &_os, const FileMetaInformation &_val);
00049 
00050   bool IsValid() const { return true; }
00051 
00052   TransferSyntax::NegociatedType GetMetaInformationTS() const { return MetaInformationTS; }
00053   void SetDataSetTransferSyntax(const TransferSyntax &ts);
00054   const TransferSyntax &GetDataSetTransferSyntax() const { return DataSetTS; }
00055   MediaStorage GetMediaStorage() const;
00056 
00057   // FIXME: no virtual function means: duplicate code...
00058   void Insert(const DataElement& de) {
00059     if( de.GetTag().GetGroup() == 0x0002 )
00060       {
00061       InsertDataElement( de );
00062       }
00063     else
00064       {
00065       gdcmErrorMacro( "Cannot add element with group != 0x0002 in the file meta header: " << de );
00066       }
00067   }
00068   void Replace(const DataElement& de) {
00069     Remove(de.GetTag());
00070     Insert(de);
00071   }
00072 
00074   std::istream &Read(std::istream &is);
00075   std::istream &ReadCompat(std::istream &is);
00076 
00078   std::ostream &Write(std::ostream &os) const;
00079 
00081   void FillFromDataSet(DataSet const &ds);
00082 
00084   const Preamble &GetPreamble() const { return P; }
00085   Preamble &GetPreamble() { return P; }
00086   void SetPreamble(const Preamble &p) { P = p; }
00087 
00089   static void SetImplementationClassUID(const char * imp);
00090   static void AppendImplementationClassUID(const char * imp);
00091   static const char *GetImplementationClassUID();
00092   static void SetImplementationVersionName(const char * version);
00093   static const char *GetImplementationVersionName();
00094   static void SetSourceApplicationEntityTitle(const char * title);
00095   static const char *GetSourceApplicationEntityTitle();
00096 
00097   FileMetaInformation(FileMetaInformation const &fmi):DataSet(fmi)
00098     {
00099     DataSetTS = fmi.DataSetTS;
00100     MetaInformationTS = fmi.MetaInformationTS;
00101     DataSetMS = fmi.DataSetMS;
00102     }
00103 
00104     VL GetFullLength() const {
00105       return P.GetLength() + DataSet::GetLength<ExplicitDataElement>();
00106     }
00107 
00108 protected:
00109   void ComputeDataSetTransferSyntax(); // FIXME
00110 
00111   template <typename TSwap>
00112   std::istream &ReadCompatInternal(std::istream &is);
00113 
00114   void Default();
00115   void ComputeDataSetMediaStorageSOPClass();
00116 
00117   TransferSyntax DataSetTS;
00118   TransferSyntax::NegociatedType MetaInformationTS;
00119   MediaStorage::MSType DataSetMS;
00120 
00121 protected:
00122   static const char * GetFileMetaInformationVersion();
00123   static const char * GetGDCMImplementationClassUID();
00124   static const char * GetGDCMImplementationVersionName();
00125   static const char * GetGDCMSourceApplicationEntityTitle();
00126 
00127 private:
00128   Preamble P;
00129 
00130 //static stuff:
00131   static const char GDCM_FILE_META_INFORMATION_VERSION[];
00132   static const char GDCM_IMPLEMENTATION_CLASS_UID[];
00133   static const char GDCM_IMPLEMENTATION_VERSION_NAME[];
00134   static const char GDCM_SOURCE_APPLICATION_ENTITY_TITLE[];
00135   static std::string ImplementationClassUID;
00136   static std::string ImplementationVersionName;
00137   static std::string SourceApplicationEntityTitle;
00138 };
00139 //-----------------------------------------------------------------------------
00140 inline std::ostream& operator<<(std::ostream &os, const FileMetaInformation &val)
00141 {
00142   os << val.GetPreamble() << std::endl;
00143   val.Print( os );
00144   return os;
00145 }
00146 
00147 } // end namespace gdcm
00148 
00149 #endif //GDCMFILEMETAINFORMATION_H
00150 

Generated on Sat Dec 4 2010 08:58:43 for GDCM by doxygen 1.7.2
SourceForge.net Logo