diff options
Diffstat (limited to 'debian/vendor-h2o/deps/brotli/enc/streams.h')
-rw-r--r-- | debian/vendor-h2o/deps/brotli/enc/streams.h | 121 |
1 files changed, 121 insertions, 0 deletions
diff --git a/debian/vendor-h2o/deps/brotli/enc/streams.h b/debian/vendor-h2o/deps/brotli/enc/streams.h new file mode 100644 index 0000000..68fc23c --- /dev/null +++ b/debian/vendor-h2o/deps/brotli/enc/streams.h @@ -0,0 +1,121 @@ +/* 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 "./port.h" +#include "./types.h" + +namespace brotli { + +// Input interface for the compression routines. +class BrotliIn { + public: + virtual ~BrotliIn() {} + + // 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() {} + + // 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() 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() 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(); + + 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_ |