dcmdata/include/dcmtk/dcmdata/dcostrmz.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: zlib compression filter 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 DCOSTRMZ_H
00030 #define DCOSTRMZ_H
00031 
00032 #include "dcmtk/config/osconfig.h"
00033 
00034 #ifdef WITH_ZLIB
00035 
00036 #include "dcmtk/dcmdata/dcostrma.h" /* for DcmOutputFilter */
00037 
00038 BEGIN_EXTERN_C
00039 #include <zlib.h>
00040 END_EXTERN_C
00041 
00046 extern OFGlobal<int> dcmZlibCompressionLevel;
00047 
00050 class DcmZLibOutputFilter: public DcmOutputFilter
00051 {
00052 public:
00053 
00055   DcmZLibOutputFilter();
00056 
00058   virtual ~DcmZLibOutputFilter();
00059 
00064   virtual OFBool good() const;
00065 
00070   virtual OFCondition status() const;
00071 
00077   virtual OFBool isFlushed() const;
00078 
00086   virtual offile_off_t avail() const;
00087 
00093   virtual offile_off_t write(const void *buf, offile_off_t buflen);
00094 
00100   virtual void flush();
00101 
00108   virtual void append(DcmConsumer& consumer);
00109 
00110 private:
00111 
00113   DcmZLibOutputFilter(const DcmZLibOutputFilter&);
00114 
00116   DcmZLibOutputFilter& operator=(const DcmZLibOutputFilter&);
00117 
00122   void flushOutputBuffer();
00123 
00134   offile_off_t compress(const void *buf, offile_off_t buflen, OFBool finalize);
00135 
00142   offile_off_t fillInputBuffer(const void *buf, offile_off_t buflen);
00143 
00151   void compressInputBuffer(OFBool finalize);
00152 
00154   DcmConsumer *current_;
00155 
00157   z_streamp zstream_;
00158 
00160   OFCondition status_;
00161 
00163   OFBool flushed_;
00164 
00166   unsigned char *inputBuf_;
00167 
00169   offile_off_t inputBufStart_;
00170 
00172   offile_off_t inputBufCount_;
00173 
00175   unsigned char *outputBuf_;
00176 
00178   offile_off_t outputBufStart_;
00179 
00181   offile_off_t outputBufCount_;
00182 
00183 };
00184 
00185 #endif
00186 #endif
00187 
00188 /*
00189  * CVS/RCS Log:
00190  * $Log: dcostrmz.h,v $
00191  * Revision 1.5  2010-10-14 13:15:41  joergr
00192  * Updated copyright header. Added reference to COPYRIGHT file.
00193  *
00194  * Revision 1.4  2008-06-23 12:09:13  joergr
00195  * Fixed inconsistencies in Doxygen API documentation.
00196  *
00197  * Revision 1.3  2007/02/19 16:06:09  meichel
00198  * Class DcmOutputStream and related classes are now safe for use with
00199  *   large files (2 GBytes or more) if supported by compiler and operating system.
00200  *
00201  * Revision 1.2  2005/12/08 16:28:27  meichel
00202  * Changed include path schema for all DCMTK header files
00203  *
00204  * Revision 1.1  2002/08/27 16:55:37  meichel
00205  * Initial release of new DICOM I/O stream classes that add support for stream
00206  *   compression (deflated little endian explicit VR transfer syntax)
00207  *
00208  *
00209  */
00210 


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