Zoltan Szabadka | 30625ba | 2013-12-16 14:45:57 +0100 | [diff] [blame^] | 1 | /* Copyright 2013 Google Inc. All Rights Reserved. |
| 2 | |
| 3 | Licensed under the Apache License, Version 2.0 (the "License"); |
| 4 | you may not use this file except in compliance with the License. |
| 5 | You may obtain a copy of the License at |
| 6 | |
| 7 | http://www.apache.org/licenses/LICENSE-2.0 |
| 8 | |
| 9 | Unless required by applicable law or agreed to in writing, software |
| 10 | distributed under the License is distributed on an "AS IS" BASIS, |
| 11 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| 12 | See the License for the specific language governing permissions and |
| 13 | limitations under the License. |
| 14 | |
| 15 | Functions for streaming input and output. |
| 16 | */ |
Zoltan Szabadka | 1571db3 | 2013-11-15 19:02:17 +0100 | [diff] [blame] | 17 | |
| 18 | #ifndef BROTLI_DEC_STREAMS_H_ |
| 19 | #define BROTLI_DEC_STREAMS_H_ |
| 20 | |
| 21 | #include <stdio.h> |
| 22 | #include "./types.h" |
| 23 | |
| 24 | #if defined(__cplusplus) || defined(c_plusplus) |
| 25 | extern "C" { |
| 26 | #endif |
| 27 | |
Zoltan Szabadka | 30625ba | 2013-12-16 14:45:57 +0100 | [diff] [blame^] | 28 | /* Function pointer type used to read len bytes into buf. Returns the */ |
| 29 | /* number of bytes read or -1 on error. */ |
Zoltan Szabadka | 1571db3 | 2013-11-15 19:02:17 +0100 | [diff] [blame] | 30 | typedef int (*BrotliInputFunction)(void* data, uint8_t* buf, size_t len); |
| 31 | |
Zoltan Szabadka | 30625ba | 2013-12-16 14:45:57 +0100 | [diff] [blame^] | 32 | /* Input callback function with associated data. */ |
Zoltan Szabadka | 1571db3 | 2013-11-15 19:02:17 +0100 | [diff] [blame] | 33 | typedef struct { |
| 34 | BrotliInputFunction cb_; |
| 35 | void* data_; |
| 36 | } BrotliInput; |
| 37 | |
Zoltan Szabadka | 30625ba | 2013-12-16 14:45:57 +0100 | [diff] [blame^] | 38 | /* Reads len bytes into buf, using the in callback. */ |
Zoltan Szabadka | 1571db3 | 2013-11-15 19:02:17 +0100 | [diff] [blame] | 39 | static BROTLI_INLINE int BrotliRead(BrotliInput in, uint8_t* buf, size_t len) { |
| 40 | return in.cb_(in.data_, buf, len); |
| 41 | } |
| 42 | |
Zoltan Szabadka | 30625ba | 2013-12-16 14:45:57 +0100 | [diff] [blame^] | 43 | /* Function pointer type used to write len bytes into buf. Returns the */ |
| 44 | /* number of bytes written or -1 on error. */ |
Zoltan Szabadka | 1571db3 | 2013-11-15 19:02:17 +0100 | [diff] [blame] | 45 | typedef int (*BrotliOutputFunction)(void* data, const uint8_t* buf, size_t len); |
| 46 | |
Zoltan Szabadka | 30625ba | 2013-12-16 14:45:57 +0100 | [diff] [blame^] | 47 | /* Output callback function with associated data. */ |
Zoltan Szabadka | 1571db3 | 2013-11-15 19:02:17 +0100 | [diff] [blame] | 48 | typedef struct { |
| 49 | BrotliOutputFunction cb_; |
| 50 | void* data_; |
| 51 | } BrotliOutput; |
| 52 | |
Zoltan Szabadka | 30625ba | 2013-12-16 14:45:57 +0100 | [diff] [blame^] | 53 | /* Writes len bytes into buf, using the out callback. */ |
Zoltan Szabadka | 1571db3 | 2013-11-15 19:02:17 +0100 | [diff] [blame] | 54 | static BROTLI_INLINE int BrotliWrite(BrotliOutput out, |
| 55 | const uint8_t* buf, size_t len) { |
| 56 | return out.cb_(out.data_, buf, len); |
| 57 | } |
| 58 | |
Zoltan Szabadka | 30625ba | 2013-12-16 14:45:57 +0100 | [diff] [blame^] | 59 | /* Memory region with position. */ |
Zoltan Szabadka | 1571db3 | 2013-11-15 19:02:17 +0100 | [diff] [blame] | 60 | typedef struct { |
| 61 | const uint8_t* buffer; |
| 62 | size_t length; |
| 63 | size_t pos; |
| 64 | } BrotliMemInput; |
| 65 | |
Zoltan Szabadka | 30625ba | 2013-12-16 14:45:57 +0100 | [diff] [blame^] | 66 | /* Input callback where *data is a BrotliMemInput struct. */ |
Zoltan Szabadka | 1571db3 | 2013-11-15 19:02:17 +0100 | [diff] [blame] | 67 | int BrotliMemInputFunction(void* data, uint8_t* buf, size_t count); |
| 68 | |
Zoltan Szabadka | 30625ba | 2013-12-16 14:45:57 +0100 | [diff] [blame^] | 69 | /* Returns an input callback that wraps the given memory region. */ |
Zoltan Szabadka | 1571db3 | 2013-11-15 19:02:17 +0100 | [diff] [blame] | 70 | BrotliInput BrotliInitMemInput(const uint8_t* buffer, size_t length, |
| 71 | BrotliMemInput* mem_input); |
| 72 | |
Zoltan Szabadka | 30625ba | 2013-12-16 14:45:57 +0100 | [diff] [blame^] | 73 | /* Output buffer with position. */ |
Zoltan Szabadka | 1571db3 | 2013-11-15 19:02:17 +0100 | [diff] [blame] | 74 | typedef struct { |
| 75 | uint8_t* buffer; |
| 76 | size_t length; |
| 77 | size_t pos; |
| 78 | } BrotliMemOutput; |
| 79 | |
Zoltan Szabadka | 30625ba | 2013-12-16 14:45:57 +0100 | [diff] [blame^] | 80 | /* Output callback where *data is a BrotliMemOutput struct. */ |
Zoltan Szabadka | 1571db3 | 2013-11-15 19:02:17 +0100 | [diff] [blame] | 81 | int BrotliMemOutputFunction(void* data, const uint8_t* buf, size_t count); |
| 82 | |
Zoltan Szabadka | 30625ba | 2013-12-16 14:45:57 +0100 | [diff] [blame^] | 83 | /* Returns an output callback that wraps the given memory region. */ |
Zoltan Szabadka | 1571db3 | 2013-11-15 19:02:17 +0100 | [diff] [blame] | 84 | BrotliOutput BrotliInitMemOutput(uint8_t* buffer, size_t length, |
| 85 | BrotliMemOutput* mem_output); |
| 86 | |
Zoltan Szabadka | 30625ba | 2013-12-16 14:45:57 +0100 | [diff] [blame^] | 87 | /* Input callback that reads from standard input. */ |
Zoltan Szabadka | 1571db3 | 2013-11-15 19:02:17 +0100 | [diff] [blame] | 88 | int BrotliStdinInputFunction(void* data, uint8_t* buf, size_t count); |
| 89 | BrotliInput BrotliStdinInput(); |
| 90 | |
Zoltan Szabadka | 30625ba | 2013-12-16 14:45:57 +0100 | [diff] [blame^] | 91 | /* Output callback that writes to standard output. */ |
Zoltan Szabadka | 1571db3 | 2013-11-15 19:02:17 +0100 | [diff] [blame] | 92 | int BrotliStdoutOutputFunction(void* data, const uint8_t* buf, size_t count); |
| 93 | BrotliOutput BrotliStdoutOutput(); |
| 94 | |
Zoltan Szabadka | 30625ba | 2013-12-16 14:45:57 +0100 | [diff] [blame^] | 95 | /* Output callback that writes to a file. */ |
Zoltan Szabadka | 1571db3 | 2013-11-15 19:02:17 +0100 | [diff] [blame] | 96 | int BrotliFileOutputFunction(void* data, const uint8_t* buf, size_t count); |
| 97 | BrotliOutput BrotliFileOutput(FILE* f); |
| 98 | |
| 99 | #if defined(__cplusplus) || defined(c_plusplus) |
Zoltan Szabadka | 30625ba | 2013-12-16 14:45:57 +0100 | [diff] [blame^] | 100 | } /* extern "C" */ |
Zoltan Szabadka | 1571db3 | 2013-11-15 19:02:17 +0100 | [diff] [blame] | 101 | #endif |
| 102 | |
Zoltan Szabadka | 30625ba | 2013-12-16 14:45:57 +0100 | [diff] [blame^] | 103 | #endif /* BROTLI_DEC_STREAMS_H_ */ |