- Copy Brotli algorithm 3rd party source code for tool Cc: Liming Gao <liming.gao@intel.com> Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Bell Song <binx.song@intel.com> Reviewed-by: Liming Gao <liming.gao@intel.com>
		
			
				
	
	
		
			122 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			122 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| /* 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_ */
 |