# gdcmCSAHeaderDict.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-2009 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 __gdcmCSAHeaderDict_h
    00016 #define __gdcmCSAHeaderDict_h
    00017
    00018 #include "gdcmTypes.h"
    00019 #include "gdcmTag.h"
    00020 #include "gdcmCSAHeaderDictEntry.h"
    00021
    00022 #include <iostream>
    00023 #include <iomanip>
    00024 #include <set>
    00025 #include <exception>
    00026
    00027 namespace gdcm
    00028 {
    00029
    00030 class GDCM_EXPORT CSAHeaderDictException : public std::exception {};
    00031
    00035 class GDCM_EXPORT CSAHeaderDict
    00036 {
    00037 public:
    00038   typedef std::set<CSAHeaderDictEntry> MapCSAHeaderDictEntry;
    00039   typedef MapCSAHeaderDictEntry::iterator Iterator;
    00040   typedef MapCSAHeaderDictEntry::const_iterator ConstIterator;
    00041   //static CSAHeaderDictEntry GroupLengthCSAHeaderDictEntry; // = CSAHeaderDictEntry("Group Length",VR::UL,VM::VM1);
    00042
    00043   CSAHeaderDict():CSAHeaderDictInternal() {
    00044     assert( CSAHeaderDictInternal.empty() );
    00045   }
    00046
    00047   friend std::ostream& operator<<(std::ostream& _os, const CSAHeaderDict &_val);
    00048
    00049   ConstIterator Begin() const { return CSAHeaderDictInternal.begin(); }
    00050   ConstIterator End() const { return CSAHeaderDictInternal.end(); }
    00051
    00052   bool IsEmpty() const { return CSAHeaderDictInternal.empty(); }
    00053   void AddCSAHeaderDictEntry(const CSAHeaderDictEntry &de)
    00054     {
    00055 #ifndef NDEBUG
    00056     MapCSAHeaderDictEntry::size_type s = CSAHeaderDictInternal.size();
    00057 #endif
    00058     CSAHeaderDictInternal.insert( de );
    00059     assert( s < CSAHeaderDictInternal.size() );
    00060     }
    00061
    00062   const CSAHeaderDictEntry &GetCSAHeaderDictEntry(const char *name) const
    00063     {
    00064     MapCSAHeaderDictEntry::const_iterator it = CSAHeaderDictInternal.find( name );
    00065     if( it != CSAHeaderDictInternal.end() )
    00066       {
    00067       return *it;
    00068       }
    00069     throw CSAHeaderDictException();
    00070     }
    00071
    00072 protected:
    00073   friend class Dicts;
    00074   void LoadDefault();
    00075
    00076 private:
    00077   CSAHeaderDict &operator=(const CSAHeaderDict &_val); // purposely not implemented
    00078   CSAHeaderDict(const CSAHeaderDict &_val); // purposely not implemented
    00079
    00080   MapCSAHeaderDictEntry CSAHeaderDictInternal;
    00081 };
    00082 //-----------------------------------------------------------------------------
    00083 inline std::ostream& operator<<(std::ostream& os, const CSAHeaderDict &val)
    00084 {
    00085   CSAHeaderDict::MapCSAHeaderDictEntry::const_iterator it = val.CSAHeaderDictInternal.begin();
    00086   for(;it != val.CSAHeaderDictInternal.end(); ++it)
    00087     {
    00088     const CSAHeaderDictEntry &de = *it;
    00089     os << de << '\n';
    00090     }
    00091
    00092
    00093   return os;
    00094 }
    00095
    00096
    00097 } // end namespace gdcm
    00098
    00099 #endif //__gdcmCSAHeaderDict_h