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 output 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 DCOSTRMA_H 00030 #define DCOSTRMA_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/dcmdata/dcxfer.h" /* for E_StreamCompression */ 00036 #include "dcmtk/ofstd/offile.h" /* for offile_off_t */ 00037 00041 class DcmConsumer 00042 { 00043 public: 00044 00046 virtual ~DcmConsumer() 00047 { 00048 } 00049 00054 virtual OFBool good() const = 0; 00055 00060 virtual OFCondition status() const = 0; 00061 00067 virtual OFBool isFlushed() const = 0; 00068 00076 virtual offile_off_t avail() const = 0; 00077 00083 virtual offile_off_t write(const void *buf, offile_off_t buflen) = 0; 00084 00090 virtual void flush() = 0; 00091 }; 00092 00093 00097 class DcmOutputFilter: public DcmConsumer 00098 { 00099 public: 00100 00102 virtual ~DcmOutputFilter() 00103 { 00104 } 00105 00112 virtual void append(DcmConsumer& consumer) = 0; 00113 }; 00114 00115 00119 class DcmOutputStream 00120 { 00121 public: 00122 00124 virtual ~DcmOutputStream(); 00125 00130 virtual OFBool good() const; 00131 00136 virtual OFCondition status() const; 00137 00143 virtual OFBool isFlushed() const; 00144 00152 virtual offile_off_t avail() const; 00153 00159 virtual offile_off_t write(const void *buf, offile_off_t buflen); 00160 00166 virtual void flush(); 00167 00171 virtual offile_off_t tell() const; 00172 00180 virtual OFCondition installCompressionFilter(E_StreamCompression filterType); 00181 00182 protected: 00183 00190 DcmOutputStream(DcmConsumer *initial); 00191 00192 private: 00193 00195 DcmOutputStream(const DcmOutputStream&); 00196 00198 DcmOutputStream& operator=(const DcmOutputStream&); 00199 00201 DcmConsumer *current_; 00202 00204 DcmOutputFilter *compressionFilter_; 00205 00207 offile_off_t tell_; 00208 }; 00209 00210 00211 00212 #endif 00213 00214 /* 00215 * CVS/RCS Log: 00216 * $Log: dcostrma.h,v $ 00217 * Revision 1.5 2010-10-14 13:15:41 joergr 00218 * Updated copyright header. Added reference to COPYRIGHT file. 00219 * 00220 * Revision 1.4 2009-11-04 09:58:07 uli 00221 * Switched to logging mechanism provided by the "new" oflog module 00222 * 00223 * Revision 1.3 2007-02-19 16:06:09 meichel 00224 * Class DcmOutputStream and related classes are now safe for use with 00225 * large files (2 GBytes or more) if supported by compiler and operating system. 00226 * 00227 * Revision 1.2 2005/12/08 16:28:24 meichel 00228 * Changed include path schema for all DCMTK header files 00229 * 00230 * Revision 1.1 2002/08/27 16:55:36 meichel 00231 * Initial release of new DICOM I/O stream classes that add support for stream 00232 * compression (deflated little endian explicit VR transfer syntax) 00233 * 00234 * 00235 */