summaryrefslogtreecommitdiffstats
path: root/web/server/h2o/libh2o/deps/brotli/enc/streams.h
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--web/server/h2o/libh2o/deps/brotli/enc/streams.h121
1 files changed, 121 insertions, 0 deletions
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 00000000..68fc23cc
--- /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 <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_