00001 /* 00002 * 00003 * Copyright (C) 1994-2010, OFFIS e.V. 00004 * All rights reserved. See COPYRIGHT file for details. 00005 * 00006 * This software and supporting documentation were developed by 00007 * 00008 * OFFIS e.V. 00009 * R&D Division Health 00010 * Escherweg 2 00011 * D-26121 Oldenburg, Germany 00012 * 00013 * 00014 * Module: dcmdata 00015 * 00016 * Author: Marco Eichelberg 00017 * 00018 * Purpose: base classes for input streams 00019 * 00020 * Last Update: $Author: joergr $ 00021 * Update Date: $Date: 2010-10-14 13:15:41 $ 00022 * CVS/RCS Revision: $Revision: 1.5 $ 00023 * Status: $State: Exp $ 00024 * 00025 * CVS/RCS Log at end of file 00026 * 00027 */ 00028 00029 #ifndef DCISTRMA_H 00030 #define DCISTRMA_H 00031 00032 #include "dcmtk/config/osconfig.h" 00033 #include "dcmtk/ofstd/oftypes.h" /* for OFBool */ 00034 #include "dcmtk/ofstd/ofcond.h" /* for OFCondition */ 00035 #include "dcmtk/ofstd/offile.h" /* for offile_off_t */ 00036 #include "dcmtk/dcmdata/dcxfer.h" /* for E_StreamCompression */ 00037 00038 class DcmInputStream; 00039 00043 class DcmProducer 00044 { 00045 public: 00046 00048 virtual ~DcmProducer() 00049 { 00050 } 00051 00056 virtual OFBool good() const = 0; 00057 00062 virtual OFCondition status() const = 0; 00063 00067 virtual OFBool eos() = 0; 00068 00076 virtual offile_off_t avail() = 0; 00077 00083 virtual offile_off_t read(void *buf, offile_off_t buflen) = 0; 00084 00089 virtual offile_off_t skip(offile_off_t skiplen) = 0; 00090 00095 virtual void putback(offile_off_t num) = 0; 00096 00097 }; 00098 00099 00103 class DcmInputFilter: public DcmProducer 00104 { 00105 public: 00106 00108 virtual ~DcmInputFilter() 00109 { 00110 } 00111 00118 virtual void append(DcmProducer& producer) = 0; 00119 }; 00120 00121 00125 class DcmInputStreamFactory 00126 { 00127 public: 00128 00130 virtual ~DcmInputStreamFactory() 00131 { 00132 } 00133 00137 virtual DcmInputStream *create() const = 0; 00138 00141 virtual DcmInputStreamFactory *clone() const = 0; 00142 }; 00143 00144 00147 class DcmInputStream 00148 { 00149 public: 00150 00152 virtual ~DcmInputStream(); 00153 00158 virtual OFBool good() const; 00159 00164 virtual OFCondition status() const; 00165 00169 virtual OFBool eos(); 00170 00178 virtual offile_off_t avail(); 00179 00185 virtual offile_off_t read(void *buf, offile_off_t buflen); 00186 00191 virtual offile_off_t skip(offile_off_t skiplen); 00192 00196 virtual offile_off_t tell() const; 00197 00205 virtual OFCondition installCompressionFilter(E_StreamCompression filterType); 00206 00216 virtual DcmInputStreamFactory *newFactory() const = 0; 00217 00225 virtual void mark(); 00226 00231 virtual void putback(); 00232 00233 protected: 00234 00241 DcmInputStream(DcmProducer *initial); 00242 00245 const DcmProducer *currentProducer() const; 00246 00247 private: 00248 00250 DcmInputStream(const DcmInputStream&); 00251 00253 DcmInputStream& operator=(const DcmInputStream&); 00254 00256 DcmProducer *current_; 00257 00259 DcmInputFilter *compressionFilter_; 00260 00262 offile_off_t tell_; 00263 00265 offile_off_t mark_; 00266 }; 00267 00268 00269 00270 #endif 00271 00272 /* 00273 * CVS/RCS Log: 00274 * $Log: dcistrma.h,v $ 00275 * Revision 1.5 2010-10-14 13:15:41 joergr 00276 * Updated copyright header. Added reference to COPYRIGHT file. 00277 * 00278 * Revision 1.4 2009-11-04 09:58:07 uli 00279 * Switched to logging mechanism provided by the "new" oflog module 00280 * 00281 * Revision 1.3 2007-02-19 15:45:41 meichel 00282 * Class DcmInputStream and related classes are now safe for use with 00283 * large files (2 GBytes or more) if supported by compiler and operating system. 00284 * 00285 * Revision 1.2 2005/12/08 16:28:15 meichel 00286 * Changed include path schema for all DCMTK header files 00287 * 00288 * Revision 1.1 2002/08/27 16:55:32 meichel 00289 * Initial release of new DICOM I/O stream classes that add support for stream 00290 * compression (deflated little endian explicit VR transfer syntax) 00291 * 00292 * 00293 */ 00294