GDCM 2.2.1

- Main Page
- Related Pages
- Namespaces
- Classes
- Files
- Examples

- File List
- File Members

gdcmReader.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 GDCMREADER_H
15 #define GDCMREADER_H
16
17 #include "gdcmFile.h"
18
19 #include <fstream>
20
21 namespace gdcm
22 {
23 class StreamImageReader;
53 class GDCM_EXPORT Reader
54 {
55 public:
56 Reader():F(new File){
57 Stream = NULL;
58 Ifstream = NULL;
59 }
60 virtual ~Reader();
61
63 virtual bool Read(); // Execute()
64
67 void SetFileName(const char *filename_native);
68
70 void SetStream(std::istream &input_stream) {
71 Stream = &input_stream;
72 }
73
75 const File &GetFile() const { return *F; }
76
78 File &GetFile() { return *F; }
79
81 void SetFile(File& file) { F = &file; }
82
85 bool ReadUpToTag(const Tag & tag, std::set<Tag> const & skiptags = std::set<Tag>() );
86
88 bool ReadSelectedTags(std::set<Tag> const & tags);
89
92 bool CanRead() const;
93
94 protected:
95 bool ReadPreamble();
96 bool ReadMetaInformation();
97 bool ReadDataSet();
98
99 SmartPointer<File> F;
100
101 friend class StreamImageReader; //need to be friended to be able to grab the GetStreamPtr
102
103 //this function is added for the StreamImageReader, which needs to read
104 //up to the pixel data and then stops right before reading the pixel data.
105 //it's used to get that position, so that reading can continue
106 //apace once the read function is called.
107 //so, this function gets the stream directly, and then allows for position information
108 //from the tellg function, and allows for stream/pointer manip in order
109 //to read the pixel data. Note, of course, that reading pixel elements
110 //will still have to be subject to endianness swaps, if necessary.
111 std::istream* GetStreamPtr() const { return Stream; }
112
113 private:
114 template <typename T_Caller>
115 bool InternalReadCommon(const T_Caller &caller);
116 TransferSyntax GuessTransferSyntax();
117 std::istream *Stream;
118 std::ifstream *Ifstream;
119 };
120
127 } // end namespace gdcm
128
129
130 #endif //GDCMREADER_H