00001 /* 00002 * 00003 * Copyright (C) 1994-2005, OFFIS 00004 * 00005 * This software and supporting documentation were developed by 00006 * 00007 * Kuratorium OFFIS e.V. 00008 * Healthcare Information and Communication Systems 00009 * Escherweg 2 00010 * D-26121 Oldenburg, Germany 00011 * 00012 * THIS SOFTWARE IS MADE AVAILABLE, AS IS, AND OFFIS MAKES NO WARRANTY 00013 * REGARDING THE SOFTWARE, ITS PERFORMANCE, ITS MERCHANTABILITY OR 00014 * FITNESS FOR ANY PARTICULAR USE, FREEDOM FROM ANY COMPUTER DISEASES OR 00015 * ITS CONFORMITY TO ANY SPECIFICATION. THE ENTIRE RISK AS TO QUALITY AND 00016 * PERFORMANCE OF THE SOFTWARE IS WITH THE USER. 00017 * 00018 * Module: dcmdata 00019 * 00020 * Author: Marco Eichelberg 00021 * 00022 * Purpose: base classes for input streams 00023 * 00024 * Last Update: $Author: meichel $ 00025 * Update Date: $Date: 2005/12/08 16:28:15 $ 00026 * Source File: $Source: /share/dicom/cvs-depot/dcmtk/dcmdata/include/dcmtk/dcmdata/dcistrma.h,v $ 00027 * CVS/RCS Revision: $Revision: 1.2 $ 00028 * Status: $State: Exp $ 00029 * 00030 * CVS/RCS Log at end of file 00031 * 00032 */ 00033 00034 #ifndef DCISTRMA_H 00035 #define DCISTRMA_H 00036 00037 #include "dcmtk/config/osconfig.h" 00038 #include "dcmtk/ofstd/oftypes.h" /* for OFBool */ 00039 #include "dcmtk/ofstd/ofcond.h" /* for OFCondition */ 00040 #include "dcmtk/dcmdata/dcxfer.h" /* for E_StreamCompression */ 00041 00042 class DcmInputStream; 00043 00047 class DcmProducer 00048 { 00049 public: 00050 00052 virtual ~DcmProducer() 00053 { 00054 } 00055 00060 virtual OFBool good() const = 0; 00061 00066 virtual OFCondition status() const = 0; 00067 00071 virtual OFBool eos() const = 0; 00072 00080 virtual Uint32 avail() const = 0; 00081 00087 virtual Uint32 read(void *buf, Uint32 buflen) = 0; 00088 00093 virtual Uint32 skip(Uint32 skiplen) = 0; 00094 00099 virtual void putback(Uint32 num) = 0; 00100 00101 }; 00102 00103 00107 class DcmInputFilter: public DcmProducer 00108 { 00109 public: 00110 00112 virtual ~DcmInputFilter() 00113 { 00114 } 00115 00122 virtual void append(DcmProducer& producer) = 0; 00123 }; 00124 00125 00129 class DcmInputStreamFactory 00130 { 00131 public: 00132 00134 virtual ~DcmInputStreamFactory() 00135 { 00136 } 00137 00141 virtual DcmInputStream *create() const = 0; 00142 00145 virtual DcmInputStreamFactory *clone() const = 0; 00146 }; 00147 00148 00151 class DcmInputStream 00152 { 00153 public: 00154 00156 virtual ~DcmInputStream(); 00157 00162 virtual OFBool good() const; 00163 00168 virtual OFCondition status() const; 00169 00173 virtual OFBool eos() const; 00174 00182 virtual Uint32 avail() const; 00183 00189 virtual Uint32 read(void *buf, Uint32 buflen); 00190 00195 virtual Uint32 skip(Uint32 skiplen); 00196 00200 virtual Uint32 tell() const; 00201 00209 virtual OFCondition installCompressionFilter(E_StreamCompression filterType); 00210 00220 virtual DcmInputStreamFactory *newFactory() const = 0; 00221 00229 virtual void mark(); 00230 00235 virtual void putback(); 00236 00237 protected: 00238 00245 DcmInputStream(DcmProducer *initial); 00246 00249 const DcmProducer *currentProducer() const; 00250 00251 private: 00252 00254 DcmInputStream(const DcmInputStream&); 00255 00257 DcmInputStream& operator=(const DcmInputStream&); 00258 00260 DcmProducer *current_; 00261 00263 DcmInputFilter *compressionFilter_; 00264 00266 Uint32 tell_; 00267 00269 Uint32 mark_; 00270 }; 00271 00272 00273 00274 #endif 00275 00276 /* 00277 * CVS/RCS Log: 00278 * $Log: dcistrma.h,v $ 00279 * Revision 1.2 2005/12/08 16:28:15 meichel 00280 * Changed include path schema for all DCMTK header files 00281 * 00282 * Revision 1.1 2002/08/27 16:55:32 meichel 00283 * Initial release of new DICOM I/O stream classes that add support for stream 00284 * compression (deflated little endian explicit VR transfer syntax) 00285 * 00286 * 00287 */ 00288