| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121 |
- /* Copyright 2009 Google Inc. All Rights Reserved.
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
- */
- /* Input and output classes for streaming brotli compression. */
- #ifndef BROTLI_ENC_STREAMS_H_
- #define BROTLI_ENC_STREAMS_H_
- #include <stdio.h>
- #include <string>
- #include "../common/types.h"
- namespace brotli {
- /* Input interface for the compression routines. */
- class BrotliIn {
- public:
- virtual ~BrotliIn(void) {}
- /* Return a pointer to the next block of input of at most n bytes.
- Return the actual length in *nread.
- At end of data, return NULL. Don't return NULL if there is more data
- to read, even if called with n == 0.
- Read will only be called if some of its bytes are needed. */
- virtual const void* Read(size_t n, size_t* nread) = 0;
- };
- /* Output interface for the compression routines. */
- class BrotliOut {
- public:
- virtual ~BrotliOut(void) {}
- /* Write n bytes of data from buf.
- Return true if all written, false otherwise. */
- virtual bool Write(const void *buf, size_t n) = 0;
- };
- /* Adapter class to make BrotliIn objects from raw memory. */
- class BrotliMemIn : public BrotliIn {
- public:
- BrotliMemIn(const void* buf, size_t len);
- void Reset(const void* buf, size_t len);
- /* returns the amount of data consumed */
- size_t position(void) const { return pos_; }
- const void* Read(size_t n, size_t* OUTPUT);
- private:
- const void* buf_; /* start of input buffer */
- size_t len_; /* length of input */
- size_t pos_; /* current read position within input */
- };
- /* Adapter class to make BrotliOut objects from raw memory. */
- class BrotliMemOut : public BrotliOut {
- public:
- BrotliMemOut(void* buf, size_t len);
- void Reset(void* buf, size_t len);
- /* returns the amount of data written */
- size_t position(void) const { return pos_; }
- bool Write(const void* buf, size_t n);
- private:
- void* buf_; /* start of output buffer */
- size_t len_; /* length of output */
- size_t pos_; /* current write position within output */
- };
- /* Adapter class to make BrotliOut objects from a string. */
- class BrotliStringOut : public BrotliOut {
- public:
- /* Create a writer that appends its data to buf.
- buf->size() will grow to at most max_size
- buf is expected to be empty when constructing BrotliStringOut. */
- BrotliStringOut(std::string* buf, size_t max_size);
- void Reset(std::string* buf, size_t max_len);
- bool Write(const void* buf, size_t n);
- private:
- std::string* buf_; /* start of output buffer */
- size_t max_size_; /* max length of output */
- };
- /* Adapter class to make BrotliIn object from a file. */
- class BrotliFileIn : public BrotliIn {
- public:
- BrotliFileIn(FILE* f, size_t max_read_size);
- ~BrotliFileIn(void);
- const void* Read(size_t n, size_t* bytes_read);
- private:
- FILE* f_;
- char* buf_;
- size_t buf_size_;
- };
- /* Adapter class to make BrotliOut object from a file. */
- class BrotliFileOut : public BrotliOut {
- public:
- explicit BrotliFileOut(FILE* f);
- bool Write(const void* buf, size_t n);
- private:
- FILE* f_;
- };
- } /* namespace brotli */
- #endif /* BROTLI_ENC_STREAMS_H_ */
|