/usr/include/dcmtk/dcmdata/dcostrmz.h is in libdcmtk-dev 3.6.2-3build3.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 | /*
*
* Copyright (C) 1994-2011, OFFIS e.V.
* All rights reserved. See COPYRIGHT file for details.
*
* This software and supporting documentation were developed by
*
* OFFIS e.V.
* R&D Division Health
* Escherweg 2
* D-26121 Oldenburg, Germany
*
*
* Module: dcmdata
*
* Author: Marco Eichelberg
*
* Purpose: zlib compression filter for output streams
*
*/
#ifndef DCOSTRMZ_H
#define DCOSTRMZ_H
#include "dcmtk/config/osconfig.h"
#ifdef WITH_ZLIB
#include "dcmtk/dcmdata/dcostrma.h" /* for DcmOutputFilter */
BEGIN_EXTERN_C
#include <zlib.h>
END_EXTERN_C
/** global flag defining the compression level for zlib (deflate) compression.
* Legal values are 0..9. Default is Z_DEFAULT_COMPRESSION which is defined
* to be 6 for the current zlib implementation.
*/
extern DCMTK_DCMDATA_EXPORT OFGlobal<int> dcmZlibCompressionLevel;
/** zlib compression filter for output streams
*/
class DCMTK_DCMDATA_EXPORT DcmZLibOutputFilter: public DcmOutputFilter
{
public:
/// default constructor
DcmZLibOutputFilter();
/// destructor
virtual ~DcmZLibOutputFilter();
/** returns the status of the consumer. Unless the status is good,
* the consumer will not permit any operation.
* @return status, true if good
*/
virtual OFBool good() const;
/** returns the status of the consumer as an OFCondition object.
* Unless the status is good, the consumer will not permit any operation.
* @return status, EC_Normal if good
*/
virtual OFCondition status() const;
/** returns true if the consumer is flushed, i.e. has no more data
* pending in it's internal state that needs to be flushed before
* the stream is closed.
* @return true if consumer is flushed, false otherwise
*/
virtual OFBool isFlushed() const;
/** returns the minimum number of bytes that can be written with the
* next call to write(). The DcmObject write methods rely on avail
* to return a value > 0 if there is no I/O suspension since certain
* data such as tag and length are only written "en bloc", i.e. all
* or nothing.
* @return minimum of space available in consumer
*/
virtual offile_off_t avail() const;
/** processes as many bytes as possible from the given input block.
* @param buf pointer to memory block, must not be NULL
* @param buflen length of memory block
* @return number of bytes actually processed.
*/
virtual offile_off_t write(const void *buf, offile_off_t buflen);
/** instructs the consumer to flush its internal content until
* either the consumer becomes "flushed" or I/O suspension occurs.
* After a call to flush(), a call to write() will produce undefined
* behaviour.
*/
virtual void flush();
/** determines the consumer to which the filter is supposed
* to write it's output. Once a consumer for the output filter has
* been defined, it cannot be changed anymore during the lifetime
* of the object.
* @param consumer reference to consumer, must not be circular chain
*/
virtual void append(DcmConsumer& consumer);
private:
/// private unimplemented copy constructor
DcmZLibOutputFilter(const DcmZLibOutputFilter&);
/// private unimplemented copy assignment operator
DcmZLibOutputFilter& operator=(const DcmZLibOutputFilter&);
/** writes the content of the output ring buffer
* to the next filter stage until the output ring buffer
* becomes empty or the next filter stage becomes full
*/
void flushOutputBuffer();
/** feed data from the given block of data to the compression
* codec until complete or the output ring buffer becomes full.
* Does not flush the output ring buffer.
* @param buf pointer to input data
* @param buflen number of bytes in buf
* @param finalize true if the current block of data constitutes
* the end of the input stream, i.e. the compression codec
* should be forced to flush its internal state.
* @return number of bytes processed
*/
offile_off_t compress(const void *buf, offile_off_t buflen, OFBool finalize);
/** copies as much of the given block of data as possible
* in the input ring buffer
* @param buf pointer to input data
* @param buflen number of bytes in buf
* @return number of bytes copied to input ring buffer
*/
offile_off_t fillInputBuffer(const void *buf, offile_off_t buflen);
/** feed data from the input ring buffer to the compression
* codec until complete or the output ring buffer becomes full.
* Does not flush the output ring buffer.
* @param finalize true if the content of the input ring buffer
* constitutes the end of the input stream, i.e. the compression codec
* should be forced to flush its internal state.
*/
void compressInputBuffer(OFBool finalize);
/// pointer to consumer to which compressed output is written
DcmConsumer *current_;
/// pointer to struct z_stream object containing the zlib status
z_streamp zstream_;
/// status
OFCondition status_;
/// true if the zlib object has reported Z_STREAM_END
OFBool flushed_;
/// input ring buffer
unsigned char *inputBuf_;
/// offset of first byte in input ring buffer
offile_off_t inputBufStart_;
/// number of bytes in input ring buffer
offile_off_t inputBufCount_;
/// output ring buffer
unsigned char *outputBuf_;
/// offset of first byte in output ring buffer
offile_off_t outputBufStart_;
/// number of bytes in output ring buffer
offile_off_t outputBufCount_;
};
#endif
#endif
|