dcmdata/include/dcmtk/dcmdata/dcistrma.h

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 


Generated on 6 Jan 2011 for OFFIS DCMTK Version 3.6.0 by Doxygen 1.5.1