From 58daab21cd043e1dc37024a7f99b396788372918 Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Sat, 9 Mar 2024 14:19:48 +0100 Subject: Merging upstream version 1.44.3. Signed-off-by: Daniel Baumann --- web/server/h2o/libh2o/deps/brotli/enc/streams.h | 121 ++++++++++++++++++++++++ 1 file changed, 121 insertions(+) create mode 100644 web/server/h2o/libh2o/deps/brotli/enc/streams.h (limited to 'web/server/h2o/libh2o/deps/brotli/enc/streams.h') diff --git a/web/server/h2o/libh2o/deps/brotli/enc/streams.h b/web/server/h2o/libh2o/deps/brotli/enc/streams.h new file mode 100644 index 000000000..68fc23ccb --- /dev/null +++ b/web/server/h2o/libh2o/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 +#include +#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_ -- cgit v1.2.3