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: DcmInputBufferStream and related classes, 00019 * implements input to blocks of memory as needed in the dcmnet module. 00020 * 00021 * Last Update: $Author: joergr $ 00022 * Update Date: $Date: 2010-10-14 13:15:41 $ 00023 * CVS/RCS Revision: $Revision: 1.6 $ 00024 * Status: $State: Exp $ 00025 * 00026 * CVS/RCS Log at end of file 00027 * 00028 */ 00029 00030 #ifndef DCISTRMB_H 00031 #define DCISTRMB_H 00032 00033 #include "dcmtk/config/osconfig.h" 00034 #include "dcmtk/dcmdata/dcistrma.h" 00035 00036 00040 class DcmBufferProducer: public DcmProducer 00041 { 00042 public: 00045 DcmBufferProducer(); 00046 00048 virtual ~DcmBufferProducer(); 00049 00054 virtual OFBool good() const; 00055 00060 virtual OFCondition status() const; 00061 00065 virtual OFBool eos(); 00066 00074 virtual offile_off_t avail(); 00075 00081 virtual offile_off_t read(void *buf, offile_off_t buflen); 00082 00087 virtual offile_off_t skip(offile_off_t skiplen); 00088 00093 virtual void putback(offile_off_t num); 00094 00100 virtual void setBuffer(const void *buf, offile_off_t buflen); 00101 00108 virtual void releaseBuffer(); 00109 00113 virtual void setEos(); 00114 00115 private: 00116 00118 DcmBufferProducer(const DcmBufferProducer&); 00119 00121 DcmBufferProducer& operator=(const DcmBufferProducer&); 00122 00124 unsigned char *buffer_; 00125 00127 unsigned char *backup_; 00128 00130 offile_off_t bufSize_; 00131 00133 offile_off_t bufIndex_; 00134 00136 offile_off_t backupIndex_; 00137 00139 offile_off_t backupStart_; 00140 00142 OFCondition status_; 00143 00145 OFBool eosflag_; 00146 00147 }; 00148 00149 00153 class DcmInputBufferStream: public DcmInputStream 00154 { 00155 public: 00158 DcmInputBufferStream(); 00159 00161 virtual ~DcmInputBufferStream(); 00162 00172 virtual DcmInputStreamFactory *newFactory() const; 00173 00179 virtual void setBuffer(const void *buf, offile_off_t buflen); 00180 00187 virtual void releaseBuffer(); 00188 00192 virtual void setEos(); 00193 00194 private: 00195 00197 DcmInputBufferStream(const DcmInputBufferStream&); 00198 00200 DcmInputBufferStream& operator=(const DcmInputBufferStream&); 00201 00203 DcmBufferProducer producer_; 00204 00205 }; 00206 00207 00208 #endif 00209 00210 /* 00211 * CVS/RCS Log: 00212 * $Log: dcistrmb.h,v $ 00213 * Revision 1.6 2010-10-14 13:15:41 joergr 00214 * Updated copyright header. Added reference to COPYRIGHT file. 00215 * 00216 * Revision 1.5 2008-06-23 12:09:13 joergr 00217 * Fixed inconsistencies in Doxygen API documentation. 00218 * 00219 * Revision 1.4 2007/02/19 15:45:41 meichel 00220 * Class DcmInputStream and related classes are now safe for use with 00221 * large files (2 GBytes or more) if supported by compiler and operating system. 00222 * 00223 * Revision 1.3 2005/12/08 16:28:16 meichel 00224 * Changed include path schema for all DCMTK header files 00225 * 00226 * Revision 1.2 2003/06/12 13:34:36 joergr 00227 * Fixed inconsistent API documentation reported by Doxygen. 00228 * 00229 * Revision 1.1 2002/08/27 16:55:33 meichel 00230 * Initial release of new DICOM I/O stream classes that add support for stream 00231 * compression (deflated little endian explicit VR transfer syntax) 00232 * 00233 * 00234 */