Home | History | Annotate | Download | only in brotli
      1 /* Copyright 2013 Google Inc. All Rights Reserved.
      2 
      3    Distributed under MIT license.
      4    See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
      5 */
      6 
      7 /**
      8  * @file
      9  * Common types used in decoder and encoder API.
     10  */
     11 
     12 #ifndef BROTLI_COMMON_TYPES_H_
     13 #define BROTLI_COMMON_TYPES_H_
     14 
     15 #include <stddef.h>  /* for size_t */
     16 
     17 #if defined(_MSC_VER) && (_MSC_VER < 1600)
     18 typedef __int8 int8_t;
     19 typedef unsigned __int8 uint8_t;
     20 typedef __int16 int16_t;
     21 typedef unsigned __int16 uint16_t;
     22 typedef __int32 int32_t;
     23 typedef unsigned __int32 uint32_t;
     24 typedef unsigned __int64 uint64_t;
     25 typedef __int64 int64_t;
     26 #else
     27 #include <stdint.h>
     28 #endif  /* defined(_MSC_VER) && (_MSC_VER < 1600) */
     29 
     30 /**
     31  * A portable @c bool replacement.
     32  *
     33  * ::BROTLI_BOOL is a "documentation" type: actually it is @c int, but in API it
     34  * denotes a type, whose only values are ::BROTLI_TRUE and ::BROTLI_FALSE.
     35  *
     36  * ::BROTLI_BOOL values passed to Brotli should either be ::BROTLI_TRUE or
     37  * ::BROTLI_FALSE, or be a result of ::TO_BROTLI_BOOL macros.
     38  *
     39  * ::BROTLI_BOOL values returned by Brotli should not be tested for equality
     40  * with @c true, @c false, ::BROTLI_TRUE, ::BROTLI_FALSE, but rather should be
     41  * evaluated, for example: @code{.cpp}
     42  * if (SomeBrotliFunction(encoder, BROTLI_TRUE) &&
     43  *     !OtherBrotliFunction(decoder, BROTLI_FALSE)) {
     44  *   bool x = !!YetAnotherBrotliFunction(encoder, TO_BROLTI_BOOL(2 * 2 == 4));
     45  *   DoSomething(x);
     46  * }
     47  * @endcode
     48  */
     49 #define BROTLI_BOOL int
     50 /** Portable @c true replacement. */
     51 #define BROTLI_TRUE 1
     52 /** Portable @c false replacement. */
     53 #define BROTLI_FALSE 0
     54 /** @c bool to ::BROTLI_BOOL conversion macros. */
     55 #define TO_BROTLI_BOOL(X) (!!(X) ? BROTLI_TRUE : BROTLI_FALSE)
     56 
     57 #define BROTLI_MAKE_UINT64_T(high, low) ((((uint64_t)(high)) << 32) | low)
     58 
     59 #define BROTLI_UINT32_MAX (~((uint32_t)0))
     60 #define BROTLI_SIZE_MAX (~((size_t)0))
     61 
     62 /**
     63  * Allocating function pointer type.
     64  *
     65  * @param opaque custom memory manager handle provided by client
     66  * @param size requested memory region size; can not be @c 0
     67  * @returns @c 0 in the case of failure
     68  * @returns a valid pointer to a memory region of at least @p size bytes
     69  *          long otherwise
     70  */
     71 typedef void* (*brotli_alloc_func)(void* opaque, size_t size);
     72 
     73 /**
     74  * Deallocating function pointer type.
     75  *
     76  * This function @b SHOULD do nothing if @p address is @c 0.
     77  *
     78  * @param opaque custom memory manager handle provided by client
     79  * @param address memory region pointer returned by ::brotli_alloc_func, or @c 0
     80  */
     81 typedef void (*brotli_free_func)(void* opaque, void* address);
     82 
     83 #if defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) && \
     84     !defined(__cplusplus) && !defined(__PGI)
     85 #define BROTLI_ARRAY_PARAM(L) L
     86 #else
     87 #define BROTLI_ARRAY_PARAM(L)
     88 #endif
     89 
     90 #endif  /* BROTLI_COMMON_TYPES_H_ */
     91