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: DcmInputFileStream and related classes, 00023 * implements streamed input from files. 00024 * 00025 * Last Update: $Author: meichel $ 00026 * Update Date: $Date: 2005/12/08 16:28:17 $ 00027 * Source File: $Source: /share/dicom/cvs-depot/dcmtk/dcmdata/include/dcmtk/dcmdata/dcistrmf.h,v $ 00028 * CVS/RCS Revision: $Revision: 1.3 $ 00029 * Status: $State: Exp $ 00030 * 00031 * CVS/RCS Log at end of file 00032 * 00033 */ 00034 00035 #ifndef DCISTRMF_H 00036 #define DCISTRMF_H 00037 00038 #include "dcmtk/config/osconfig.h" 00039 #include "dcmtk/dcmdata/dcistrma.h" 00040 00041 #define INCLUDE_CSTDIO 00042 #include "dcmtk/ofstd/ofstdinc.h" 00043 00044 00047 class DcmFileProducer: public DcmProducer 00048 { 00049 public: 00054 DcmFileProducer(const char *filename, Uint32 offset = 0); 00055 00057 virtual ~DcmFileProducer(); 00058 00063 virtual OFBool good() const; 00064 00069 virtual OFCondition status() const; 00070 00074 virtual OFBool eos() const; 00075 00083 virtual Uint32 avail() const; 00084 00090 virtual Uint32 read(void *buf, Uint32 buflen); 00091 00096 virtual Uint32 skip(Uint32 skiplen); 00097 00102 virtual void putback(Uint32 num); 00103 00104 private: 00105 00107 DcmFileProducer(const DcmFileProducer&); 00108 00110 DcmFileProducer& operator=(const DcmFileProducer&); 00111 00113 FILE *file_; 00114 00116 OFCondition status_; 00117 00119 Uint32 size_; 00120 }; 00121 00122 00125 class DcmInputFileStreamFactory: public DcmInputStreamFactory 00126 { 00127 public: 00128 00133 DcmInputFileStreamFactory(const char *filename, Uint32 offset); 00134 00136 DcmInputFileStreamFactory(const DcmInputFileStreamFactory &arg); 00137 00139 virtual ~DcmInputFileStreamFactory(); 00140 00144 virtual DcmInputStream *create() const; 00145 00148 virtual DcmInputStreamFactory *clone() const 00149 { 00150 return new DcmInputFileStreamFactory(*this); 00151 } 00152 00153 private: 00154 00155 00157 DcmInputFileStreamFactory& operator=(const DcmInputFileStreamFactory&); 00158 00160 OFString filename_; 00161 00163 Uint32 offset_; 00164 00165 }; 00166 00167 00170 class DcmInputFileStream: public DcmInputStream 00171 { 00172 public: 00177 DcmInputFileStream(const char *filename, Uint32 offset = 0); 00178 00180 virtual ~DcmInputFileStream(); 00181 00191 virtual DcmInputStreamFactory *newFactory() const; 00192 00193 private: 00194 00196 DcmInputFileStream(const DcmInputFileStream&); 00197 00199 DcmInputFileStream& operator=(const DcmInputFileStream&); 00200 00202 DcmFileProducer producer_; 00203 00205 OFString filename_; 00206 }; 00207 00208 00209 #endif 00210 00211 /* 00212 * CVS/RCS Log: 00213 * $Log: dcistrmf.h,v $ 00214 * Revision 1.3 2005/12/08 16:28:17 meichel 00215 * Changed include path schema for all DCMTK header files 00216 * 00217 * Revision 1.2 2002/11/27 12:07:21 meichel 00218 * Adapted module dcmdata to use of new header file ofstdinc.h 00219 * 00220 * Revision 1.1 2002/08/27 16:55:33 meichel 00221 * Initial release of new DICOM I/O stream classes that add support for stream 00222 * compression (deflated little endian explicit VR transfer syntax) 00223 * 00224 * 00225 */