1 // Copyright 2010 Google Inc. All Rights Reserved. 2 // 3 // Use of this source code is governed by a BSD-style license 4 // that can be found in the COPYING file in the root of the source 5 // tree. An additional intellectual property rights grant can be found 6 // in the file PATENTS. All contributing project authors may 7 // be found in the AUTHORS file in the root of the source tree. 8 // ----------------------------------------------------------------------------- 9 // 10 // Common types + memory wrappers 11 // 12 // Author: Skal ([email protected]) 13 14 #ifndef WEBP_WEBP_TYPES_H_ 15 #define WEBP_WEBP_TYPES_H_ 16 17 #include <stddef.h> // for size_t 18 19 #ifndef _MSC_VER 20 #include <inttypes.h> 21 #if defined(__cplusplus) || !defined(__STRICT_ANSI__) || \ 22 (defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L) 23 #define WEBP_INLINE inline 24 #else 25 #define WEBP_INLINE 26 #endif 27 #else 28 typedef signed char int8_t; 29 typedef unsigned char uint8_t; 30 typedef signed short int16_t; 31 typedef unsigned short uint16_t; 32 typedef signed int int32_t; 33 typedef unsigned int uint32_t; 34 typedef unsigned long long int uint64_t; 35 typedef long long int int64_t; 36 #define WEBP_INLINE __forceinline 37 #endif /* _MSC_VER */ 38 39 #ifndef WEBP_NODISCARD 40 #if defined(WEBP_ENABLE_NODISCARD) && WEBP_ENABLE_NODISCARD 41 #if (defined(__cplusplus) && __cplusplus >= 201700L) || \ 42 (defined(__STDC_VERSION__) && __STDC_VERSION__ >= 202311L) 43 #define WEBP_NODISCARD [[nodiscard]] 44 #else 45 // gcc's __has_attribute does not work for enums. 46 #if defined(__clang__) && defined(__has_attribute) 47 #if __has_attribute(warn_unused_result) 48 #define WEBP_NODISCARD __attribute__((warn_unused_result)) 49 #else 50 #define WEBP_NODISCARD 51 #endif /* __has_attribute(warn_unused_result) */ 52 #else 53 #define WEBP_NODISCARD 54 #endif /* defined(__clang__) && defined(__has_attribute) */ 55 #endif /* (defined(__cplusplus) && __cplusplus >= 201700L) || 56 (defined(__STDC_VERSION__) && __STDC_VERSION__ >= 202311L) */ 57 #else 58 #define WEBP_NODISCARD 59 #endif /* defined(WEBP_ENABLE_NODISCARD) && WEBP_ENABLE_NODISCARD */ 60 #endif /* WEBP_NODISCARD */ 61 62 #ifndef WEBP_EXTERN 63 // This explicitly marks library functions and allows for changing the 64 // signature for e.g., Windows DLL builds. 65 # if defined(_WIN32) && defined(WEBP_DLL) 66 # define WEBP_EXTERN __declspec(dllexport) 67 # elif defined(__GNUC__) && __GNUC__ >= 4 68 # define WEBP_EXTERN extern __attribute__ ((visibility ("default"))) 69 # else 70 # define WEBP_EXTERN extern 71 # endif /* defined(_WIN32) && defined(WEBP_DLL) */ 72 #endif /* WEBP_EXTERN */ 73 74 // Macro to check ABI compatibility (same major revision number) 75 #define WEBP_ABI_IS_INCOMPATIBLE(a, b) (((a) >> 8) != ((b) >> 8)) 76 77 #ifdef __cplusplus 78 extern "C" { 79 #endif 80 81 // Allocates 'size' bytes of memory. Returns NULL upon error. Memory 82 // must be deallocated by calling WebPFree(). This function is made available 83 // by the core 'libwebp' library. 84 WEBP_NODISCARD WEBP_EXTERN void* WebPMalloc(size_t size); 85 86 // Releases memory returned by the WebPDecode*() functions (from decode.h). 87 WEBP_EXTERN void WebPFree(void* ptr); 88 89 #ifdef __cplusplus 90 } // extern "C" 91 #endif 92 93 #endif // WEBP_WEBP_TYPES_H_ 94