| OLD | NEW |
| 1 /** | 1 /** |
| 2 * \file lzma/vli.h | 2 * \file lzma/vli.h |
| 3 * \brief Variable-length integer handling | 3 * \brief Variable-length integer handling |
| 4 * | 4 * |
| 5 * In the .xz format, most integers are encoded in a variable-length | 5 * In the .xz format, most integers are encoded in a variable-length |
| 6 * representation, which is sometimes called little endian base-128 encoding. | 6 * representation, which is sometimes called little endian base-128 encoding. |
| 7 * This saves space when smaller values are more likely than bigger values. | 7 * This saves space when smaller values are more likely than bigger values. |
| 8 * | 8 * |
| 9 * The encoding scheme encodes seven bits to every byte, using minimum | 9 * The encoding scheme encodes seven bits to every byte, using minimum |
| 10 * number of bytes required to represent the given value. Encodings that use | 10 * number of bytes required to represent the given value. Encodings that use |
| (...skipping 11 matching lines...) Expand all Loading... |
| 22 * | 22 * |
| 23 * See ../lzma.h for information about liblzma as a whole. | 23 * See ../lzma.h for information about liblzma as a whole. |
| 24 */ | 24 */ |
| 25 | 25 |
| 26 #ifndef LZMA_H_INTERNAL | 26 #ifndef LZMA_H_INTERNAL |
| 27 # error Never include this file directly. Use <lzma.h> instead. | 27 # error Never include this file directly. Use <lzma.h> instead. |
| 28 #endif | 28 #endif |
| 29 | 29 |
| 30 | 30 |
| 31 /** | 31 /** |
| 32 * \brief Maximum supported value of variable-length integer | 32 * \brief Maximum supported value of a variable-length integer |
| 33 */ | 33 */ |
| 34 #define LZMA_VLI_MAX (UINT64_MAX / 2) | 34 #define LZMA_VLI_MAX (UINT64_MAX / 2) |
| 35 | 35 |
| 36 /** | 36 /** |
| 37 * \brief VLI value to denote that the value is unknown | 37 * \brief VLI value to denote that the value is unknown |
| 38 */ | 38 */ |
| 39 #define LZMA_VLI_UNKNOWN UINT64_MAX | 39 #define LZMA_VLI_UNKNOWN UINT64_MAX |
| 40 | 40 |
| 41 /** | 41 /** |
| 42 * \brief Maximum supported length of variable length integers | 42 * \brief Maximum supported encoded length of variable length integers |
| 43 */ | 43 */ |
| 44 #define LZMA_VLI_BYTES_MAX 9 | 44 #define LZMA_VLI_BYTES_MAX 9 |
| 45 | 45 |
| 46 | |
| 47 /** | 46 /** |
| 48 * \brief VLI constant suffix | 47 * \brief VLI constant suffix |
| 49 */ | 48 */ |
| 50 #define LZMA_VLI_C(n) UINT64_C(n) | 49 #define LZMA_VLI_C(n) UINT64_C(n) |
| 51 | 50 |
| 52 | 51 |
| 53 /** | 52 /** |
| 54 * \brief Variable-length integer type | 53 * \brief Variable-length integer type |
| 55 * | 54 * |
| 56 * This will always be unsigned integer. Valid VLI values are in the range | 55 * Valid VLI values are in the range [0, LZMA_VLI_MAX]. Unknown value is |
| 57 * [0, LZMA_VLI_MAX]. Unknown value is indicated with LZMA_VLI_UNKNOWN, | 56 * indicated with LZMA_VLI_UNKNOWN, which is the maximum value of the |
| 58 * which is the maximum value of the underlaying integer type. | 57 * underlaying integer type. |
| 59 * | 58 * |
| 60 * In future, even if lzma_vli is defined to be something other than uint64_t, | 59 * lzma_vli will be uint64_t for the foreseeable future. If a bigger size |
| 61 * it is guaranteed that 2 * LZMA_VLI_MAX will not overflow lzma_vli. | 60 * is needed in the future, it is guaranteed that 2 * LZMA_VLI_MAX will |
| 62 * This simplifies integer overflow detection. | 61 * not overflow lzma_vli. This simplifies integer overflow detection. |
| 63 */ | 62 */ |
| 64 typedef uint64_t lzma_vli; | 63 typedef uint64_t lzma_vli; |
| 65 | 64 |
| 66 | 65 |
| 67 /** | 66 /** |
| 68 * \brief Simple macro to validate variable-length integer | 67 * \brief Validate a variable-length integer |
| 69 * | 68 * |
| 70 * This is useful to test that application has given acceptable values | 69 * This is useful to test that application has given acceptable values |
| 71 * for example in the uncompressed_size and compressed_size variables. | 70 * for example in the uncompressed_size and compressed_size variables. |
| 72 * | 71 * |
| 73 * \return True if the integer is representable as VLI or if it | 72 * \return True if the integer is representable as VLI or if it |
| 74 * indicates unknown value. | 73 * indicates unknown value. |
| 75 */ | 74 */ |
| 76 #define lzma_vli_is_valid(vli) \ | 75 #define lzma_vli_is_valid(vli) \ |
| 77 ((vli) <= LZMA_VLI_MAX || (vli) == LZMA_VLI_UNKNOWN) | 76 ((vli) <= LZMA_VLI_MAX || (vli) == LZMA_VLI_UNKNOWN) |
| 78 | 77 |
| 79 | 78 |
| 80 /** | 79 /** |
| 81 * \brief Encode a variable-length integer | 80 * \brief Encode a variable-length integer |
| 82 * | 81 * |
| 83 * This function has two modes: single-call and multi-call. Single-call mode | 82 * This function has two modes: single-call and multi-call. Single-call mode |
| 84 * encodes the whole integer at once; it is an error if the output buffer is | 83 * encodes the whole integer at once; it is an error if the output buffer is |
| 85 * too small. Multi-call mode saves the position in *vli_pos, and thus it is | 84 * too small. Multi-call mode saves the position in *vli_pos, and thus it is |
| 86 * possible to continue encoding if the buffer becomes full before the whole | 85 * possible to continue encoding if the buffer becomes full before the whole |
| 87 * integer has been encoded. | 86 * integer has been encoded. |
| 88 * | 87 * |
| 89 * \param vli Integer to be encoded | 88 * \param vli Integer to be encoded |
| 90 * \param vli_pos How many VLI-encoded bytes have already been written | 89 * \param vli_pos How many VLI-encoded bytes have already been written |
| 91 * out. When starting to encode a new integer, *vli_pos | 90 * out. When starting to encode a new integer in |
| 92 * must be set to zero. To use single-call encoding, | 91 * multi-call mode, *vli_pos must be set to zero. |
| 93 * set vli_pos to NULL. | 92 * To use single-call encoding, set vli_pos to NULL. |
| 94 * \param out Beginning of the output buffer | 93 * \param out Beginning of the output buffer |
| 95 * \param out_pos The next byte will be written to out[*out_pos]. | 94 * \param out_pos The next byte will be written to out[*out_pos]. |
| 96 * \param out_size Size of the out buffer; the first byte into | 95 * \param out_size Size of the out buffer; the first byte into |
| 97 * which no data is written to is out[out_size]. | 96 * which no data is written to is out[out_size]. |
| 98 * | 97 * |
| 99 * \return Slightly different return values are used in multi-call and | 98 * \return Slightly different return values are used in multi-call and |
| 100 * single-call modes. | 99 * single-call modes. |
| 101 * | 100 * |
| 102 * Single-call (vli_pos == NULL): | 101 * Single-call (vli_pos == NULL): |
| 103 * - LZMA_OK: Integer successfully encoded. | 102 * - LZMA_OK: Integer successfully encoded. |
| (...skipping 15 matching lines...) Expand all Loading... |
| 119 | 118 |
| 120 /** | 119 /** |
| 121 * \brief Decode a variable-length integer | 120 * \brief Decode a variable-length integer |
| 122 * | 121 * |
| 123 * Like lzma_vli_encode(), this function has single-call and multi-call modes. | 122 * Like lzma_vli_encode(), this function has single-call and multi-call modes. |
| 124 * | 123 * |
| 125 * \param vli Pointer to decoded integer. The decoder will | 124 * \param vli Pointer to decoded integer. The decoder will |
| 126 * initialize it to zero when *vli_pos == 0, so | 125 * initialize it to zero when *vli_pos == 0, so |
| 127 * application isn't required to initialize *vli. | 126 * application isn't required to initialize *vli. |
| 128 * \param vli_pos How many bytes have already been decoded. When | 127 * \param vli_pos How many bytes have already been decoded. When |
| 129 * starting to decode a new integer, *vli_pos must | 128 * starting to decode a new integer in multi-call |
| 130 * be initialized to zero. To use single-call decoding, | 129 * mode, *vli_pos must be initialized to zero. To |
| 131 * set this to NULL. | 130 * use single-call decoding, set vli_pos to NULL. |
| 132 * \param in Beginning of the input buffer | 131 * \param in Beginning of the input buffer |
| 133 * \param in_pos The next byte will be read from in[*in_pos]. | 132 * \param in_pos The next byte will be read from in[*in_pos]. |
| 134 * \param in_size Size of the input buffer; the first byte that | 133 * \param in_size Size of the input buffer; the first byte that |
| 135 * won't be read is in[in_size]. | 134 * won't be read is in[in_size]. |
| 136 * | 135 * |
| 137 * \return Slightly different return values are used in multi-call and | 136 * \return Slightly different return values are used in multi-call and |
| 138 * single-call modes. | 137 * single-call modes. |
| 139 * | 138 * |
| 140 * Single-call (vli_pos == NULL): | 139 * Single-call (vli_pos == NULL): |
| 141 * - LZMA_OK: Integer successfully decoded. | 140 * - LZMA_OK: Integer successfully decoded. |
| (...skipping 16 matching lines...) Expand all Loading... |
| 158 | 157 |
| 159 | 158 |
| 160 /** | 159 /** |
| 161 * \brief Get the number of bytes required to encode a VLI | 160 * \brief Get the number of bytes required to encode a VLI |
| 162 * | 161 * |
| 163 * \return Number of bytes on success (1-9). If vli isn't valid, | 162 * \return Number of bytes on success (1-9). If vli isn't valid, |
| 164 * zero is returned. | 163 * zero is returned. |
| 165 */ | 164 */ |
| 166 extern LZMA_API(uint32_t) lzma_vli_size(lzma_vli vli) | 165 extern LZMA_API(uint32_t) lzma_vli_size(lzma_vli vli) |
| 167 lzma_nothrow lzma_attr_pure; | 166 lzma_nothrow lzma_attr_pure; |
| OLD | NEW |