GDCM  2.4.5
gdcmStrictScanner.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 GDCMSTRICTSCANNER_H
15 #define GDCMSTRICTSCANNER_H
16 
17 #include "gdcmDirectory.h"
18 #include "gdcmSubject.h"
19 #include "gdcmTag.h"
20 #include "gdcmPrivateTag.h"
21 #include "gdcmSmartPointer.h"
22 
23 #include <map>
24 #include <set>
25 #include <string>
26 
27 #include <string.h> // strcmp
28 
29 namespace gdcm
30 {
31 class StringFilter;
32 
56 {
57  friend std::ostream& operator<<(std::ostream &_os, const StrictScanner &s);
58 public:
59  StrictScanner():Values(),Filenames(),Mappings() {}
60  ~StrictScanner();
61 
68  typedef std::map<Tag, const char*> TagToValue;
69  //typedef std::map<Tag, ConstCharWrapper> TagToValue; //StringMap;
70  //typedef TagToStringMap TagToValue;
71  typedef TagToValue::value_type TagToValueValueType;
72 
74  void AddTag( Tag const & t );
75  void ClearTags();
76 
77  // Work in progress do not use:
78  void AddPrivateTag( PrivateTag const & t );
79 
81  void AddSkipTag( Tag const & t );
82  void ClearSkipTags();
83 
85  bool Scan( Directory::FilenamesType const & filenames );
86 
87  Directory::FilenamesType const &GetFilenames() const { return Filenames; }
88 
90  void Print( std::ostream & os ) const;
91 
95  bool IsKey( const char * filename ) const;
96 
99  Directory::FilenamesType GetKeys() const;
100 
101  // struct to store all the values found:
102  typedef std::set< std::string > ValuesType;
103 
105  ValuesType const & GetValues() const { return Values; }
106 
108  ValuesType GetValues(Tag const &t) const;
109 
113  Directory::FilenamesType GetOrderedValues(Tag const &t) const;
114 
115  /* ltstr is CRITICAL, otherwise pointers value are used to do the key comparison */
116  struct ltstr
117  {
118  bool operator()(const char* s1, const char* s2) const
119  {
120  assert( s1 && s2 );
121  return strcmp(s1, s2) < 0;
122  }
123  };
124  typedef std::map<const char *,TagToValue, ltstr> MappingType;
125  typedef MappingType::const_iterator ConstIterator;
126  ConstIterator Begin() const { return Mappings.begin(); }
127  ConstIterator End() const { return Mappings.end(); }
128 
130  MappingType const & GetMappings() const { return Mappings; }
131 
133  TagToValue const & GetMapping(const char *filename) const;
134 
137  const char *GetFilenameFromTagToValue(Tag const &t, const char *valueref) const;
138 
141  Directory::FilenamesType GetAllFilenamesFromTagToValue(Tag const &t, const char *valueref) const;
142 
144  // by a call to GetMapping()
145  TagToValue const & GetMappingFromTagToValue(Tag const &t, const char *value) const;
146 
152  const char* GetValue(const char *filename, Tag const &t) const;
153 
156 
157 protected:
158  void ProcessPublicTag(StringFilter &sf, const char *filename);
159 private:
160  // struct to store all uniq tags in ascending order:
161  typedef std::set< Tag > TagsType;
162  typedef std::set< PrivateTag > PrivateTagsType;
163  std::set< Tag > Tags;
164  std::set< PrivateTag > PrivateTags;
165  std::set< Tag > SkipTags;
166  ValuesType Values;
167  Directory::FilenamesType Filenames;
168 
169  // Main struct that will hold all mapping:
170  MappingType Mappings;
171 
172  double Progress;
173 };
174 //-----------------------------------------------------------------------------
175 inline std::ostream& operator<<(std::ostream &os, const StrictScanner &s)
176 {
177  s.Print( os );
178  return os;
179 }
180 
181 } // end namespace gdcm
182 
183 #endif //GDCMSTRICTSCANNER_H
TagToValue::value_type TagToValueValueType
Definition: gdcmStrictScanner.h:71
Class to represent a Private DICOM Data Element (Attribute) Tag (Group, Element, Owner) ...
Definition: gdcmPrivateTag.h:38
std::map< const char *, TagToValue, ltstr > MappingType
Definition: gdcmStrictScanner.h:124
#define GDCM_EXPORT
Definition: gdcmWin32.h:34
MappingType::const_iterator ConstIterator
Definition: gdcmStrictScanner.h:125
StringFilter StringFilter is the class that make gdcm2.x looks more like gdcm1 and transform the bina...
Definition: gdcmStringFilter.h:29
std::ostream & operator<<(std::ostream &os, const Directory &d)
Definition: gdcmDirectory.h:88
std::vector< FilenameType > FilenamesType
Definition: gdcmDirectory.h:49
MappingType const & GetMappings() const
Mappings are the mapping from a particular tag to the map, mapping filename to value: ...
Definition: gdcmStrictScanner.h:130
Subject.
Definition: gdcmSubject.h:28
Definition: gdcmStrictScanner.h:116
ConstIterator End() const
Definition: gdcmStrictScanner.h:127
ConstIterator Begin() const
Definition: gdcmStrictScanner.h:126
StrictScanner()
Definition: gdcmStrictScanner.h:59
std::map< Tag, const char * > TagToValue
Definition: gdcmStrictScanner.h:68
Class for Smart Pointer.
Definition: gdcmObject.h:26
ValuesType const & GetValues() const
Get all the values found (in lexicographic order)
Definition: gdcmStrictScanner.h:105
static SmartPointer< StrictScanner > New()
for wrapped language: instanciate a reference counted object
Definition: gdcmStrictScanner.h:155
void Print(std::ostream &os) const
Print result.
StrictScanner This filter is meant for quickly browsing a FileSet (a set of files on disk)...
Definition: gdcmStrictScanner.h:55
Directory::FilenamesType const & GetFilenames() const
Definition: gdcmStrictScanner.h:87
Class to represent a DICOM Data Element (Attribute) Tag (Group, Element). Basically an uint32_t which...
Definition: gdcmTag.h:38
bool operator()(const char *s1, const char *s2) const
Definition: gdcmStrictScanner.h:118
Definition: gdcmASN1.h:20
std::set< std::string > ValuesType
Definition: gdcmStrictScanner.h:102

Generated on Fri Sep 25 2015 17:58:24 for GDCM by doxygen 1.8.9.1
SourceForge.net Logo