#ifndef WUFFS_INCLUDE_GUARD
#define WUFFS_INCLUDE_GUARD
#if defined(__GNUC__)
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wimplicit-fallthrough"
#pragma GCC diagnostic ignored "-Wmissing-field-initializers"
#pragma GCC diagnostic ignored "-Wunreachable-code"
#pragma GCC diagnostic ignored "-Wunused-function"
#pragma GCC diagnostic ignored "-Wunused-parameter"
#if defined(__cplusplus)
#pragma GCC diagnostic ignored "-Wold-style-cast"
#endif
#elif defined(__clang__)
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wimplicit-fallthrough"
#pragma clang diagnostic ignored "-Wmissing-field-initializers"
#pragma clang diagnostic ignored "-Wunreachable-code"
#pragma clang diagnostic ignored "-Wunused-function"
#pragma clang diagnostic ignored "-Wunused-parameter"
#if defined(__cplusplus)
#pragma clang diagnostic ignored "-Wold-style-cast"
#endif
#endif
#include <stdbool.h>
#include <stdint.h>
#include <stdlib.h>
#include <string.h>
#ifdef __cplusplus
#if (__cplusplus >= 201103L) || defined(_MSC_VER)
#include <memory>
#define WUFFS_BASE__HAVE_EQ_DELETE
#define WUFFS_BASE__HAVE_UNIQUE_PTR
#elif defined(__GNUC__) || defined(__clang__)
#warning "Wuffs' C++ code expects -std=c++11 or later"
#endif
extern "C" {
#endif
#define WUFFS_VERSION …
#define WUFFS_VERSION_MAJOR …
#define WUFFS_VERSION_MINOR …
#define WUFFS_VERSION_PATCH …
#define WUFFS_VERSION_PRE_RELEASE_LABEL …
#define WUFFS_VERSION_BUILD_METADATA_COMMIT_COUNT …
#define WUFFS_VERSION_BUILD_METADATA_COMMIT_DATE …
#define WUFFS_VERSION_STRING …
#if defined(WUFFS_CONFIG__AVOID_CPU_ARCH)
#else
#if defined(__GNUC__) || defined(__clang__)
#define WUFFS_BASE__MAYBE_ATTRIBUTE_TARGET(arg) …
#else
#define WUFFS_BASE__MAYBE_ATTRIBUTE_TARGET …
#endif
#if defined(__GNUC__)
#if defined(__ARM_FEATURE_UNALIGNED) && !defined(__native_client__) && \
defined(__BYTE_ORDER__) && (__BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__)
#if defined(__ARM_FEATURE_CRC32)
#include <arm_acle.h>
#define WUFFS_BASE__CPU_ARCH__ARM_CRC32
#endif
#if defined(__ARM_NEON)
#include <arm_neon.h>
#define WUFFS_BASE__CPU_ARCH__ARM_NEON
#endif
#endif
#if defined(__i386__) || defined(__x86_64__)
#if !defined(__native_client__)
#include <cpuid.h>
#include <x86intrin.h>
#define WUFFS_BASE__CPU_ARCH__X86_FAMILY
#endif
#endif
#elif defined(_MSC_VER)
#if defined(_M_IX86) || defined(_M_X64)
#if defined(__AVX__) || defined(__clang__)
#include <intrin.h>
#include <immintrin.h>
#include <nmmintrin.h>
#include <wmmintrin.h>
#define WUFFS_BASE__CPU_ARCH__X86_FAMILY
#else
#pragma message("Wuffs with MSVC+IX86/X64 needs /arch:AVX for best performance")
#endif
#endif
#endif
#endif
#if defined(WUFFS_CONFIG__STATIC_FUNCTIONS)
#define WUFFS_BASE__MAYBE_STATIC …
#else
#define WUFFS_BASE__MAYBE_STATIC
#endif
static inline bool
wuffs_base__cpu_arch__have_arm_crc32() { … }
static inline bool
wuffs_base__cpu_arch__have_arm_neon() { … }
static inline bool
wuffs_base__cpu_arch__have_x86_avx2() { … }
static inline bool
wuffs_base__cpu_arch__have_x86_bmi2() { … }
static inline bool
wuffs_base__cpu_arch__have_x86_sse42() { … }
#if defined(__WORDSIZE)
#if (__WORDSIZE != 32) && (__WORDSIZE != 64)
#error "Wuffs requires a word size of either 32 or 64 bits"
#endif
#endif
#if defined(__GNUC__) || defined(__clang__)
#define WUFFS_BASE__POTENTIALLY_UNUSED …
#define WUFFS_BASE__WARN_UNUSED_RESULT …
#else
#define WUFFS_BASE__POTENTIALLY_UNUSED
#define WUFFS_BASE__WARN_UNUSED_RESULT
#endif
#define WUFFS_INITIALIZE__DEFAULT_OPTIONS …
#define WUFFS_INITIALIZE__ALREADY_ZEROED …
#define WUFFS_INITIALIZE__LEAVE_INTERNAL_BUFFERS_UNINITIALIZED …
wuffs_base__empty_struct;
static inline wuffs_base__empty_struct
wuffs_base__make_empty_struct() { … }
wuffs_base__utility;
wuffs_base__vtable;
wuffs_base__status;
extern const char wuffs_base__note__i_o_redirect[];
extern const char wuffs_base__note__end_of_data[];
extern const char wuffs_base__note__metadata_reported[];
extern const char wuffs_base__suspension__even_more_information[];
extern const char wuffs_base__suspension__mispositioned_read[];
extern const char wuffs_base__suspension__mispositioned_write[];
extern const char wuffs_base__suspension__short_read[];
extern const char wuffs_base__suspension__short_write[];
extern const char wuffs_base__error__bad_i_o_position[];
extern const char wuffs_base__error__bad_argument_length_too_short[];
extern const char wuffs_base__error__bad_argument[];
extern const char wuffs_base__error__bad_call_sequence[];
extern const char wuffs_base__error__bad_data[];
extern const char wuffs_base__error__bad_receiver[];
extern const char wuffs_base__error__bad_restart[];
extern const char wuffs_base__error__bad_sizeof_receiver[];
extern const char wuffs_base__error__bad_vtable[];
extern const char wuffs_base__error__bad_workbuf_length[];
extern const char wuffs_base__error__bad_wuffs_version[];
extern const char wuffs_base__error__cannot_return_a_suspension[];
extern const char wuffs_base__error__disabled_by_previous_error[];
extern const char wuffs_base__error__initialize_falsely_claimed_already_zeroed[];
extern const char wuffs_base__error__initialize_not_called[];
extern const char wuffs_base__error__interleaved_coroutine_calls[];
extern const char wuffs_base__error__no_more_information[];
extern const char wuffs_base__error__not_enough_data[];
extern const char wuffs_base__error__out_of_bounds[];
extern const char wuffs_base__error__unsupported_method[];
extern const char wuffs_base__error__unsupported_option[];
extern const char wuffs_base__error__unsupported_pixel_swizzler_option[];
extern const char wuffs_base__error__too_much_data[];
static inline wuffs_base__status
wuffs_base__make_status(const char* repr) { … }
static inline bool
wuffs_base__status__is_complete(const wuffs_base__status* z) { … }
static inline bool
wuffs_base__status__is_error(const wuffs_base__status* z) { … }
static inline bool
wuffs_base__status__is_note(const wuffs_base__status* z) { … }
static inline bool
wuffs_base__status__is_ok(const wuffs_base__status* z) { … }
static inline bool
wuffs_base__status__is_suspension(const wuffs_base__status* z) { … }
static inline const char*
wuffs_base__status__message(const wuffs_base__status* z) { … }
#ifdef __cplusplus
inline bool
wuffs_base__status::is_complete() const { … }
inline bool
wuffs_base__status::is_error() const { … }
inline bool
wuffs_base__status::is_note() const { … }
inline bool
wuffs_base__status::is_ok() const { … }
inline bool
wuffs_base__status::is_suspension() const { … }
inline const char*
wuffs_base__status::message() const { … }
#endif
#define WUFFS_BASE__RESULT(T) …
wuffs_base__result_f64;
wuffs_base__result_i64;
wuffs_base__result_u64;
wuffs_base__transform__output;
#define WUFFS_BASE__FOURCC__BGCL …
#define WUFFS_BASE__FOURCC__BMP …
#define WUFFS_BASE__FOURCC__BRTL …
#define WUFFS_BASE__FOURCC__BZ2 …
#define WUFFS_BASE__FOURCC__CBOR …
#define WUFFS_BASE__FOURCC__CHRM …
#define WUFFS_BASE__FOURCC__CSS …
#define WUFFS_BASE__FOURCC__EPS …
#define WUFFS_BASE__FOURCC__EXIF …
#define WUFFS_BASE__FOURCC__FLAC …
#define WUFFS_BASE__FOURCC__GAMA …
#define WUFFS_BASE__FOURCC__GIF …
#define WUFFS_BASE__FOURCC__GZ …
#define WUFFS_BASE__FOURCC__HEIF …
#define WUFFS_BASE__FOURCC__HTML …
#define WUFFS_BASE__FOURCC__ICCP …
#define WUFFS_BASE__FOURCC__ICO …
#define WUFFS_BASE__FOURCC__ICVG …
#define WUFFS_BASE__FOURCC__INI …
#define WUFFS_BASE__FOURCC__JPEG …
#define WUFFS_BASE__FOURCC__JS …
#define WUFFS_BASE__FOURCC__JSON …
#define WUFFS_BASE__FOURCC__JWCC …
#define WUFFS_BASE__FOURCC__KVP …
#define WUFFS_BASE__FOURCC__KVPK …
#define WUFFS_BASE__FOURCC__KVPV …
#define WUFFS_BASE__FOURCC__LZ4 …
#define WUFFS_BASE__FOURCC__MD …
#define WUFFS_BASE__FOURCC__MTIM …
#define WUFFS_BASE__FOURCC__MP3 …
#define WUFFS_BASE__FOURCC__NIE …
#define WUFFS_BASE__FOURCC__OFS2 …
#define WUFFS_BASE__FOURCC__OTF …
#define WUFFS_BASE__FOURCC__PDF …
#define WUFFS_BASE__FOURCC__PHYD …
#define WUFFS_BASE__FOURCC__PNG …
#define WUFFS_BASE__FOURCC__PNM …
#define WUFFS_BASE__FOURCC__PS …
#define WUFFS_BASE__FOURCC__QOI …
#define WUFFS_BASE__FOURCC__RAC …
#define WUFFS_BASE__FOURCC__RAW …
#define WUFFS_BASE__FOURCC__RIFF …
#define WUFFS_BASE__FOURCC__RIGL …
#define WUFFS_BASE__FOURCC__SNPY …
#define WUFFS_BASE__FOURCC__SRGB …
#define WUFFS_BASE__FOURCC__SVG …
#define WUFFS_BASE__FOURCC__TAR …
#define WUFFS_BASE__FOURCC__TEXT …
#define WUFFS_BASE__FOURCC__TGA …
#define WUFFS_BASE__FOURCC__TIFF …
#define WUFFS_BASE__FOURCC__TOML …
#define WUFFS_BASE__FOURCC__WAVE …
#define WUFFS_BASE__FOURCC__WBMP …
#define WUFFS_BASE__FOURCC__WEBP …
#define WUFFS_BASE__FOURCC__WOFF …
#define WUFFS_BASE__FOURCC__XML …
#define WUFFS_BASE__FOURCC__XMP …
#define WUFFS_BASE__FOURCC__XZ …
#define WUFFS_BASE__FOURCC__ZIP …
#define WUFFS_BASE__FOURCC__ZLIB …
#define WUFFS_BASE__FOURCC__ZSTD …
#define WUFFS_BASE__QUIRK_IGNORE_CHECKSUM …
wuffs_base__flicks;
#define WUFFS_BASE__FLICKS_PER_SECOND …
#define WUFFS_BASE__FLICKS_PER_MILLISECOND …
static inline int8_t
wuffs_base__i8__min(int8_t x, int8_t y) { … }
static inline int8_t
wuffs_base__i8__max(int8_t x, int8_t y) { … }
static inline int16_t
wuffs_base__i16__min(int16_t x, int16_t y) { … }
static inline int16_t
wuffs_base__i16__max(int16_t x, int16_t y) { … }
static inline int32_t
wuffs_base__i32__min(int32_t x, int32_t y) { … }
static inline int32_t
wuffs_base__i32__max(int32_t x, int32_t y) { … }
static inline int64_t
wuffs_base__i64__min(int64_t x, int64_t y) { … }
static inline int64_t
wuffs_base__i64__max(int64_t x, int64_t y) { … }
static inline uint8_t
wuffs_base__u8__min(uint8_t x, uint8_t y) { … }
static inline uint8_t
wuffs_base__u8__max(uint8_t x, uint8_t y) { … }
static inline uint16_t
wuffs_base__u16__min(uint16_t x, uint16_t y) { … }
static inline uint16_t
wuffs_base__u16__max(uint16_t x, uint16_t y) { … }
static inline uint32_t
wuffs_base__u32__min(uint32_t x, uint32_t y) { … }
static inline uint32_t
wuffs_base__u32__max(uint32_t x, uint32_t y) { … }
static inline uint64_t
wuffs_base__u64__min(uint64_t x, uint64_t y) { … }
static inline uint64_t
wuffs_base__u64__max(uint64_t x, uint64_t y) { … }
static inline uint8_t
wuffs_base__u8__rotate_left(uint8_t x, uint32_t n) { … }
static inline uint8_t
wuffs_base__u8__rotate_right(uint8_t x, uint32_t n) { … }
static inline uint16_t
wuffs_base__u16__rotate_left(uint16_t x, uint32_t n) { … }
static inline uint16_t
wuffs_base__u16__rotate_right(uint16_t x, uint32_t n) { … }
static inline uint32_t
wuffs_base__u32__rotate_left(uint32_t x, uint32_t n) { … }
static inline uint32_t
wuffs_base__u32__rotate_right(uint32_t x, uint32_t n) { … }
static inline uint64_t
wuffs_base__u64__rotate_left(uint64_t x, uint32_t n) { … }
static inline uint64_t
wuffs_base__u64__rotate_right(uint64_t x, uint32_t n) { … }
static inline uint8_t
wuffs_base__u8__sat_add(uint8_t x, uint8_t y) { … }
static inline uint8_t
wuffs_base__u8__sat_sub(uint8_t x, uint8_t y) { … }
static inline uint16_t
wuffs_base__u16__sat_add(uint16_t x, uint16_t y) { … }
static inline uint16_t
wuffs_base__u16__sat_sub(uint16_t x, uint16_t y) { … }
static inline uint32_t
wuffs_base__u32__sat_add(uint32_t x, uint32_t y) { … }
static inline uint32_t
wuffs_base__u32__sat_sub(uint32_t x, uint32_t y) { … }
static inline uint64_t
wuffs_base__u64__sat_add(uint64_t x, uint64_t y) { … }
static inline uint64_t
wuffs_base__u64__sat_sub(uint64_t x, uint64_t y) { … }
wuffs_base__multiply_u64__output;
static inline wuffs_base__multiply_u64__output
wuffs_base__multiply_u64(uint64_t x, uint64_t y) { … }
#if (defined(__GNUC__) || defined(__clang__)) && (__SIZEOF_LONG__ == 8)
static inline uint32_t
wuffs_base__count_leading_zeroes_u64(uint64_t u) { … }
#else
static inline uint32_t
wuffs_base__count_leading_zeroes_u64(uint64_t u) {
if (u == 0) {
return 64;
}
uint32_t n = 0;
if ((u >> 32) == 0) {
n |= 32;
u <<= 32;
}
if ((u >> 48) == 0) {
n |= 16;
u <<= 16;
}
if ((u >> 56) == 0) {
n |= 8;
u <<= 8;
}
if ((u >> 60) == 0) {
n |= 4;
u <<= 4;
}
if ((u >> 62) == 0) {
n |= 2;
u <<= 2;
}
if ((u >> 63) == 0) {
n |= 1;
u <<= 1;
}
return n;
}
#endif
#if defined(_MSC_VER) && !defined(__clang__) && \
(defined(_M_ARM64) || defined(_M_X64))
#define WUFFS_BASE__USE_MEMCPY_LE_PEEK_POKE
#endif
#define wuffs_base__peek_u8be__no_bounds_check …
#define wuffs_base__peek_u8le__no_bounds_check …
static inline uint8_t
wuffs_base__peek_u8__no_bounds_check(const uint8_t* p) { … }
static inline uint16_t
wuffs_base__peek_u16be__no_bounds_check(const uint8_t* p) { … }
static inline uint16_t
wuffs_base__peek_u16le__no_bounds_check(const uint8_t* p) { … }
static inline uint32_t
wuffs_base__peek_u24be__no_bounds_check(const uint8_t* p) { … }
static inline uint32_t
wuffs_base__peek_u24le__no_bounds_check(const uint8_t* p) { … }
static inline uint32_t
wuffs_base__peek_u32be__no_bounds_check(const uint8_t* p) { … }
static inline uint32_t
wuffs_base__peek_u32le__no_bounds_check(const uint8_t* p) { … }
static inline uint64_t
wuffs_base__peek_u40be__no_bounds_check(const uint8_t* p) { … }
static inline uint64_t
wuffs_base__peek_u40le__no_bounds_check(const uint8_t* p) { … }
static inline uint64_t
wuffs_base__peek_u48be__no_bounds_check(const uint8_t* p) { … }
static inline uint64_t
wuffs_base__peek_u48le__no_bounds_check(const uint8_t* p) { … }
static inline uint64_t
wuffs_base__peek_u56be__no_bounds_check(const uint8_t* p) { … }
static inline uint64_t
wuffs_base__peek_u56le__no_bounds_check(const uint8_t* p) { … }
static inline uint64_t
wuffs_base__peek_u64be__no_bounds_check(const uint8_t* p) { … }
static inline uint64_t
wuffs_base__peek_u64le__no_bounds_check(const uint8_t* p) { … }
#define wuffs_base__poke_u8be__no_bounds_check …
#define wuffs_base__poke_u8le__no_bounds_check …
static inline void
wuffs_base__poke_u8__no_bounds_check(uint8_t* p, uint8_t x) { … }
static inline void
wuffs_base__poke_u16be__no_bounds_check(uint8_t* p, uint16_t x) { … }
static inline void
wuffs_base__poke_u16le__no_bounds_check(uint8_t* p, uint16_t x) { … }
static inline void
wuffs_base__poke_u24be__no_bounds_check(uint8_t* p, uint32_t x) { … }
static inline void
wuffs_base__poke_u24le__no_bounds_check(uint8_t* p, uint32_t x) { … }
static inline void
wuffs_base__poke_u32be__no_bounds_check(uint8_t* p, uint32_t x) { … }
static inline void
wuffs_base__poke_u32le__no_bounds_check(uint8_t* p, uint32_t x) { … }
static inline void
wuffs_base__poke_u40be__no_bounds_check(uint8_t* p, uint64_t x) { … }
static inline void
wuffs_base__poke_u40le__no_bounds_check(uint8_t* p, uint64_t x) { … }
static inline void
wuffs_base__poke_u48be__no_bounds_check(uint8_t* p, uint64_t x) { … }
static inline void
wuffs_base__poke_u48le__no_bounds_check(uint8_t* p, uint64_t x) { … }
static inline void
wuffs_base__poke_u56be__no_bounds_check(uint8_t* p, uint64_t x) { … }
static inline void
wuffs_base__poke_u56le__no_bounds_check(uint8_t* p, uint64_t x) { … }
static inline void
wuffs_base__poke_u64be__no_bounds_check(uint8_t* p, uint64_t x) { … }
static inline void
wuffs_base__poke_u64le__no_bounds_check(uint8_t* p, uint64_t x) { … }
#define wuffs_base__load_u8__no_bounds_check …
#define wuffs_base__load_u16be__no_bounds_check …
#define wuffs_base__load_u16le__no_bounds_check …
#define wuffs_base__load_u24be__no_bounds_check …
#define wuffs_base__load_u24le__no_bounds_check …
#define wuffs_base__load_u32be__no_bounds_check …
#define wuffs_base__load_u32le__no_bounds_check …
#define wuffs_base__load_u40be__no_bounds_check …
#define wuffs_base__load_u40le__no_bounds_check …
#define wuffs_base__load_u48be__no_bounds_check …
#define wuffs_base__load_u48le__no_bounds_check …
#define wuffs_base__load_u56be__no_bounds_check …
#define wuffs_base__load_u56le__no_bounds_check …
#define wuffs_base__load_u64be__no_bounds_check …
#define wuffs_base__load_u64le__no_bounds_check …
#define wuffs_base__store_u8__no_bounds_check …
#define wuffs_base__store_u16be__no_bounds_check …
#define wuffs_base__store_u16le__no_bounds_check …
#define wuffs_base__store_u24be__no_bounds_check …
#define wuffs_base__store_u24le__no_bounds_check …
#define wuffs_base__store_u32be__no_bounds_check …
#define wuffs_base__store_u32le__no_bounds_check …
#define wuffs_base__store_u40be__no_bounds_check …
#define wuffs_base__store_u40le__no_bounds_check …
#define wuffs_base__store_u48be__no_bounds_check …
#define wuffs_base__store_u48le__no_bounds_check …
#define wuffs_base__store_u56be__no_bounds_check …
#define wuffs_base__store_u56le__no_bounds_check …
#define wuffs_base__store_u64be__no_bounds_check …
#define wuffs_base__store_u64le__no_bounds_check …
#define WUFFS_BASE__SLICE(T) …
#define WUFFS_BASE__TABLE(T) …
wuffs_base__slice_u8;
wuffs_base__slice_u16;
wuffs_base__slice_u32;
wuffs_base__slice_u64;
wuffs_base__table_u8;
wuffs_base__table_u16;
wuffs_base__table_u32;
wuffs_base__table_u64;
static inline wuffs_base__slice_u8
wuffs_base__make_slice_u8(uint8_t* ptr, size_t len) { … }
static inline wuffs_base__slice_u16
wuffs_base__make_slice_u16(uint16_t* ptr, size_t len) { … }
static inline wuffs_base__slice_u32
wuffs_base__make_slice_u32(uint32_t* ptr, size_t len) { … }
static inline wuffs_base__slice_u64
wuffs_base__make_slice_u64(uint64_t* ptr, size_t len) { … }
static inline wuffs_base__slice_u8
wuffs_base__make_slice_u8_ij(uint8_t* ptr, size_t i, size_t j) { … }
static inline wuffs_base__slice_u16
wuffs_base__make_slice_u16_ij(uint16_t* ptr, size_t i, size_t j) { … }
static inline wuffs_base__slice_u32
wuffs_base__make_slice_u32_ij(uint32_t* ptr, size_t i, size_t j) { … }
static inline wuffs_base__slice_u64
wuffs_base__make_slice_u64_ij(uint64_t* ptr, size_t i, size_t j) { … }
static inline wuffs_base__slice_u8
wuffs_base__empty_slice_u8() { … }
static inline wuffs_base__slice_u16
wuffs_base__empty_slice_u16() { … }
static inline wuffs_base__slice_u32
wuffs_base__empty_slice_u32() { … }
static inline wuffs_base__slice_u64
wuffs_base__empty_slice_u64() { … }
static inline wuffs_base__table_u8
wuffs_base__make_table_u8(uint8_t* ptr,
size_t width,
size_t height,
size_t stride) { … }
static inline wuffs_base__table_u16
wuffs_base__make_table_u16(uint16_t* ptr,
size_t width,
size_t height,
size_t stride) { … }
static inline wuffs_base__table_u32
wuffs_base__make_table_u32(uint32_t* ptr,
size_t width,
size_t height,
size_t stride) { … }
static inline wuffs_base__table_u64
wuffs_base__make_table_u64(uint64_t* ptr,
size_t width,
size_t height,
size_t stride) { … }
static inline wuffs_base__table_u8
wuffs_base__empty_table_u8() { … }
static inline wuffs_base__table_u16
wuffs_base__empty_table_u16() { … }
static inline wuffs_base__table_u32
wuffs_base__empty_table_u32() { … }
static inline wuffs_base__table_u64
wuffs_base__empty_table_u64() { … }
static inline bool
wuffs_base__slice_u8__overlaps(wuffs_base__slice_u8 s, wuffs_base__slice_u8 t) { … }
static inline wuffs_base__slice_u8
wuffs_base__slice_u8__subslice_i(wuffs_base__slice_u8 s, uint64_t i) { … }
static inline wuffs_base__slice_u8
wuffs_base__slice_u8__subslice_j(wuffs_base__slice_u8 s, uint64_t j) { … }
static inline wuffs_base__slice_u8
wuffs_base__slice_u8__subslice_ij(wuffs_base__slice_u8 s,
uint64_t i,
uint64_t j) { … }
static inline wuffs_base__table_u8
wuffs_base__table_u8__subtable_ij(wuffs_base__table_u8 t,
uint64_t ix,
uint64_t iy,
uint64_t jx,
uint64_t jy) { … }
static inline size_t
wuffs_base__table__flattened_length(size_t width,
size_t height,
size_t stride) { … }
WUFFS_BASE__MAYBE_STATIC int32_t
wuffs_base__magic_number_guess_fourcc(wuffs_base__slice_u8 prefix_data,
bool prefix_closed);
wuffs_base__range_ii_u32;
static inline wuffs_base__range_ii_u32
wuffs_base__empty_range_ii_u32() { … }
static inline wuffs_base__range_ii_u32
wuffs_base__make_range_ii_u32(uint32_t min_incl, uint32_t max_incl) { … }
static inline bool
wuffs_base__range_ii_u32__is_empty(const wuffs_base__range_ii_u32* r) { … }
static inline bool
wuffs_base__range_ii_u32__equals(const wuffs_base__range_ii_u32* r,
wuffs_base__range_ii_u32 s) { … }
static inline wuffs_base__range_ii_u32
wuffs_base__range_ii_u32__intersect(const wuffs_base__range_ii_u32* r,
wuffs_base__range_ii_u32 s) { … }
static inline wuffs_base__range_ii_u32
wuffs_base__range_ii_u32__unite(const wuffs_base__range_ii_u32* r,
wuffs_base__range_ii_u32 s) { … }
static inline bool
wuffs_base__range_ii_u32__contains(const wuffs_base__range_ii_u32* r,
uint32_t x) { … }
static inline bool
wuffs_base__range_ii_u32__contains_range(const wuffs_base__range_ii_u32* r,
wuffs_base__range_ii_u32 s) { … }
#ifdef __cplusplus
inline bool
wuffs_base__range_ii_u32::is_empty() const { … }
inline bool
wuffs_base__range_ii_u32::equals(wuffs_base__range_ii_u32 s) const { … }
inline wuffs_base__range_ii_u32
wuffs_base__range_ii_u32::intersect(wuffs_base__range_ii_u32 s) const { … }
inline wuffs_base__range_ii_u32
wuffs_base__range_ii_u32::unite(wuffs_base__range_ii_u32 s) const { … }
inline bool
wuffs_base__range_ii_u32::contains(uint32_t x) const { … }
inline bool
wuffs_base__range_ii_u32::contains_range(wuffs_base__range_ii_u32 s) const { … }
#endif
wuffs_base__range_ie_u32;
static inline wuffs_base__range_ie_u32
wuffs_base__empty_range_ie_u32() { … }
static inline wuffs_base__range_ie_u32
wuffs_base__make_range_ie_u32(uint32_t min_incl, uint32_t max_excl) { … }
static inline bool
wuffs_base__range_ie_u32__is_empty(const wuffs_base__range_ie_u32* r) { … }
static inline bool
wuffs_base__range_ie_u32__equals(const wuffs_base__range_ie_u32* r,
wuffs_base__range_ie_u32 s) { … }
static inline wuffs_base__range_ie_u32
wuffs_base__range_ie_u32__intersect(const wuffs_base__range_ie_u32* r,
wuffs_base__range_ie_u32 s) { … }
static inline wuffs_base__range_ie_u32
wuffs_base__range_ie_u32__unite(const wuffs_base__range_ie_u32* r,
wuffs_base__range_ie_u32 s) { … }
static inline bool
wuffs_base__range_ie_u32__contains(const wuffs_base__range_ie_u32* r,
uint32_t x) { … }
static inline bool
wuffs_base__range_ie_u32__contains_range(const wuffs_base__range_ie_u32* r,
wuffs_base__range_ie_u32 s) { … }
static inline uint32_t
wuffs_base__range_ie_u32__length(const wuffs_base__range_ie_u32* r) { … }
#ifdef __cplusplus
inline bool
wuffs_base__range_ie_u32::is_empty() const { … }
inline bool
wuffs_base__range_ie_u32::equals(wuffs_base__range_ie_u32 s) const { … }
inline wuffs_base__range_ie_u32
wuffs_base__range_ie_u32::intersect(wuffs_base__range_ie_u32 s) const { … }
inline wuffs_base__range_ie_u32
wuffs_base__range_ie_u32::unite(wuffs_base__range_ie_u32 s) const { … }
inline bool
wuffs_base__range_ie_u32::contains(uint32_t x) const { … }
inline bool
wuffs_base__range_ie_u32::contains_range(wuffs_base__range_ie_u32 s) const { … }
inline uint32_t
wuffs_base__range_ie_u32::length() const { … }
#endif
wuffs_base__range_ii_u64;
static inline wuffs_base__range_ii_u64
wuffs_base__empty_range_ii_u64() { … }
static inline wuffs_base__range_ii_u64
wuffs_base__make_range_ii_u64(uint64_t min_incl, uint64_t max_incl) { … }
static inline bool
wuffs_base__range_ii_u64__is_empty(const wuffs_base__range_ii_u64* r) { … }
static inline bool
wuffs_base__range_ii_u64__equals(const wuffs_base__range_ii_u64* r,
wuffs_base__range_ii_u64 s) { … }
static inline wuffs_base__range_ii_u64
wuffs_base__range_ii_u64__intersect(const wuffs_base__range_ii_u64* r,
wuffs_base__range_ii_u64 s) { … }
static inline wuffs_base__range_ii_u64
wuffs_base__range_ii_u64__unite(const wuffs_base__range_ii_u64* r,
wuffs_base__range_ii_u64 s) { … }
static inline bool
wuffs_base__range_ii_u64__contains(const wuffs_base__range_ii_u64* r,
uint64_t x) { … }
static inline bool
wuffs_base__range_ii_u64__contains_range(const wuffs_base__range_ii_u64* r,
wuffs_base__range_ii_u64 s) { … }
#ifdef __cplusplus
inline bool
wuffs_base__range_ii_u64::is_empty() const { … }
inline bool
wuffs_base__range_ii_u64::equals(wuffs_base__range_ii_u64 s) const { … }
inline wuffs_base__range_ii_u64
wuffs_base__range_ii_u64::intersect(wuffs_base__range_ii_u64 s) const { … }
inline wuffs_base__range_ii_u64
wuffs_base__range_ii_u64::unite(wuffs_base__range_ii_u64 s) const { … }
inline bool
wuffs_base__range_ii_u64::contains(uint64_t x) const { … }
inline bool
wuffs_base__range_ii_u64::contains_range(wuffs_base__range_ii_u64 s) const { … }
#endif
wuffs_base__range_ie_u64;
static inline wuffs_base__range_ie_u64
wuffs_base__empty_range_ie_u64() { … }
static inline wuffs_base__range_ie_u64
wuffs_base__make_range_ie_u64(uint64_t min_incl, uint64_t max_excl) { … }
static inline bool
wuffs_base__range_ie_u64__is_empty(const wuffs_base__range_ie_u64* r) { … }
static inline bool
wuffs_base__range_ie_u64__equals(const wuffs_base__range_ie_u64* r,
wuffs_base__range_ie_u64 s) { … }
static inline wuffs_base__range_ie_u64
wuffs_base__range_ie_u64__intersect(const wuffs_base__range_ie_u64* r,
wuffs_base__range_ie_u64 s) { … }
static inline wuffs_base__range_ie_u64
wuffs_base__range_ie_u64__unite(const wuffs_base__range_ie_u64* r,
wuffs_base__range_ie_u64 s) { … }
static inline bool
wuffs_base__range_ie_u64__contains(const wuffs_base__range_ie_u64* r,
uint64_t x) { … }
static inline bool
wuffs_base__range_ie_u64__contains_range(const wuffs_base__range_ie_u64* r,
wuffs_base__range_ie_u64 s) { … }
static inline uint64_t
wuffs_base__range_ie_u64__length(const wuffs_base__range_ie_u64* r) { … }
#ifdef __cplusplus
inline bool
wuffs_base__range_ie_u64::is_empty() const { … }
inline bool
wuffs_base__range_ie_u64::equals(wuffs_base__range_ie_u64 s) const { … }
inline wuffs_base__range_ie_u64
wuffs_base__range_ie_u64::intersect(wuffs_base__range_ie_u64 s) const { … }
inline wuffs_base__range_ie_u64
wuffs_base__range_ie_u64::unite(wuffs_base__range_ie_u64 s) const { … }
inline bool
wuffs_base__range_ie_u64::contains(uint64_t x) const { … }
inline bool
wuffs_base__range_ie_u64::contains_range(wuffs_base__range_ie_u64 s) const { … }
inline uint64_t
wuffs_base__range_ie_u64::length() const { … }
#endif
wuffs_base__rect_ii_u32;
static inline wuffs_base__rect_ii_u32
wuffs_base__empty_rect_ii_u32() { … }
static inline wuffs_base__rect_ii_u32
wuffs_base__make_rect_ii_u32(uint32_t min_incl_x,
uint32_t min_incl_y,
uint32_t max_incl_x,
uint32_t max_incl_y) { … }
static inline bool
wuffs_base__rect_ii_u32__is_empty(const wuffs_base__rect_ii_u32* r) { … }
static inline bool
wuffs_base__rect_ii_u32__equals(const wuffs_base__rect_ii_u32* r,
wuffs_base__rect_ii_u32 s) { … }
static inline wuffs_base__rect_ii_u32
wuffs_base__rect_ii_u32__intersect(const wuffs_base__rect_ii_u32* r,
wuffs_base__rect_ii_u32 s) { … }
static inline wuffs_base__rect_ii_u32
wuffs_base__rect_ii_u32__unite(const wuffs_base__rect_ii_u32* r,
wuffs_base__rect_ii_u32 s) { … }
static inline bool
wuffs_base__rect_ii_u32__contains(const wuffs_base__rect_ii_u32* r,
uint32_t x,
uint32_t y) { … }
static inline bool
wuffs_base__rect_ii_u32__contains_rect(const wuffs_base__rect_ii_u32* r,
wuffs_base__rect_ii_u32 s) { … }
#ifdef __cplusplus
inline bool
wuffs_base__rect_ii_u32::is_empty() const { … }
inline bool
wuffs_base__rect_ii_u32::equals(wuffs_base__rect_ii_u32 s) const { … }
inline wuffs_base__rect_ii_u32
wuffs_base__rect_ii_u32::intersect(wuffs_base__rect_ii_u32 s) const { … }
inline wuffs_base__rect_ii_u32
wuffs_base__rect_ii_u32::unite(wuffs_base__rect_ii_u32 s) const { … }
inline bool
wuffs_base__rect_ii_u32::contains(uint32_t x, uint32_t y) const { … }
inline bool
wuffs_base__rect_ii_u32::contains_rect(wuffs_base__rect_ii_u32 s) const { … }
#endif
wuffs_base__rect_ie_u32;
static inline wuffs_base__rect_ie_u32
wuffs_base__empty_rect_ie_u32() { … }
static inline wuffs_base__rect_ie_u32
wuffs_base__make_rect_ie_u32(uint32_t min_incl_x,
uint32_t min_incl_y,
uint32_t max_excl_x,
uint32_t max_excl_y) { … }
static inline bool
wuffs_base__rect_ie_u32__is_empty(const wuffs_base__rect_ie_u32* r) { … }
static inline bool
wuffs_base__rect_ie_u32__equals(const wuffs_base__rect_ie_u32* r,
wuffs_base__rect_ie_u32 s) { … }
static inline wuffs_base__rect_ie_u32
wuffs_base__rect_ie_u32__intersect(const wuffs_base__rect_ie_u32* r,
wuffs_base__rect_ie_u32 s) { … }
static inline wuffs_base__rect_ie_u32
wuffs_base__rect_ie_u32__unite(const wuffs_base__rect_ie_u32* r,
wuffs_base__rect_ie_u32 s) { … }
static inline bool
wuffs_base__rect_ie_u32__contains(const wuffs_base__rect_ie_u32* r,
uint32_t x,
uint32_t y) { … }
static inline bool
wuffs_base__rect_ie_u32__contains_rect(const wuffs_base__rect_ie_u32* r,
wuffs_base__rect_ie_u32 s) { … }
static inline uint32_t
wuffs_base__rect_ie_u32__width(const wuffs_base__rect_ie_u32* r) { … }
static inline uint32_t
wuffs_base__rect_ie_u32__height(const wuffs_base__rect_ie_u32* r) { … }
#ifdef __cplusplus
inline bool
wuffs_base__rect_ie_u32::is_empty() const { … }
inline bool
wuffs_base__rect_ie_u32::equals(wuffs_base__rect_ie_u32 s) const { … }
inline wuffs_base__rect_ie_u32
wuffs_base__rect_ie_u32::intersect(wuffs_base__rect_ie_u32 s) const { … }
inline wuffs_base__rect_ie_u32
wuffs_base__rect_ie_u32::unite(wuffs_base__rect_ie_u32 s) const { … }
inline bool
wuffs_base__rect_ie_u32::contains(uint32_t x, uint32_t y) const { … }
inline bool
wuffs_base__rect_ie_u32::contains_rect(wuffs_base__rect_ie_u32 s) const { … }
inline uint32_t
wuffs_base__rect_ie_u32::width() const { … }
inline uint32_t
wuffs_base__rect_ie_u32::height() const { … }
#endif
wuffs_base__more_information;
#define WUFFS_BASE__MORE_INFORMATION__FLAVOR__IO_REDIRECT …
#define WUFFS_BASE__MORE_INFORMATION__FLAVOR__IO_SEEK …
#define WUFFS_BASE__MORE_INFORMATION__FLAVOR__METADATA …
#define WUFFS_BASE__MORE_INFORMATION__FLAVOR__METADATA_RAW_PASSTHROUGH …
#define WUFFS_BASE__MORE_INFORMATION__FLAVOR__METADATA_RAW_TRANSFORM …
#define WUFFS_BASE__MORE_INFORMATION__FLAVOR__METADATA_PARSED …
static inline wuffs_base__more_information
wuffs_base__empty_more_information() { … }
static inline void
wuffs_base__more_information__set(wuffs_base__more_information* m,
uint32_t flavor,
uint32_t w,
uint64_t x,
uint64_t y,
uint64_t z) { … }
static inline uint32_t
wuffs_base__more_information__io_redirect__fourcc(
const wuffs_base__more_information* m) { … }
static inline wuffs_base__range_ie_u64
wuffs_base__more_information__io_redirect__range(
const wuffs_base__more_information* m) { … }
static inline uint64_t
wuffs_base__more_information__io_seek__position(
const wuffs_base__more_information* m) { … }
static inline uint32_t
wuffs_base__more_information__metadata__fourcc(
const wuffs_base__more_information* m) { … }
static inline wuffs_base__range_ie_u64
wuffs_base__more_information__metadata__range(
const wuffs_base__more_information* m) { … }
static inline wuffs_base__range_ie_u64
wuffs_base__more_information__metadata_raw_passthrough__range(
const wuffs_base__more_information* m) { … }
#define WUFFS_BASE__MORE_INFORMATION__METADATA_PARSED__CHRM__WHITE_X …
#define WUFFS_BASE__MORE_INFORMATION__METADATA_PARSED__CHRM__WHITE_Y …
#define WUFFS_BASE__MORE_INFORMATION__METADATA_PARSED__CHRM__RED_X …
#define WUFFS_BASE__MORE_INFORMATION__METADATA_PARSED__CHRM__RED_Y …
#define WUFFS_BASE__MORE_INFORMATION__METADATA_PARSED__CHRM__GREEN_X …
#define WUFFS_BASE__MORE_INFORMATION__METADATA_PARSED__CHRM__GREEN_Y …
#define WUFFS_BASE__MORE_INFORMATION__METADATA_PARSED__CHRM__BLUE_X …
#define WUFFS_BASE__MORE_INFORMATION__METADATA_PARSED__CHRM__BLUE_Y …
static inline int32_t
wuffs_base__more_information__metadata_parsed__chrm(
const wuffs_base__more_information* m,
uint32_t component) { … }
static inline uint32_t
wuffs_base__more_information__metadata_parsed__gama(
const wuffs_base__more_information* m) { … }
#define WUFFS_BASE__SRGB_RENDERING_INTENT__PERCEPTUAL …
#define WUFFS_BASE__SRGB_RENDERING_INTENT__RELATIVE_COLORIMETRIC …
#define WUFFS_BASE__SRGB_RENDERING_INTENT__SATURATION …
#define WUFFS_BASE__SRGB_RENDERING_INTENT__ABSOLUTE_COLORIMETRIC …
static inline uint32_t
wuffs_base__more_information__metadata_parsed__srgb(
const wuffs_base__more_information* m) { … }
#ifdef __cplusplus
inline void
wuffs_base__more_information::set(uint32_t flavor_arg,
uint32_t w_arg,
uint64_t x_arg,
uint64_t y_arg,
uint64_t z_arg) { … }
inline uint32_t
wuffs_base__more_information::io_redirect__fourcc() const { … }
inline wuffs_base__range_ie_u64
wuffs_base__more_information::io_redirect__range() const { … }
inline uint64_t
wuffs_base__more_information::io_seek__position() const { … }
inline uint32_t
wuffs_base__more_information::metadata__fourcc() const { … }
inline wuffs_base__range_ie_u64
wuffs_base__more_information::metadata__range() const { … }
inline wuffs_base__range_ie_u64
wuffs_base__more_information::metadata_raw_passthrough__range() const { … }
inline int32_t
wuffs_base__more_information::metadata_parsed__chrm(uint32_t component) const { … }
inline uint32_t
wuffs_base__more_information::metadata_parsed__gama() const { … }
inline uint32_t
wuffs_base__more_information::metadata_parsed__srgb() const { … }
#endif
wuffs_base__io_buffer_meta;
wuffs_base__io_buffer;
static inline wuffs_base__io_buffer
wuffs_base__make_io_buffer(wuffs_base__slice_u8 data,
wuffs_base__io_buffer_meta meta) { … }
static inline wuffs_base__io_buffer_meta
wuffs_base__make_io_buffer_meta(size_t wi,
size_t ri,
uint64_t pos,
bool closed) { … }
static inline wuffs_base__io_buffer
wuffs_base__ptr_u8__reader(uint8_t* ptr, size_t len, bool closed) { … }
static inline wuffs_base__io_buffer
wuffs_base__ptr_u8__writer(uint8_t* ptr, size_t len) { … }
static inline wuffs_base__io_buffer
wuffs_base__slice_u8__reader(wuffs_base__slice_u8 s, bool closed) { … }
static inline wuffs_base__io_buffer
wuffs_base__slice_u8__writer(wuffs_base__slice_u8 s) { … }
static inline wuffs_base__io_buffer
wuffs_base__empty_io_buffer() { … }
static inline wuffs_base__io_buffer_meta
wuffs_base__empty_io_buffer_meta() { … }
static inline bool
wuffs_base__io_buffer__is_valid(const wuffs_base__io_buffer* buf) { … }
static inline void
wuffs_base__io_buffer__compact(wuffs_base__io_buffer* buf) { … }
static inline uint64_t
wuffs_base__io_buffer__reader_io_position(const wuffs_base__io_buffer* buf) { … }
static inline size_t
wuffs_base__io_buffer__reader_length(const wuffs_base__io_buffer* buf) { … }
static inline uint8_t*
wuffs_base__io_buffer__reader_pointer(const wuffs_base__io_buffer* buf) { … }
static inline uint64_t
wuffs_base__io_buffer__reader_position(const wuffs_base__io_buffer* buf) { … }
static inline wuffs_base__slice_u8
wuffs_base__io_buffer__reader_slice(const wuffs_base__io_buffer* buf) { … }
static inline uint64_t
wuffs_base__io_buffer__writer_io_position(const wuffs_base__io_buffer* buf) { … }
static inline size_t
wuffs_base__io_buffer__writer_length(const wuffs_base__io_buffer* buf) { … }
static inline uint8_t*
wuffs_base__io_buffer__writer_pointer(const wuffs_base__io_buffer* buf) { … }
static inline uint64_t
wuffs_base__io_buffer__writer_position(const wuffs_base__io_buffer* buf) { … }
static inline wuffs_base__slice_u8
wuffs_base__io_buffer__writer_slice(const wuffs_base__io_buffer* buf) { … }
#ifdef __cplusplus
inline bool
wuffs_base__io_buffer::is_valid() const { … }
inline void
wuffs_base__io_buffer::compact() { … }
inline uint64_t
wuffs_base__io_buffer::reader_io_position() const { … }
inline size_t
wuffs_base__io_buffer::reader_length() const { … }
inline uint8_t*
wuffs_base__io_buffer::reader_pointer() const { … }
inline uint64_t
wuffs_base__io_buffer::reader_position() const { … }
inline wuffs_base__slice_u8
wuffs_base__io_buffer::reader_slice() const { … }
inline uint64_t
wuffs_base__io_buffer::writer_io_position() const { … }
inline size_t
wuffs_base__io_buffer::writer_length() const { … }
inline uint8_t*
wuffs_base__io_buffer::writer_pointer() const { … }
inline uint64_t
wuffs_base__io_buffer::writer_position() const { … }
inline wuffs_base__slice_u8
wuffs_base__io_buffer::writer_slice() const { … }
#endif
wuffs_base__token;
static inline wuffs_base__token
wuffs_base__make_token(uint64_t repr) { … }
#define WUFFS_BASE__TOKEN__LENGTH__MAX_INCL …
#define WUFFS_BASE__TOKEN__VALUE__SHIFT …
#define WUFFS_BASE__TOKEN__VALUE_EXTENSION__SHIFT …
#define WUFFS_BASE__TOKEN__VALUE_MAJOR__SHIFT …
#define WUFFS_BASE__TOKEN__VALUE_MINOR__SHIFT …
#define WUFFS_BASE__TOKEN__VALUE_BASE_CATEGORY__SHIFT …
#define WUFFS_BASE__TOKEN__VALUE_BASE_DETAIL__SHIFT …
#define WUFFS_BASE__TOKEN__CONTINUED__SHIFT …
#define WUFFS_BASE__TOKEN__LENGTH__SHIFT …
#define WUFFS_BASE__TOKEN__VALUE_EXTENSION__NUM_BITS …
#define WUFFS_BASE__TOKEN__VBC__FILLER …
#define WUFFS_BASE__TOKEN__VBC__STRUCTURE …
#define WUFFS_BASE__TOKEN__VBC__STRING …
#define WUFFS_BASE__TOKEN__VBC__UNICODE_CODE_POINT …
#define WUFFS_BASE__TOKEN__VBC__LITERAL …
#define WUFFS_BASE__TOKEN__VBC__NUMBER …
#define WUFFS_BASE__TOKEN__VBC__INLINE_INTEGER_SIGNED …
#define WUFFS_BASE__TOKEN__VBC__INLINE_INTEGER_UNSIGNED …
#define WUFFS_BASE__TOKEN__VBD__FILLER__PUNCTUATION …
#define WUFFS_BASE__TOKEN__VBD__FILLER__COMMENT_BLOCK …
#define WUFFS_BASE__TOKEN__VBD__FILLER__COMMENT_LINE …
#define WUFFS_BASE__TOKEN__VBD__FILLER__COMMENT_ANY …
#define WUFFS_BASE__TOKEN__VBD__STRUCTURE__PUSH …
#define WUFFS_BASE__TOKEN__VBD__STRUCTURE__POP …
#define WUFFS_BASE__TOKEN__VBD__STRUCTURE__FROM_NONE …
#define WUFFS_BASE__TOKEN__VBD__STRUCTURE__FROM_LIST …
#define WUFFS_BASE__TOKEN__VBD__STRUCTURE__FROM_DICT …
#define WUFFS_BASE__TOKEN__VBD__STRUCTURE__TO_NONE …
#define WUFFS_BASE__TOKEN__VBD__STRUCTURE__TO_LIST …
#define WUFFS_BASE__TOKEN__VBD__STRUCTURE__TO_DICT …
#define WUFFS_BASE__TOKEN__VBD__STRING__DEFINITELY_UTF_8 …
#define WUFFS_BASE__TOKEN__VBD__STRING__CHAIN_MUST_BE_UTF_8 …
#define WUFFS_BASE__TOKEN__VBD__STRING__CHAIN_SHOULD_BE_UTF_8 …
#define WUFFS_BASE__TOKEN__VBD__STRING__DEFINITELY_ASCII …
#define WUFFS_BASE__TOKEN__VBD__STRING__CHAIN_MUST_BE_ASCII …
#define WUFFS_BASE__TOKEN__VBD__STRING__CHAIN_SHOULD_BE_ASCII …
#define WUFFS_BASE__TOKEN__VBD__STRING__CONVERT_0_DST_1_SRC_DROP …
#define WUFFS_BASE__TOKEN__VBD__STRING__CONVERT_1_DST_1_SRC_COPY …
#define WUFFS_BASE__TOKEN__VBD__STRING__CONVERT_1_DST_2_SRC_HEXADECIMAL …
#define WUFFS_BASE__TOKEN__VBD__STRING__CONVERT_1_DST_4_SRC_BACKSLASH_X …
#define WUFFS_BASE__TOKEN__VBD__STRING__CONVERT_3_DST_4_SRC_BASE_64_STD …
#define WUFFS_BASE__TOKEN__VBD__STRING__CONVERT_3_DST_4_SRC_BASE_64_URL …
#define WUFFS_BASE__TOKEN__VBD__STRING__CONVERT_4_DST_5_SRC_ASCII_85 …
#define WUFFS_BASE__TOKEN__VBD__STRING__CONVERT_5_DST_8_SRC_BASE_32_HEX …
#define WUFFS_BASE__TOKEN__VBD__STRING__CONVERT_5_DST_8_SRC_BASE_32_STD …
#define WUFFS_BASE__TOKEN__VBD__LITERAL__UNDEFINED …
#define WUFFS_BASE__TOKEN__VBD__LITERAL__NULL …
#define WUFFS_BASE__TOKEN__VBD__LITERAL__FALSE …
#define WUFFS_BASE__TOKEN__VBD__LITERAL__TRUE …
#define WUFFS_BASE__TOKEN__VBD__NUMBER__CONTENT_FLOATING_POINT …
#define WUFFS_BASE__TOKEN__VBD__NUMBER__CONTENT_INTEGER_SIGNED …
#define WUFFS_BASE__TOKEN__VBD__NUMBER__CONTENT_INTEGER_UNSIGNED …
#define WUFFS_BASE__TOKEN__VBD__NUMBER__CONTENT_NEG_INF …
#define WUFFS_BASE__TOKEN__VBD__NUMBER__CONTENT_POS_INF …
#define WUFFS_BASE__TOKEN__VBD__NUMBER__CONTENT_NEG_NAN …
#define WUFFS_BASE__TOKEN__VBD__NUMBER__CONTENT_POS_NAN …
#define WUFFS_BASE__TOKEN__VBD__NUMBER__FORMAT_BINARY_BIG_ENDIAN …
#define WUFFS_BASE__TOKEN__VBD__NUMBER__FORMAT_BINARY_LITTLE_ENDIAN …
#define WUFFS_BASE__TOKEN__VBD__NUMBER__FORMAT_TEXT …
#define WUFFS_BASE__TOKEN__VBD__NUMBER__FORMAT_IGNORE_FIRST_BYTE …
static inline int64_t
wuffs_base__token__value(const wuffs_base__token* t) { … }
static inline int64_t
wuffs_base__token__value_extension(const wuffs_base__token* t) { … }
static inline int64_t
wuffs_base__token__value_major(const wuffs_base__token* t) { … }
static inline int64_t
wuffs_base__token__value_base_category(const wuffs_base__token* t) { … }
static inline uint64_t
wuffs_base__token__value_minor(const wuffs_base__token* t) { … }
static inline uint64_t
wuffs_base__token__value_base_detail(const wuffs_base__token* t) { … }
static inline int64_t
wuffs_base__token__value_base_detail__sign_extended(
const wuffs_base__token* t) { … }
static inline bool
wuffs_base__token__continued(const wuffs_base__token* t) { … }
static inline uint64_t
wuffs_base__token__length(const wuffs_base__token* t) { … }
#ifdef __cplusplus
inline int64_t
wuffs_base__token::value() const { … }
inline int64_t
wuffs_base__token::value_extension() const { … }
inline int64_t
wuffs_base__token::value_major() const { … }
inline int64_t
wuffs_base__token::value_base_category() const { … }
inline uint64_t
wuffs_base__token::value_minor() const { … }
inline uint64_t
wuffs_base__token::value_base_detail() const { … }
inline int64_t
wuffs_base__token::value_base_detail__sign_extended() const { … }
inline bool
wuffs_base__token::continued() const { … }
inline uint64_t
wuffs_base__token::length() const { … }
#endif
wuffs_base__slice_token;
static inline wuffs_base__slice_token
wuffs_base__make_slice_token(wuffs_base__token* ptr, size_t len) { … }
static inline wuffs_base__slice_token
wuffs_base__empty_slice_token() { … }
wuffs_base__token_buffer_meta;
wuffs_base__token_buffer;
static inline wuffs_base__token_buffer
wuffs_base__make_token_buffer(wuffs_base__slice_token data,
wuffs_base__token_buffer_meta meta) { … }
static inline wuffs_base__token_buffer_meta
wuffs_base__make_token_buffer_meta(size_t wi,
size_t ri,
uint64_t pos,
bool closed) { … }
static inline wuffs_base__token_buffer
wuffs_base__slice_token__reader(wuffs_base__slice_token s, bool closed) { … }
static inline wuffs_base__token_buffer
wuffs_base__slice_token__writer(wuffs_base__slice_token s) { … }
static inline wuffs_base__token_buffer
wuffs_base__empty_token_buffer() { … }
static inline wuffs_base__token_buffer_meta
wuffs_base__empty_token_buffer_meta() { … }
static inline bool
wuffs_base__token_buffer__is_valid(const wuffs_base__token_buffer* buf) { … }
static inline void
wuffs_base__token_buffer__compact(wuffs_base__token_buffer* buf) { … }
static inline uint64_t
wuffs_base__token_buffer__reader_length(const wuffs_base__token_buffer* buf) { … }
static inline wuffs_base__token*
wuffs_base__token_buffer__reader_pointer(const wuffs_base__token_buffer* buf) { … }
static inline wuffs_base__slice_token
wuffs_base__token_buffer__reader_slice(const wuffs_base__token_buffer* buf) { … }
static inline uint64_t
wuffs_base__token_buffer__reader_token_position(
const wuffs_base__token_buffer* buf) { … }
static inline uint64_t
wuffs_base__token_buffer__writer_length(const wuffs_base__token_buffer* buf) { … }
static inline wuffs_base__token*
wuffs_base__token_buffer__writer_pointer(const wuffs_base__token_buffer* buf) { … }
static inline wuffs_base__slice_token
wuffs_base__token_buffer__writer_slice(const wuffs_base__token_buffer* buf) { … }
static inline uint64_t
wuffs_base__token_buffer__writer_token_position(
const wuffs_base__token_buffer* buf) { … }
#ifdef __cplusplus
inline bool
wuffs_base__token_buffer::is_valid() const { … }
inline void
wuffs_base__token_buffer::compact() { … }
inline uint64_t
wuffs_base__token_buffer::reader_length() const { … }
inline wuffs_base__token*
wuffs_base__token_buffer::reader_pointer() const { … }
inline wuffs_base__slice_token
wuffs_base__token_buffer::reader_slice() const { … }
inline uint64_t
wuffs_base__token_buffer::reader_token_position() const { … }
inline uint64_t
wuffs_base__token_buffer::writer_length() const { … }
inline wuffs_base__token*
wuffs_base__token_buffer::writer_pointer() const { … }
inline wuffs_base__slice_token
wuffs_base__token_buffer::writer_slice() const { … }
inline uint64_t
wuffs_base__token_buffer::writer_token_position() const { … }
#endif
static inline wuffs_base__slice_u8
wuffs_base__malloc_slice_u8(void* (*malloc_func)(size_t), uint64_t num_u8) { … }
static inline wuffs_base__slice_u16
wuffs_base__malloc_slice_u16(void* (*malloc_func)(size_t), uint64_t num_u16) { … }
static inline wuffs_base__slice_u32
wuffs_base__malloc_slice_u32(void* (*malloc_func)(size_t), uint64_t num_u32) { … }
static inline wuffs_base__slice_u64
wuffs_base__malloc_slice_u64(void* (*malloc_func)(size_t), uint64_t num_u64) { … }
wuffs_base__color_u32_argb_premul;
static inline bool
wuffs_base__color_u32_argb_premul__is_valid(
wuffs_base__color_u32_argb_premul c) { … }
static inline uint16_t
wuffs_base__color_u32_argb_premul__as__color_u16_rgb_565(
wuffs_base__color_u32_argb_premul c) { … }
static inline wuffs_base__color_u32_argb_premul
wuffs_base__color_u16_rgb_565__as__color_u32_argb_premul(uint16_t rgb_565) { … }
static inline uint8_t
wuffs_base__color_u32_argb_premul__as__color_u8_gray(
wuffs_base__color_u32_argb_premul c) { … }
static inline uint16_t
wuffs_base__color_u32_argb_premul__as__color_u16_gray(
wuffs_base__color_u32_argb_premul c) { … }
static inline wuffs_base__color_u32_argb_premul
wuffs_base__color_u32_argb_nonpremul__as__color_u32_argb_premul(
uint32_t argb_nonpremul) { … }
static inline uint32_t
wuffs_base__color_u32_argb_premul__as__color_u32_argb_nonpremul(
wuffs_base__color_u32_argb_premul c) { … }
static inline wuffs_base__color_u32_argb_premul
wuffs_base__color_u64_argb_nonpremul__as__color_u32_argb_premul(
uint64_t argb_nonpremul) { … }
static inline uint64_t
wuffs_base__color_u32_argb_premul__as__color_u64_argb_nonpremul(
wuffs_base__color_u32_argb_premul c) { … }
static inline uint64_t
wuffs_base__color_u32__as__color_u64(uint32_t c) { … }
static inline uint32_t
wuffs_base__color_u64__as__color_u32(uint64_t c) { … }
wuffs_base__pixel_blend;
#define WUFFS_BASE__PIXEL_BLEND__SRC …
#define WUFFS_BASE__PIXEL_BLEND__SRC_OVER …
wuffs_base__pixel_alpha_transparency;
#define WUFFS_BASE__PIXEL_ALPHA_TRANSPARENCY__OPAQUE …
#define WUFFS_BASE__PIXEL_ALPHA_TRANSPARENCY__NONPREMULTIPLIED_ALPHA …
#define WUFFS_BASE__PIXEL_ALPHA_TRANSPARENCY__PREMULTIPLIED_ALPHA …
#define WUFFS_BASE__PIXEL_ALPHA_TRANSPARENCY__BINARY_ALPHA …
#define WUFFS_BASE__PIXEL_ALPHA_TRANSPARENCY__NON_PREMULTIPLIED_ALPHA …
#define WUFFS_BASE__PIXEL_FORMAT__NUM_PLANES_MAX …
#define WUFFS_BASE__PIXEL_FORMAT__INDEXED__INDEX_PLANE …
#define WUFFS_BASE__PIXEL_FORMAT__INDEXED__COLOR_PLANE …
#define WUFFS_BASE__PIXEL_FORMAT__INDEXED__PALETTE_BYTE_LENGTH …
wuffs_base__pixel_format;
static inline wuffs_base__pixel_format
wuffs_base__make_pixel_format(uint32_t repr) { … }
#define WUFFS_BASE__PIXEL_FORMAT__INVALID …
#define WUFFS_BASE__PIXEL_FORMAT__A …
#define WUFFS_BASE__PIXEL_FORMAT__Y …
#define WUFFS_BASE__PIXEL_FORMAT__Y_16LE …
#define WUFFS_BASE__PIXEL_FORMAT__Y_16BE …
#define WUFFS_BASE__PIXEL_FORMAT__YA_NONPREMUL …
#define WUFFS_BASE__PIXEL_FORMAT__YA_PREMUL …
#define WUFFS_BASE__PIXEL_FORMAT__YCBCR …
#define WUFFS_BASE__PIXEL_FORMAT__YCBCRA_NONPREMUL …
#define WUFFS_BASE__PIXEL_FORMAT__YCBCRK …
#define WUFFS_BASE__PIXEL_FORMAT__YCOCG …
#define WUFFS_BASE__PIXEL_FORMAT__YCOCGA_NONPREMUL …
#define WUFFS_BASE__PIXEL_FORMAT__YCOCGK …
#define WUFFS_BASE__PIXEL_FORMAT__INDEXED__BGRA_NONPREMUL …
#define WUFFS_BASE__PIXEL_FORMAT__INDEXED__BGRA_PREMUL …
#define WUFFS_BASE__PIXEL_FORMAT__INDEXED__BGRA_BINARY …
#define WUFFS_BASE__PIXEL_FORMAT__BGR_565 …
#define WUFFS_BASE__PIXEL_FORMAT__BGR …
#define WUFFS_BASE__PIXEL_FORMAT__BGRA_NONPREMUL …
#define WUFFS_BASE__PIXEL_FORMAT__BGRA_NONPREMUL_4X16LE …
#define WUFFS_BASE__PIXEL_FORMAT__BGRA_PREMUL …
#define WUFFS_BASE__PIXEL_FORMAT__BGRA_PREMUL_4X16LE …
#define WUFFS_BASE__PIXEL_FORMAT__BGRA_BINARY …
#define WUFFS_BASE__PIXEL_FORMAT__BGRX …
#define WUFFS_BASE__PIXEL_FORMAT__RGB …
#define WUFFS_BASE__PIXEL_FORMAT__RGBA_NONPREMUL …
#define WUFFS_BASE__PIXEL_FORMAT__RGBA_NONPREMUL_4X16LE …
#define WUFFS_BASE__PIXEL_FORMAT__RGBA_PREMUL …
#define WUFFS_BASE__PIXEL_FORMAT__RGBA_PREMUL_4X16LE …
#define WUFFS_BASE__PIXEL_FORMAT__RGBA_BINARY …
#define WUFFS_BASE__PIXEL_FORMAT__RGBX …
#define WUFFS_BASE__PIXEL_FORMAT__CMY …
#define WUFFS_BASE__PIXEL_FORMAT__CMYK …
extern const uint32_t wuffs_base__pixel_format__bits_per_channel[16];
static inline bool
wuffs_base__pixel_format__is_valid(const wuffs_base__pixel_format* f) { … }
static inline uint32_t
wuffs_base__pixel_format__bits_per_pixel(const wuffs_base__pixel_format* f) { … }
static inline bool
wuffs_base__pixel_format__is_direct(const wuffs_base__pixel_format* f) { … }
static inline bool
wuffs_base__pixel_format__is_indexed(const wuffs_base__pixel_format* f) { … }
static inline bool
wuffs_base__pixel_format__is_interleaved(const wuffs_base__pixel_format* f) { … }
static inline bool
wuffs_base__pixel_format__is_planar(const wuffs_base__pixel_format* f) { … }
static inline uint32_t
wuffs_base__pixel_format__num_planes(const wuffs_base__pixel_format* f) { … }
static inline wuffs_base__pixel_alpha_transparency
wuffs_base__pixel_format__transparency(const wuffs_base__pixel_format* f) { … }
#ifdef __cplusplus
inline bool
wuffs_base__pixel_format::is_valid() const { … }
inline uint32_t
wuffs_base__pixel_format::bits_per_pixel() const { … }
inline bool
wuffs_base__pixel_format::is_direct() const { … }
inline bool
wuffs_base__pixel_format::is_indexed() const { … }
inline bool
wuffs_base__pixel_format::is_interleaved() const { … }
inline bool
wuffs_base__pixel_format::is_planar() const { … }
inline uint32_t
wuffs_base__pixel_format::num_planes() const { … }
inline wuffs_base__pixel_alpha_transparency
wuffs_base__pixel_format::transparency() const { … }
#endif
wuffs_base__pixel_subsampling;
static inline wuffs_base__pixel_subsampling
wuffs_base__make_pixel_subsampling(uint32_t repr) { … }
#define WUFFS_BASE__PIXEL_SUBSAMPLING__NONE …
#define WUFFS_BASE__PIXEL_SUBSAMPLING__444 …
#define WUFFS_BASE__PIXEL_SUBSAMPLING__440 …
#define WUFFS_BASE__PIXEL_SUBSAMPLING__422 …
#define WUFFS_BASE__PIXEL_SUBSAMPLING__420 …
#define WUFFS_BASE__PIXEL_SUBSAMPLING__411 …
#define WUFFS_BASE__PIXEL_SUBSAMPLING__410 …
static inline uint32_t
wuffs_base__pixel_subsampling__bias_x(const wuffs_base__pixel_subsampling* s,
uint32_t plane) { … }
static inline uint32_t
wuffs_base__pixel_subsampling__denominator_x(
const wuffs_base__pixel_subsampling* s,
uint32_t plane) { … }
static inline uint32_t
wuffs_base__pixel_subsampling__bias_y(const wuffs_base__pixel_subsampling* s,
uint32_t plane) { … }
static inline uint32_t
wuffs_base__pixel_subsampling__denominator_y(
const wuffs_base__pixel_subsampling* s,
uint32_t plane) { … }
#ifdef __cplusplus
inline uint32_t
wuffs_base__pixel_subsampling::bias_x(uint32_t plane) const { … }
inline uint32_t
wuffs_base__pixel_subsampling::denominator_x(uint32_t plane) const { … }
inline uint32_t
wuffs_base__pixel_subsampling::bias_y(uint32_t plane) const { … }
inline uint32_t
wuffs_base__pixel_subsampling::denominator_y(uint32_t plane) const { … }
#endif
wuffs_base__pixel_config;
static inline wuffs_base__pixel_config
wuffs_base__null_pixel_config() { … }
static inline void
wuffs_base__pixel_config__set(wuffs_base__pixel_config* c,
uint32_t pixfmt_repr,
uint32_t pixsub_repr,
uint32_t width,
uint32_t height) { … }
static inline void
wuffs_base__pixel_config__invalidate(wuffs_base__pixel_config* c) { … }
static inline bool
wuffs_base__pixel_config__is_valid(const wuffs_base__pixel_config* c) { … }
static inline wuffs_base__pixel_format
wuffs_base__pixel_config__pixel_format(const wuffs_base__pixel_config* c) { … }
static inline wuffs_base__pixel_subsampling
wuffs_base__pixel_config__pixel_subsampling(const wuffs_base__pixel_config* c) { … }
static inline wuffs_base__rect_ie_u32
wuffs_base__pixel_config__bounds(const wuffs_base__pixel_config* c) { … }
static inline uint32_t
wuffs_base__pixel_config__width(const wuffs_base__pixel_config* c) { … }
static inline uint32_t
wuffs_base__pixel_config__height(const wuffs_base__pixel_config* c) { … }
static inline uint64_t
wuffs_base__pixel_config__pixbuf_len(const wuffs_base__pixel_config* c) { … }
#ifdef __cplusplus
inline void
wuffs_base__pixel_config::set(uint32_t pixfmt_repr,
uint32_t pixsub_repr,
uint32_t width,
uint32_t height) { … }
inline void
wuffs_base__pixel_config::invalidate() { … }
inline bool
wuffs_base__pixel_config::is_valid() const { … }
inline wuffs_base__pixel_format
wuffs_base__pixel_config::pixel_format() const { … }
inline wuffs_base__pixel_subsampling
wuffs_base__pixel_config::pixel_subsampling() const { … }
inline wuffs_base__rect_ie_u32
wuffs_base__pixel_config::bounds() const { … }
inline uint32_t
wuffs_base__pixel_config::width() const { … }
inline uint32_t
wuffs_base__pixel_config::height() const { … }
inline uint64_t
wuffs_base__pixel_config::pixbuf_len() const { … }
#endif
wuffs_base__image_config;
static inline wuffs_base__image_config
wuffs_base__null_image_config() { … }
static inline void
wuffs_base__image_config__set(wuffs_base__image_config* c,
uint32_t pixfmt_repr,
uint32_t pixsub_repr,
uint32_t width,
uint32_t height,
uint64_t first_frame_io_position,
bool first_frame_is_opaque) { … }
static inline void
wuffs_base__image_config__invalidate(wuffs_base__image_config* c) { … }
static inline bool
wuffs_base__image_config__is_valid(const wuffs_base__image_config* c) { … }
static inline uint64_t
wuffs_base__image_config__first_frame_io_position(
const wuffs_base__image_config* c) { … }
static inline bool
wuffs_base__image_config__first_frame_is_opaque(
const wuffs_base__image_config* c) { … }
#ifdef __cplusplus
inline void
wuffs_base__image_config::set(uint32_t pixfmt_repr,
uint32_t pixsub_repr,
uint32_t width,
uint32_t height,
uint64_t first_frame_io_position,
bool first_frame_is_opaque) { … }
inline void
wuffs_base__image_config::invalidate() { … }
inline bool
wuffs_base__image_config::is_valid() const { … }
inline uint64_t
wuffs_base__image_config::first_frame_io_position() const { … }
inline bool
wuffs_base__image_config::first_frame_is_opaque() const { … }
#endif
wuffs_base__animation_disposal;
#define WUFFS_BASE__ANIMATION_DISPOSAL__NONE …
#define WUFFS_BASE__ANIMATION_DISPOSAL__RESTORE_BACKGROUND …
#define WUFFS_BASE__ANIMATION_DISPOSAL__RESTORE_PREVIOUS …
wuffs_base__frame_config;
static inline wuffs_base__frame_config
wuffs_base__null_frame_config() { … }
static inline void
wuffs_base__frame_config__set(
wuffs_base__frame_config* c,
wuffs_base__rect_ie_u32 bounds,
wuffs_base__flicks duration,
uint64_t index,
uint64_t io_position,
wuffs_base__animation_disposal disposal,
bool opaque_within_bounds,
bool overwrite_instead_of_blend,
wuffs_base__color_u32_argb_premul background_color) { … }
static inline wuffs_base__rect_ie_u32
wuffs_base__frame_config__bounds(const wuffs_base__frame_config* c) { … }
static inline uint32_t
wuffs_base__frame_config__width(const wuffs_base__frame_config* c) { … }
static inline uint32_t
wuffs_base__frame_config__height(const wuffs_base__frame_config* c) { … }
static inline wuffs_base__flicks
wuffs_base__frame_config__duration(const wuffs_base__frame_config* c) { … }
static inline uint64_t
wuffs_base__frame_config__index(const wuffs_base__frame_config* c) { … }
static inline uint64_t
wuffs_base__frame_config__io_position(const wuffs_base__frame_config* c) { … }
static inline wuffs_base__animation_disposal
wuffs_base__frame_config__disposal(const wuffs_base__frame_config* c) { … }
static inline bool
wuffs_base__frame_config__opaque_within_bounds(
const wuffs_base__frame_config* c) { … }
static inline bool
wuffs_base__frame_config__overwrite_instead_of_blend(
const wuffs_base__frame_config* c) { … }
static inline wuffs_base__color_u32_argb_premul
wuffs_base__frame_config__background_color(const wuffs_base__frame_config* c) { … }
#ifdef __cplusplus
inline void
wuffs_base__frame_config::set(
wuffs_base__rect_ie_u32 bounds,
wuffs_base__flicks duration,
uint64_t index,
uint64_t io_position,
wuffs_base__animation_disposal disposal,
bool opaque_within_bounds,
bool overwrite_instead_of_blend,
wuffs_base__color_u32_argb_premul background_color) { … }
inline wuffs_base__rect_ie_u32
wuffs_base__frame_config::bounds() const { … }
inline uint32_t
wuffs_base__frame_config::width() const { … }
inline uint32_t
wuffs_base__frame_config::height() const { … }
inline wuffs_base__flicks
wuffs_base__frame_config::duration() const { … }
inline uint64_t
wuffs_base__frame_config::index() const { … }
inline uint64_t
wuffs_base__frame_config::io_position() const { … }
inline wuffs_base__animation_disposal
wuffs_base__frame_config::disposal() const { … }
inline bool
wuffs_base__frame_config::opaque_within_bounds() const { … }
inline bool
wuffs_base__frame_config::overwrite_instead_of_blend() const { … }
inline wuffs_base__color_u32_argb_premul
wuffs_base__frame_config::background_color() const { … }
#endif
wuffs_base__pixel_buffer;
static inline wuffs_base__pixel_buffer
wuffs_base__null_pixel_buffer() { … }
static inline wuffs_base__status
wuffs_base__pixel_buffer__set_interleaved(
wuffs_base__pixel_buffer* pb,
const wuffs_base__pixel_config* pixcfg,
wuffs_base__table_u8 primary_memory,
wuffs_base__slice_u8 palette_memory) { … }
static inline wuffs_base__status
wuffs_base__pixel_buffer__set_from_slice(wuffs_base__pixel_buffer* pb,
const wuffs_base__pixel_config* pixcfg,
wuffs_base__slice_u8 pixbuf_memory) { … }
static inline wuffs_base__status
wuffs_base__pixel_buffer__set_from_table(wuffs_base__pixel_buffer* pb,
const wuffs_base__pixel_config* pixcfg,
wuffs_base__table_u8 primary_memory) { … }
static inline wuffs_base__slice_u8
wuffs_base__pixel_buffer__palette(wuffs_base__pixel_buffer* pb) { … }
static inline wuffs_base__slice_u8
wuffs_base__pixel_buffer__palette_or_else(wuffs_base__pixel_buffer* pb,
wuffs_base__slice_u8 fallback) { … }
static inline wuffs_base__pixel_format
wuffs_base__pixel_buffer__pixel_format(const wuffs_base__pixel_buffer* pb) { … }
static inline wuffs_base__table_u8
wuffs_base__pixel_buffer__plane(wuffs_base__pixel_buffer* pb, uint32_t p) { … }
WUFFS_BASE__MAYBE_STATIC wuffs_base__color_u32_argb_premul
wuffs_base__pixel_buffer__color_u32_at(const wuffs_base__pixel_buffer* pb,
uint32_t x,
uint32_t y);
WUFFS_BASE__MAYBE_STATIC wuffs_base__status
wuffs_base__pixel_buffer__set_color_u32_at(
wuffs_base__pixel_buffer* pb,
uint32_t x,
uint32_t y,
wuffs_base__color_u32_argb_premul color);
WUFFS_BASE__MAYBE_STATIC wuffs_base__status
wuffs_base__pixel_buffer__set_color_u32_fill_rect(
wuffs_base__pixel_buffer* pb,
wuffs_base__rect_ie_u32 rect,
wuffs_base__color_u32_argb_premul color);
#ifdef __cplusplus
inline wuffs_base__status
wuffs_base__pixel_buffer::set_interleaved(
const wuffs_base__pixel_config* pixcfg_arg,
wuffs_base__table_u8 primary_memory,
wuffs_base__slice_u8 palette_memory) { … }
inline wuffs_base__status
wuffs_base__pixel_buffer::set_from_slice(
const wuffs_base__pixel_config* pixcfg_arg,
wuffs_base__slice_u8 pixbuf_memory) { … }
inline wuffs_base__status
wuffs_base__pixel_buffer::set_from_table(
const wuffs_base__pixel_config* pixcfg_arg,
wuffs_base__table_u8 primary_memory) { … }
inline wuffs_base__slice_u8
wuffs_base__pixel_buffer::palette() { … }
inline wuffs_base__slice_u8
wuffs_base__pixel_buffer::palette_or_else(wuffs_base__slice_u8 fallback) { … }
inline wuffs_base__pixel_format
wuffs_base__pixel_buffer::pixel_format() const { … }
inline wuffs_base__table_u8
wuffs_base__pixel_buffer::plane(uint32_t p) { … }
inline wuffs_base__color_u32_argb_premul
wuffs_base__pixel_buffer::color_u32_at(uint32_t x, uint32_t y) const { … }
WUFFS_BASE__MAYBE_STATIC wuffs_base__status
wuffs_base__pixel_buffer__set_color_u32_fill_rect(
wuffs_base__pixel_buffer* pb,
wuffs_base__rect_ie_u32 rect,
wuffs_base__color_u32_argb_premul color);
inline wuffs_base__status
wuffs_base__pixel_buffer::set_color_u32_at(
uint32_t x,
uint32_t y,
wuffs_base__color_u32_argb_premul color) { … }
inline wuffs_base__status
wuffs_base__pixel_buffer::set_color_u32_fill_rect(
wuffs_base__rect_ie_u32 rect,
wuffs_base__color_u32_argb_premul color) { … }
#endif
wuffs_base__decode_frame_options;
#ifdef __cplusplus
#endif
WUFFS_BASE__MAYBE_STATIC uint8_t
wuffs_base__pixel_palette__closest_element(
wuffs_base__slice_u8 palette_slice,
wuffs_base__pixel_format palette_format,
wuffs_base__color_u32_argb_premul c);
wuffs_base__pixel_swizzler__func;
wuffs_base__pixel_swizzler__transparent_black_func;
wuffs_base__pixel_swizzler;
WUFFS_BASE__MAYBE_STATIC wuffs_base__status
wuffs_base__pixel_swizzler__prepare(wuffs_base__pixel_swizzler* p,
wuffs_base__pixel_format dst_pixfmt,
wuffs_base__slice_u8 dst_palette,
wuffs_base__pixel_format src_pixfmt,
wuffs_base__slice_u8 src_palette,
wuffs_base__pixel_blend blend);
WUFFS_BASE__MAYBE_STATIC uint64_t
wuffs_base__pixel_swizzler__swizzle_interleaved_from_slice(
const wuffs_base__pixel_swizzler* p,
wuffs_base__slice_u8 dst,
wuffs_base__slice_u8 dst_palette,
wuffs_base__slice_u8 src);
#ifdef __cplusplus
inline wuffs_base__status
wuffs_base__pixel_swizzler::prepare(wuffs_base__pixel_format dst_pixfmt,
wuffs_base__slice_u8 dst_palette,
wuffs_base__pixel_format src_pixfmt,
wuffs_base__slice_u8 src_palette,
wuffs_base__pixel_blend blend) { … }
uint64_t
wuffs_base__pixel_swizzler::swizzle_interleaved_from_slice(
wuffs_base__slice_u8 dst,
wuffs_base__slice_u8 dst_palette,
wuffs_base__slice_u8 src) const { … }
#endif
#define WUFFS_BASE__PARSE_NUMBER_XXX__DEFAULT_OPTIONS …
#define WUFFS_BASE__PARSE_NUMBER_XXX__ALLOW_MULTIPLE_LEADING_ZEROES …
#define WUFFS_BASE__PARSE_NUMBER_XXX__ALLOW_UNDERSCORES …
#define WUFFS_BASE__PARSE_NUMBER_FXX__DECIMAL_SEPARATOR_IS_A_COMMA …
#define WUFFS_BASE__PARSE_NUMBER_FXX__REJECT_INF_AND_NAN …
#define WUFFS_BASE__RENDER_NUMBER_XXX__DEFAULT_OPTIONS …
#define WUFFS_BASE__RENDER_NUMBER_XXX__ALIGN_RIGHT …
#define WUFFS_BASE__RENDER_NUMBER_XXX__LEADING_PLUS_SIGN …
#define WUFFS_BASE__RENDER_NUMBER_FXX__DECIMAL_SEPARATOR_IS_A_COMMA …
#define WUFFS_BASE__RENDER_NUMBER_FXX__EXPONENT_ABSENT …
#define WUFFS_BASE__RENDER_NUMBER_FXX__EXPONENT_PRESENT …
#define WUFFS_BASE__RENDER_NUMBER_FXX__JUST_ENOUGH_PRECISION …
wuffs_base__lossy_value_u16;
wuffs_base__lossy_value_u32;
WUFFS_BASE__MAYBE_STATIC wuffs_base__lossy_value_u16
wuffs_base__ieee_754_bit_representation__from_f64_to_u16_truncate(double f);
WUFFS_BASE__MAYBE_STATIC wuffs_base__lossy_value_u32
wuffs_base__ieee_754_bit_representation__from_f64_to_u32_truncate(double f);
static inline uint64_t
wuffs_base__ieee_754_bit_representation__from_f64_to_u64(double f) { … }
static inline double
wuffs_base__ieee_754_bit_representation__from_u16_to_f64(uint16_t u) { … }
static inline double
wuffs_base__ieee_754_bit_representation__from_u32_to_f64(uint32_t u) { … }
static inline double
wuffs_base__ieee_754_bit_representation__from_u64_to_f64(uint64_t u) { … }
WUFFS_BASE__MAYBE_STATIC wuffs_base__result_f64
wuffs_base__parse_number_f64(wuffs_base__slice_u8 s, uint32_t options);
WUFFS_BASE__MAYBE_STATIC wuffs_base__result_i64
wuffs_base__parse_number_i64(wuffs_base__slice_u8 s, uint32_t options);
WUFFS_BASE__MAYBE_STATIC wuffs_base__result_u64
wuffs_base__parse_number_u64(wuffs_base__slice_u8 s, uint32_t options);
#define WUFFS_BASE__I64__BYTE_LENGTH__MAX_INCL …
#define WUFFS_BASE__U64__BYTE_LENGTH__MAX_INCL …
WUFFS_BASE__MAYBE_STATIC size_t
wuffs_base__render_number_f64(wuffs_base__slice_u8 dst,
double x,
uint32_t precision,
uint32_t options);
WUFFS_BASE__MAYBE_STATIC size_t
wuffs_base__render_number_i64(wuffs_base__slice_u8 dst,
int64_t x,
uint32_t options);
WUFFS_BASE__MAYBE_STATIC size_t
wuffs_base__render_number_u64(wuffs_base__slice_u8 dst,
uint64_t x,
uint32_t options);
#define WUFFS_BASE__BASE_16__DEFAULT_OPTIONS …
WUFFS_BASE__MAYBE_STATIC wuffs_base__transform__output
wuffs_base__base_16__decode2(wuffs_base__slice_u8 dst,
wuffs_base__slice_u8 src,
bool src_closed,
uint32_t options);
WUFFS_BASE__MAYBE_STATIC wuffs_base__transform__output
wuffs_base__base_16__decode4(wuffs_base__slice_u8 dst,
wuffs_base__slice_u8 src,
bool src_closed,
uint32_t options);
WUFFS_BASE__MAYBE_STATIC wuffs_base__transform__output
wuffs_base__base_16__encode2(wuffs_base__slice_u8 dst,
wuffs_base__slice_u8 src,
bool src_closed,
uint32_t options);
WUFFS_BASE__MAYBE_STATIC wuffs_base__transform__output
wuffs_base__base_16__encode2(wuffs_base__slice_u8 dst,
wuffs_base__slice_u8 src,
bool src_closed,
uint32_t options);
#define WUFFS_BASE__BASE_64__DEFAULT_OPTIONS …
#define WUFFS_BASE__BASE_64__DECODE_ALLOW_PADDING …
#define WUFFS_BASE__BASE_64__ENCODE_EMIT_PADDING …
#define WUFFS_BASE__BASE_64__URL_ALPHABET …
WUFFS_BASE__MAYBE_STATIC wuffs_base__transform__output
wuffs_base__base_64__decode(wuffs_base__slice_u8 dst,
wuffs_base__slice_u8 src,
bool src_closed,
uint32_t options);
WUFFS_BASE__MAYBE_STATIC wuffs_base__transform__output
wuffs_base__base_64__encode(wuffs_base__slice_u8 dst,
wuffs_base__slice_u8 src,
bool src_closed,
uint32_t options);
#define WUFFS_BASE__UNICODE_CODE_POINT__MIN_INCL …
#define WUFFS_BASE__UNICODE_CODE_POINT__MAX_INCL …
#define WUFFS_BASE__UNICODE_REPLACEMENT_CHARACTER …
#define WUFFS_BASE__UNICODE_SURROGATE__MIN_INCL …
#define WUFFS_BASE__UNICODE_SURROGATE__MAX_INCL …
#define WUFFS_BASE__ASCII__MIN_INCL …
#define WUFFS_BASE__ASCII__MAX_INCL …
#define WUFFS_BASE__UTF_8__BYTE_LENGTH__MIN_INCL …
#define WUFFS_BASE__UTF_8__BYTE_LENGTH__MAX_INCL …
#define WUFFS_BASE__UTF_8__BYTE_LENGTH_1__CODE_POINT__MIN_INCL …
#define WUFFS_BASE__UTF_8__BYTE_LENGTH_1__CODE_POINT__MAX_INCL …
#define WUFFS_BASE__UTF_8__BYTE_LENGTH_2__CODE_POINT__MIN_INCL …
#define WUFFS_BASE__UTF_8__BYTE_LENGTH_2__CODE_POINT__MAX_INCL …
#define WUFFS_BASE__UTF_8__BYTE_LENGTH_3__CODE_POINT__MIN_INCL …
#define WUFFS_BASE__UTF_8__BYTE_LENGTH_3__CODE_POINT__MAX_INCL …
#define WUFFS_BASE__UTF_8__BYTE_LENGTH_4__CODE_POINT__MIN_INCL …
#define WUFFS_BASE__UTF_8__BYTE_LENGTH_4__CODE_POINT__MAX_INCL …
wuffs_base__utf_8__next__output;
static inline wuffs_base__utf_8__next__output
wuffs_base__make_utf_8__next__output(uint32_t code_point,
uint32_t byte_length) { … }
static inline bool
wuffs_base__utf_8__next__output__is_valid(
const wuffs_base__utf_8__next__output* o) { … }
#ifdef __cplusplus
inline bool
wuffs_base__utf_8__next__output::is_valid() const { … }
#endif
WUFFS_BASE__MAYBE_STATIC size_t
wuffs_base__utf_8__encode(wuffs_base__slice_u8 dst, uint32_t code_point);
WUFFS_BASE__MAYBE_STATIC wuffs_base__utf_8__next__output
wuffs_base__utf_8__next(const uint8_t* s_ptr, size_t s_len);
WUFFS_BASE__MAYBE_STATIC wuffs_base__utf_8__next__output
wuffs_base__utf_8__next_from_end(const uint8_t* s_ptr, size_t s_len);
WUFFS_BASE__MAYBE_STATIC size_t
wuffs_base__utf_8__longest_valid_prefix(const uint8_t* s_ptr, size_t s_len);
WUFFS_BASE__MAYBE_STATIC size_t
wuffs_base__ascii__longest_valid_prefix(const uint8_t* s_ptr, size_t s_len);
extern const char wuffs_base__hasher_u32__vtable_name[];
wuffs_base__hasher_u32__func_ptrs;
wuffs_base__hasher_u32;
WUFFS_BASE__MAYBE_STATIC wuffs_base__empty_struct
wuffs_base__hasher_u32__set_quirk_enabled(
wuffs_base__hasher_u32* self,
uint32_t a_quirk,
bool a_enabled);
WUFFS_BASE__MAYBE_STATIC uint32_t
wuffs_base__hasher_u32__update_u32(
wuffs_base__hasher_u32* self,
wuffs_base__slice_u8 a_x);
#if defined(__cplusplus) || defined(WUFFS_IMPLEMENTATION)
struct wuffs_base__hasher_u32__struct { … };
#endif
extern const char wuffs_base__image_decoder__vtable_name[];
wuffs_base__image_decoder__func_ptrs;
wuffs_base__image_decoder;
WUFFS_BASE__MAYBE_STATIC wuffs_base__status
wuffs_base__image_decoder__decode_frame(
wuffs_base__image_decoder* self,
wuffs_base__pixel_buffer* a_dst,
wuffs_base__io_buffer* a_src,
wuffs_base__pixel_blend a_blend,
wuffs_base__slice_u8 a_workbuf,
wuffs_base__decode_frame_options* a_opts);
WUFFS_BASE__MAYBE_STATIC wuffs_base__status
wuffs_base__image_decoder__decode_frame_config(
wuffs_base__image_decoder* self,
wuffs_base__frame_config* a_dst,
wuffs_base__io_buffer* a_src);
WUFFS_BASE__MAYBE_STATIC wuffs_base__status
wuffs_base__image_decoder__decode_image_config(
wuffs_base__image_decoder* self,
wuffs_base__image_config* a_dst,
wuffs_base__io_buffer* a_src);
WUFFS_BASE__MAYBE_STATIC wuffs_base__rect_ie_u32
wuffs_base__image_decoder__frame_dirty_rect(
const wuffs_base__image_decoder* self);
WUFFS_BASE__MAYBE_STATIC uint32_t
wuffs_base__image_decoder__num_animation_loops(
const wuffs_base__image_decoder* self);
WUFFS_BASE__MAYBE_STATIC uint64_t
wuffs_base__image_decoder__num_decoded_frame_configs(
const wuffs_base__image_decoder* self);
WUFFS_BASE__MAYBE_STATIC uint64_t
wuffs_base__image_decoder__num_decoded_frames(
const wuffs_base__image_decoder* self);
WUFFS_BASE__MAYBE_STATIC wuffs_base__status
wuffs_base__image_decoder__restart_frame(
wuffs_base__image_decoder* self,
uint64_t a_index,
uint64_t a_io_position);
WUFFS_BASE__MAYBE_STATIC wuffs_base__empty_struct
wuffs_base__image_decoder__set_quirk_enabled(
wuffs_base__image_decoder* self,
uint32_t a_quirk,
bool a_enabled);
WUFFS_BASE__MAYBE_STATIC wuffs_base__empty_struct
wuffs_base__image_decoder__set_report_metadata(
wuffs_base__image_decoder* self,
uint32_t a_fourcc,
bool a_report);
WUFFS_BASE__MAYBE_STATIC wuffs_base__status
wuffs_base__image_decoder__tell_me_more(
wuffs_base__image_decoder* self,
wuffs_base__io_buffer* a_dst,
wuffs_base__more_information* a_minfo,
wuffs_base__io_buffer* a_src);
WUFFS_BASE__MAYBE_STATIC wuffs_base__range_ii_u64
wuffs_base__image_decoder__workbuf_len(
const wuffs_base__image_decoder* self);
#if defined(__cplusplus) || defined(WUFFS_IMPLEMENTATION)
struct wuffs_base__image_decoder__struct { … };
#endif
extern const char wuffs_base__io_transformer__vtable_name[];
wuffs_base__io_transformer__func_ptrs;
wuffs_base__io_transformer;
WUFFS_BASE__MAYBE_STATIC wuffs_base__empty_struct
wuffs_base__io_transformer__set_quirk_enabled(
wuffs_base__io_transformer* self,
uint32_t a_quirk,
bool a_enabled);
WUFFS_BASE__MAYBE_STATIC wuffs_base__status
wuffs_base__io_transformer__transform_io(
wuffs_base__io_transformer* self,
wuffs_base__io_buffer* a_dst,
wuffs_base__io_buffer* a_src,
wuffs_base__slice_u8 a_workbuf);
WUFFS_BASE__MAYBE_STATIC wuffs_base__range_ii_u64
wuffs_base__io_transformer__workbuf_len(
const wuffs_base__io_transformer* self);
#if defined(__cplusplus) || defined(WUFFS_IMPLEMENTATION)
struct wuffs_base__io_transformer__struct { … };
#endif
extern const char wuffs_base__token_decoder__vtable_name[];
wuffs_base__token_decoder__func_ptrs;
wuffs_base__token_decoder;
WUFFS_BASE__MAYBE_STATIC wuffs_base__status
wuffs_base__token_decoder__decode_tokens(
wuffs_base__token_decoder* self,
wuffs_base__token_buffer* a_dst,
wuffs_base__io_buffer* a_src,
wuffs_base__slice_u8 a_workbuf);
WUFFS_BASE__MAYBE_STATIC wuffs_base__empty_struct
wuffs_base__token_decoder__set_quirk_enabled(
wuffs_base__token_decoder* self,
uint32_t a_quirk,
bool a_enabled);
WUFFS_BASE__MAYBE_STATIC wuffs_base__range_ii_u64
wuffs_base__token_decoder__workbuf_len(
const wuffs_base__token_decoder* self);
#if defined(__cplusplus) || defined(WUFFS_IMPLEMENTATION)
struct wuffs_base__token_decoder__struct { … };
#endif
#ifdef __cplusplus
}
#endif
#if !defined(WUFFS_CONFIG__MODULES) || defined(WUFFS_CONFIG__MODULE__ADLER32) || defined(WUFFS_NONMONOLITHIC)
wuffs_adler32__hasher;
#ifdef __cplusplus
extern "C" {
#endif
wuffs_base__status WUFFS_BASE__WARN_UNUSED_RESULT
wuffs_adler32__hasher__initialize(
wuffs_adler32__hasher* self,
size_t sizeof_star_self,
uint64_t wuffs_version,
uint32_t options);
size_t
sizeof__wuffs_adler32__hasher();
wuffs_adler32__hasher*
wuffs_adler32__hasher__alloc();
static inline wuffs_base__hasher_u32*
wuffs_adler32__hasher__alloc_as__wuffs_base__hasher_u32() { … }
static inline wuffs_base__hasher_u32*
wuffs_adler32__hasher__upcast_as__wuffs_base__hasher_u32(
wuffs_adler32__hasher* p) { … }
WUFFS_BASE__MAYBE_STATIC wuffs_base__empty_struct
wuffs_adler32__hasher__set_quirk_enabled(
wuffs_adler32__hasher* self,
uint32_t a_quirk,
bool a_enabled);
WUFFS_BASE__MAYBE_STATIC uint32_t
wuffs_adler32__hasher__update_u32(
wuffs_adler32__hasher* self,
wuffs_base__slice_u8 a_x);
#ifdef __cplusplus
}
#endif
#if defined(__cplusplus) || defined(WUFFS_IMPLEMENTATION)
struct wuffs_adler32__hasher__struct { … };
#endif
#endif
#if !defined(WUFFS_CONFIG__MODULES) || defined(WUFFS_CONFIG__MODULE__BMP) || defined(WUFFS_NONMONOLITHIC)
extern const char wuffs_bmp__error__bad_header[];
extern const char wuffs_bmp__error__bad_rle_compression[];
extern const char wuffs_bmp__error__truncated_input[];
extern const char wuffs_bmp__error__unsupported_bmp_file[];
#define WUFFS_BMP__DECODER_WORKBUF_LEN_MAX_INCL_WORST_CASE …
wuffs_bmp__decoder;
#ifdef __cplusplus
extern "C" {
#endif
wuffs_base__status WUFFS_BASE__WARN_UNUSED_RESULT
wuffs_bmp__decoder__initialize(
wuffs_bmp__decoder* self,
size_t sizeof_star_self,
uint64_t wuffs_version,
uint32_t options);
size_t
sizeof__wuffs_bmp__decoder();
wuffs_bmp__decoder*
wuffs_bmp__decoder__alloc();
static inline wuffs_base__image_decoder*
wuffs_bmp__decoder__alloc_as__wuffs_base__image_decoder() { … }
static inline wuffs_base__image_decoder*
wuffs_bmp__decoder__upcast_as__wuffs_base__image_decoder(
wuffs_bmp__decoder* p) { … }
WUFFS_BASE__MAYBE_STATIC wuffs_base__empty_struct
wuffs_bmp__decoder__set_quirk_enabled(
wuffs_bmp__decoder* self,
uint32_t a_quirk,
bool a_enabled);
WUFFS_BASE__MAYBE_STATIC wuffs_base__status
wuffs_bmp__decoder__decode_image_config(
wuffs_bmp__decoder* self,
wuffs_base__image_config* a_dst,
wuffs_base__io_buffer* a_src);
WUFFS_BASE__MAYBE_STATIC wuffs_base__status
wuffs_bmp__decoder__decode_frame_config(
wuffs_bmp__decoder* self,
wuffs_base__frame_config* a_dst,
wuffs_base__io_buffer* a_src);
WUFFS_BASE__MAYBE_STATIC wuffs_base__status
wuffs_bmp__decoder__decode_frame(
wuffs_bmp__decoder* self,
wuffs_base__pixel_buffer* a_dst,
wuffs_base__io_buffer* a_src,
wuffs_base__pixel_blend a_blend,
wuffs_base__slice_u8 a_workbuf,
wuffs_base__decode_frame_options* a_opts);
WUFFS_BASE__MAYBE_STATIC wuffs_base__rect_ie_u32
wuffs_bmp__decoder__frame_dirty_rect(
const wuffs_bmp__decoder* self);
WUFFS_BASE__MAYBE_STATIC uint32_t
wuffs_bmp__decoder__num_animation_loops(
const wuffs_bmp__decoder* self);
WUFFS_BASE__MAYBE_STATIC uint64_t
wuffs_bmp__decoder__num_decoded_frame_configs(
const wuffs_bmp__decoder* self);
WUFFS_BASE__MAYBE_STATIC uint64_t
wuffs_bmp__decoder__num_decoded_frames(
const wuffs_bmp__decoder* self);
WUFFS_BASE__MAYBE_STATIC wuffs_base__status
wuffs_bmp__decoder__restart_frame(
wuffs_bmp__decoder* self,
uint64_t a_index,
uint64_t a_io_position);
WUFFS_BASE__MAYBE_STATIC wuffs_base__empty_struct
wuffs_bmp__decoder__set_report_metadata(
wuffs_bmp__decoder* self,
uint32_t a_fourcc,
bool a_report);
WUFFS_BASE__MAYBE_STATIC wuffs_base__status
wuffs_bmp__decoder__tell_me_more(
wuffs_bmp__decoder* self,
wuffs_base__io_buffer* a_dst,
wuffs_base__more_information* a_minfo,
wuffs_base__io_buffer* a_src);
WUFFS_BASE__MAYBE_STATIC wuffs_base__range_ii_u64
wuffs_bmp__decoder__workbuf_len(
const wuffs_bmp__decoder* self);
#ifdef __cplusplus
}
#endif
#if defined(__cplusplus) || defined(WUFFS_IMPLEMENTATION)
struct wuffs_bmp__decoder__struct { … };
#endif
#endif
#if !defined(WUFFS_CONFIG__MODULES) || defined(WUFFS_CONFIG__MODULE__BZIP2) || defined(WUFFS_NONMONOLITHIC)
extern const char wuffs_bzip2__error__bad_huffman_code_over_subscribed[];
extern const char wuffs_bzip2__error__bad_huffman_code_under_subscribed[];
extern const char wuffs_bzip2__error__bad_block_header[];
extern const char wuffs_bzip2__error__bad_block_length[];
extern const char wuffs_bzip2__error__bad_checksum[];
extern const char wuffs_bzip2__error__bad_header[];
extern const char wuffs_bzip2__error__bad_number_of_sections[];
extern const char wuffs_bzip2__error__truncated_input[];
extern const char wuffs_bzip2__error__unsupported_block_randomization[];
#define WUFFS_BZIP2__DECODER_WORKBUF_LEN_MAX_INCL_WORST_CASE …
wuffs_bzip2__decoder;
#ifdef __cplusplus
extern "C" {
#endif
wuffs_base__status WUFFS_BASE__WARN_UNUSED_RESULT
wuffs_bzip2__decoder__initialize(
wuffs_bzip2__decoder* self,
size_t sizeof_star_self,
uint64_t wuffs_version,
uint32_t options);
size_t
sizeof__wuffs_bzip2__decoder();
wuffs_bzip2__decoder*
wuffs_bzip2__decoder__alloc();
static inline wuffs_base__io_transformer*
wuffs_bzip2__decoder__alloc_as__wuffs_base__io_transformer() { … }
static inline wuffs_base__io_transformer*
wuffs_bzip2__decoder__upcast_as__wuffs_base__io_transformer(
wuffs_bzip2__decoder* p) { … }
WUFFS_BASE__MAYBE_STATIC wuffs_base__empty_struct
wuffs_bzip2__decoder__set_quirk_enabled(
wuffs_bzip2__decoder* self,
uint32_t a_quirk,
bool a_enabled);
WUFFS_BASE__MAYBE_STATIC wuffs_base__range_ii_u64
wuffs_bzip2__decoder__workbuf_len(
const wuffs_bzip2__decoder* self);
WUFFS_BASE__MAYBE_STATIC wuffs_base__status
wuffs_bzip2__decoder__transform_io(
wuffs_bzip2__decoder* self,
wuffs_base__io_buffer* a_dst,
wuffs_base__io_buffer* a_src,
wuffs_base__slice_u8 a_workbuf);
#ifdef __cplusplus
}
#endif
#if defined(__cplusplus) || defined(WUFFS_IMPLEMENTATION)
struct wuffs_bzip2__decoder__struct { … };
#endif
#endif
#if !defined(WUFFS_CONFIG__MODULES) || defined(WUFFS_CONFIG__MODULE__CBOR) || defined(WUFFS_NONMONOLITHIC)
extern const char wuffs_cbor__error__bad_input[];
extern const char wuffs_cbor__error__unsupported_recursion_depth[];
#define WUFFS_CBOR__DECODER_WORKBUF_LEN_MAX_INCL_WORST_CASE …
#define WUFFS_CBOR__DECODER_DEPTH_MAX_INCL …
#define WUFFS_CBOR__DECODER_DST_TOKEN_BUFFER_LENGTH_MIN_INCL …
#define WUFFS_CBOR__DECODER_SRC_IO_BUFFER_LENGTH_MIN_INCL …
#define WUFFS_CBOR__TOKEN_VALUE_MAJOR …
#define WUFFS_CBOR__TOKEN_VALUE_MINOR__DETAIL_MASK …
#define WUFFS_CBOR__TOKEN_VALUE_MINOR__MINUS_1_MINUS_X …
#define WUFFS_CBOR__TOKEN_VALUE_MINOR__SIMPLE_VALUE …
#define WUFFS_CBOR__TOKEN_VALUE_MINOR__TAG …
wuffs_cbor__decoder;
#ifdef __cplusplus
extern "C" {
#endif
wuffs_base__status WUFFS_BASE__WARN_UNUSED_RESULT
wuffs_cbor__decoder__initialize(
wuffs_cbor__decoder* self,
size_t sizeof_star_self,
uint64_t wuffs_version,
uint32_t options);
size_t
sizeof__wuffs_cbor__decoder();
wuffs_cbor__decoder*
wuffs_cbor__decoder__alloc();
static inline wuffs_base__token_decoder*
wuffs_cbor__decoder__alloc_as__wuffs_base__token_decoder() { … }
static inline wuffs_base__token_decoder*
wuffs_cbor__decoder__upcast_as__wuffs_base__token_decoder(
wuffs_cbor__decoder* p) { … }
WUFFS_BASE__MAYBE_STATIC wuffs_base__empty_struct
wuffs_cbor__decoder__set_quirk_enabled(
wuffs_cbor__decoder* self,
uint32_t a_quirk,
bool a_enabled);
WUFFS_BASE__MAYBE_STATIC wuffs_base__range_ii_u64
wuffs_cbor__decoder__workbuf_len(
const wuffs_cbor__decoder* self);
WUFFS_BASE__MAYBE_STATIC wuffs_base__status
wuffs_cbor__decoder__decode_tokens(
wuffs_cbor__decoder* self,
wuffs_base__token_buffer* a_dst,
wuffs_base__io_buffer* a_src,
wuffs_base__slice_u8 a_workbuf);
#ifdef __cplusplus
}
#endif
#if defined(__cplusplus) || defined(WUFFS_IMPLEMENTATION)
struct wuffs_cbor__decoder__struct { … };
#endif
#endif
#if !defined(WUFFS_CONFIG__MODULES) || defined(WUFFS_CONFIG__MODULE__CRC32) || defined(WUFFS_NONMONOLITHIC)
wuffs_crc32__ieee_hasher;
#ifdef __cplusplus
extern "C" {
#endif
wuffs_base__status WUFFS_BASE__WARN_UNUSED_RESULT
wuffs_crc32__ieee_hasher__initialize(
wuffs_crc32__ieee_hasher* self,
size_t sizeof_star_self,
uint64_t wuffs_version,
uint32_t options);
size_t
sizeof__wuffs_crc32__ieee_hasher();
wuffs_crc32__ieee_hasher*
wuffs_crc32__ieee_hasher__alloc();
static inline wuffs_base__hasher_u32*
wuffs_crc32__ieee_hasher__alloc_as__wuffs_base__hasher_u32() { … }
static inline wuffs_base__hasher_u32*
wuffs_crc32__ieee_hasher__upcast_as__wuffs_base__hasher_u32(
wuffs_crc32__ieee_hasher* p) { … }
WUFFS_BASE__MAYBE_STATIC wuffs_base__empty_struct
wuffs_crc32__ieee_hasher__set_quirk_enabled(
wuffs_crc32__ieee_hasher* self,
uint32_t a_quirk,
bool a_enabled);
WUFFS_BASE__MAYBE_STATIC uint32_t
wuffs_crc32__ieee_hasher__update_u32(
wuffs_crc32__ieee_hasher* self,
wuffs_base__slice_u8 a_x);
#ifdef __cplusplus
}
#endif
#if defined(__cplusplus) || defined(WUFFS_IMPLEMENTATION)
struct wuffs_crc32__ieee_hasher__struct { … };
#endif
#endif
#if !defined(WUFFS_CONFIG__MODULES) || defined(WUFFS_CONFIG__MODULE__DEFLATE) || defined(WUFFS_NONMONOLITHIC)
extern const char wuffs_deflate__error__bad_huffman_code_over_subscribed[];
extern const char wuffs_deflate__error__bad_huffman_code_under_subscribed[];
extern const char wuffs_deflate__error__bad_huffman_code_length_count[];
extern const char wuffs_deflate__error__bad_huffman_code_length_repetition[];
extern const char wuffs_deflate__error__bad_huffman_code[];
extern const char wuffs_deflate__error__bad_huffman_minimum_code_length[];
extern const char wuffs_deflate__error__bad_block[];
extern const char wuffs_deflate__error__bad_distance[];
extern const char wuffs_deflate__error__bad_distance_code_count[];
extern const char wuffs_deflate__error__bad_literal_length_code_count[];
extern const char wuffs_deflate__error__inconsistent_stored_block_length[];
extern const char wuffs_deflate__error__missing_end_of_block_code[];
extern const char wuffs_deflate__error__no_huffman_codes[];
extern const char wuffs_deflate__error__truncated_input[];
#define WUFFS_DEFLATE__DECODER_WORKBUF_LEN_MAX_INCL_WORST_CASE …
wuffs_deflate__decoder;
#ifdef __cplusplus
extern "C" {
#endif
wuffs_base__status WUFFS_BASE__WARN_UNUSED_RESULT
wuffs_deflate__decoder__initialize(
wuffs_deflate__decoder* self,
size_t sizeof_star_self,
uint64_t wuffs_version,
uint32_t options);
size_t
sizeof__wuffs_deflate__decoder();
wuffs_deflate__decoder*
wuffs_deflate__decoder__alloc();
static inline wuffs_base__io_transformer*
wuffs_deflate__decoder__alloc_as__wuffs_base__io_transformer() { … }
static inline wuffs_base__io_transformer*
wuffs_deflate__decoder__upcast_as__wuffs_base__io_transformer(
wuffs_deflate__decoder* p) { … }
WUFFS_BASE__MAYBE_STATIC wuffs_base__empty_struct
wuffs_deflate__decoder__add_history(
wuffs_deflate__decoder* self,
wuffs_base__slice_u8 a_hist);
WUFFS_BASE__MAYBE_STATIC wuffs_base__empty_struct
wuffs_deflate__decoder__set_quirk_enabled(
wuffs_deflate__decoder* self,
uint32_t a_quirk,
bool a_enabled);
WUFFS_BASE__MAYBE_STATIC wuffs_base__range_ii_u64
wuffs_deflate__decoder__workbuf_len(
const wuffs_deflate__decoder* self);
WUFFS_BASE__MAYBE_STATIC wuffs_base__status
wuffs_deflate__decoder__transform_io(
wuffs_deflate__decoder* self,
wuffs_base__io_buffer* a_dst,
wuffs_base__io_buffer* a_src,
wuffs_base__slice_u8 a_workbuf);
#ifdef __cplusplus
}
#endif
#if defined(__cplusplus) || defined(WUFFS_IMPLEMENTATION)
struct wuffs_deflate__decoder__struct { … };
#endif
#endif
#if !defined(WUFFS_CONFIG__MODULES) || defined(WUFFS_CONFIG__MODULE__LZW) || defined(WUFFS_NONMONOLITHIC)
extern const char wuffs_lzw__error__bad_code[];
extern const char wuffs_lzw__error__truncated_input[];
#define WUFFS_LZW__DECODER_WORKBUF_LEN_MAX_INCL_WORST_CASE …
wuffs_lzw__decoder;
#ifdef __cplusplus
extern "C" {
#endif
wuffs_base__status WUFFS_BASE__WARN_UNUSED_RESULT
wuffs_lzw__decoder__initialize(
wuffs_lzw__decoder* self,
size_t sizeof_star_self,
uint64_t wuffs_version,
uint32_t options);
size_t
sizeof__wuffs_lzw__decoder();
wuffs_lzw__decoder*
wuffs_lzw__decoder__alloc();
static inline wuffs_base__io_transformer*
wuffs_lzw__decoder__alloc_as__wuffs_base__io_transformer() { … }
static inline wuffs_base__io_transformer*
wuffs_lzw__decoder__upcast_as__wuffs_base__io_transformer(
wuffs_lzw__decoder* p) { … }
WUFFS_BASE__MAYBE_STATIC wuffs_base__empty_struct
wuffs_lzw__decoder__set_quirk_enabled(
wuffs_lzw__decoder* self,
uint32_t a_quirk,
bool a_enabled);
WUFFS_BASE__MAYBE_STATIC wuffs_base__empty_struct
wuffs_lzw__decoder__set_literal_width(
wuffs_lzw__decoder* self,
uint32_t a_lw);
WUFFS_BASE__MAYBE_STATIC wuffs_base__range_ii_u64
wuffs_lzw__decoder__workbuf_len(
const wuffs_lzw__decoder* self);
WUFFS_BASE__MAYBE_STATIC wuffs_base__status
wuffs_lzw__decoder__transform_io(
wuffs_lzw__decoder* self,
wuffs_base__io_buffer* a_dst,
wuffs_base__io_buffer* a_src,
wuffs_base__slice_u8 a_workbuf);
WUFFS_BASE__MAYBE_STATIC wuffs_base__slice_u8
wuffs_lzw__decoder__flush(
wuffs_lzw__decoder* self);
#ifdef __cplusplus
}
#endif
#if defined(__cplusplus) || defined(WUFFS_IMPLEMENTATION)
struct wuffs_lzw__decoder__struct { … };
#endif
#endif
#if !defined(WUFFS_CONFIG__MODULES) || defined(WUFFS_CONFIG__MODULE__GIF) || defined(WUFFS_NONMONOLITHIC)
extern const char wuffs_gif__error__bad_extension_label[];
extern const char wuffs_gif__error__bad_frame_size[];
extern const char wuffs_gif__error__bad_graphic_control[];
extern const char wuffs_gif__error__bad_header[];
extern const char wuffs_gif__error__bad_literal_width[];
extern const char wuffs_gif__error__bad_palette[];
extern const char wuffs_gif__error__truncated_input[];
#define WUFFS_GIF__DECODER_WORKBUF_LEN_MAX_INCL_WORST_CASE …
#define WUFFS_GIF__QUIRK_DELAY_NUM_DECODED_FRAMES …
#define WUFFS_GIF__QUIRK_FIRST_FRAME_LOCAL_PALETTE_MEANS_BLACK_BACKGROUND …
#define WUFFS_GIF__QUIRK_HONOR_BACKGROUND_COLOR …
#define WUFFS_GIF__QUIRK_IGNORE_TOO_MUCH_PIXEL_DATA …
#define WUFFS_GIF__QUIRK_IMAGE_BOUNDS_ARE_STRICT …
#define WUFFS_GIF__QUIRK_REJECT_EMPTY_FRAME …
#define WUFFS_GIF__QUIRK_REJECT_EMPTY_PALETTE …
wuffs_gif__decoder;
#ifdef __cplusplus
extern "C" {
#endif
wuffs_base__status WUFFS_BASE__WARN_UNUSED_RESULT
wuffs_gif__decoder__initialize(
wuffs_gif__decoder* self,
size_t sizeof_star_self,
uint64_t wuffs_version,
uint32_t options);
size_t
sizeof__wuffs_gif__decoder();
wuffs_gif__decoder*
wuffs_gif__decoder__alloc();
static inline wuffs_base__image_decoder*
wuffs_gif__decoder__alloc_as__wuffs_base__image_decoder() { … }
static inline wuffs_base__image_decoder*
wuffs_gif__decoder__upcast_as__wuffs_base__image_decoder(
wuffs_gif__decoder* p) { … }
WUFFS_BASE__MAYBE_STATIC wuffs_base__empty_struct
wuffs_gif__decoder__set_quirk_enabled(
wuffs_gif__decoder* self,
uint32_t a_quirk,
bool a_enabled);
WUFFS_BASE__MAYBE_STATIC wuffs_base__status
wuffs_gif__decoder__decode_image_config(
wuffs_gif__decoder* self,
wuffs_base__image_config* a_dst,
wuffs_base__io_buffer* a_src);
WUFFS_BASE__MAYBE_STATIC wuffs_base__empty_struct
wuffs_gif__decoder__set_report_metadata(
wuffs_gif__decoder* self,
uint32_t a_fourcc,
bool a_report);
WUFFS_BASE__MAYBE_STATIC wuffs_base__status
wuffs_gif__decoder__tell_me_more(
wuffs_gif__decoder* self,
wuffs_base__io_buffer* a_dst,
wuffs_base__more_information* a_minfo,
wuffs_base__io_buffer* a_src);
WUFFS_BASE__MAYBE_STATIC uint32_t
wuffs_gif__decoder__num_animation_loops(
const wuffs_gif__decoder* self);
WUFFS_BASE__MAYBE_STATIC uint64_t
wuffs_gif__decoder__num_decoded_frame_configs(
const wuffs_gif__decoder* self);
WUFFS_BASE__MAYBE_STATIC uint64_t
wuffs_gif__decoder__num_decoded_frames(
const wuffs_gif__decoder* self);
WUFFS_BASE__MAYBE_STATIC wuffs_base__rect_ie_u32
wuffs_gif__decoder__frame_dirty_rect(
const wuffs_gif__decoder* self);
WUFFS_BASE__MAYBE_STATIC wuffs_base__range_ii_u64
wuffs_gif__decoder__workbuf_len(
const wuffs_gif__decoder* self);
WUFFS_BASE__MAYBE_STATIC wuffs_base__status
wuffs_gif__decoder__restart_frame(
wuffs_gif__decoder* self,
uint64_t a_index,
uint64_t a_io_position);
WUFFS_BASE__MAYBE_STATIC wuffs_base__status
wuffs_gif__decoder__decode_frame_config(
wuffs_gif__decoder* self,
wuffs_base__frame_config* a_dst,
wuffs_base__io_buffer* a_src);
WUFFS_BASE__MAYBE_STATIC wuffs_base__status
wuffs_gif__decoder__decode_frame(
wuffs_gif__decoder* self,
wuffs_base__pixel_buffer* a_dst,
wuffs_base__io_buffer* a_src,
wuffs_base__pixel_blend a_blend,
wuffs_base__slice_u8 a_workbuf,
wuffs_base__decode_frame_options* a_opts);
#ifdef __cplusplus
}
#endif
#if defined(__cplusplus) || defined(WUFFS_IMPLEMENTATION)
struct wuffs_gif__decoder__struct { … };
#endif
#endif
#if !defined(WUFFS_CONFIG__MODULES) || defined(WUFFS_CONFIG__MODULE__GZIP) || defined(WUFFS_NONMONOLITHIC)
extern const char wuffs_gzip__error__bad_checksum[];
extern const char wuffs_gzip__error__bad_compression_method[];
extern const char wuffs_gzip__error__bad_encoding_flags[];
extern const char wuffs_gzip__error__bad_header[];
extern const char wuffs_gzip__error__truncated_input[];
#define WUFFS_GZIP__DECODER_WORKBUF_LEN_MAX_INCL_WORST_CASE …
wuffs_gzip__decoder;
#ifdef __cplusplus
extern "C" {
#endif
wuffs_base__status WUFFS_BASE__WARN_UNUSED_RESULT
wuffs_gzip__decoder__initialize(
wuffs_gzip__decoder* self,
size_t sizeof_star_self,
uint64_t wuffs_version,
uint32_t options);
size_t
sizeof__wuffs_gzip__decoder();
wuffs_gzip__decoder*
wuffs_gzip__decoder__alloc();
static inline wuffs_base__io_transformer*
wuffs_gzip__decoder__alloc_as__wuffs_base__io_transformer() { … }
static inline wuffs_base__io_transformer*
wuffs_gzip__decoder__upcast_as__wuffs_base__io_transformer(
wuffs_gzip__decoder* p) { … }
WUFFS_BASE__MAYBE_STATIC wuffs_base__empty_struct
wuffs_gzip__decoder__set_quirk_enabled(
wuffs_gzip__decoder* self,
uint32_t a_quirk,
bool a_enabled);
WUFFS_BASE__MAYBE_STATIC wuffs_base__range_ii_u64
wuffs_gzip__decoder__workbuf_len(
const wuffs_gzip__decoder* self);
WUFFS_BASE__MAYBE_STATIC wuffs_base__status
wuffs_gzip__decoder__transform_io(
wuffs_gzip__decoder* self,
wuffs_base__io_buffer* a_dst,
wuffs_base__io_buffer* a_src,
wuffs_base__slice_u8 a_workbuf);
#ifdef __cplusplus
}
#endif
#if defined(__cplusplus) || defined(WUFFS_IMPLEMENTATION)
struct wuffs_gzip__decoder__struct { … };
#endif
#endif
#if !defined(WUFFS_CONFIG__MODULES) || defined(WUFFS_CONFIG__MODULE__JSON) || defined(WUFFS_NONMONOLITHIC)
extern const char wuffs_json__error__bad_c0_control_code[];
extern const char wuffs_json__error__bad_utf_8[];
extern const char wuffs_json__error__bad_backslash_escape[];
extern const char wuffs_json__error__bad_input[];
extern const char wuffs_json__error__bad_new_line_in_a_string[];
extern const char wuffs_json__error__bad_quirk_combination[];
extern const char wuffs_json__error__unsupported_number_length[];
extern const char wuffs_json__error__unsupported_recursion_depth[];
#define WUFFS_JSON__DECODER_WORKBUF_LEN_MAX_INCL_WORST_CASE …
#define WUFFS_JSON__DECODER_DEPTH_MAX_INCL …
#define WUFFS_JSON__DECODER_DST_TOKEN_BUFFER_LENGTH_MIN_INCL …
#define WUFFS_JSON__DECODER_SRC_IO_BUFFER_LENGTH_MIN_INCL …
#define WUFFS_JSON__QUIRK_ALLOW_ASCII_CONTROL_CODES …
#define WUFFS_JSON__QUIRK_ALLOW_BACKSLASH_A …
#define WUFFS_JSON__QUIRK_ALLOW_BACKSLASH_CAPITAL_U …
#define WUFFS_JSON__QUIRK_ALLOW_BACKSLASH_E …
#define WUFFS_JSON__QUIRK_ALLOW_BACKSLASH_NEW_LINE …
#define WUFFS_JSON__QUIRK_ALLOW_BACKSLASH_QUESTION_MARK …
#define WUFFS_JSON__QUIRK_ALLOW_BACKSLASH_SINGLE_QUOTE …
#define WUFFS_JSON__QUIRK_ALLOW_BACKSLASH_V …
#define WUFFS_JSON__QUIRK_ALLOW_BACKSLASH_X_AS_CODE_POINTS …
#define WUFFS_JSON__QUIRK_ALLOW_BACKSLASH_ZERO …
#define WUFFS_JSON__QUIRK_ALLOW_COMMENT_BLOCK …
#define WUFFS_JSON__QUIRK_ALLOW_COMMENT_LINE …
#define WUFFS_JSON__QUIRK_ALLOW_EXTRA_COMMA …
#define WUFFS_JSON__QUIRK_ALLOW_INF_NAN_NUMBERS …
#define WUFFS_JSON__QUIRK_ALLOW_LEADING_ASCII_RECORD_SEPARATOR …
#define WUFFS_JSON__QUIRK_ALLOW_LEADING_UNICODE_BYTE_ORDER_MARK …
#define WUFFS_JSON__QUIRK_ALLOW_TRAILING_FILLER …
#define WUFFS_JSON__QUIRK_EXPECT_TRAILING_NEW_LINE_OR_EOF …
#define WUFFS_JSON__QUIRK_JSON_POINTER_ALLOW_TILDE_N_TILDE_R_TILDE_T …
#define WUFFS_JSON__QUIRK_REPLACE_INVALID_UNICODE …
wuffs_json__decoder;
#ifdef __cplusplus
extern "C" {
#endif
wuffs_base__status WUFFS_BASE__WARN_UNUSED_RESULT
wuffs_json__decoder__initialize(
wuffs_json__decoder* self,
size_t sizeof_star_self,
uint64_t wuffs_version,
uint32_t options);
size_t
sizeof__wuffs_json__decoder();
wuffs_json__decoder*
wuffs_json__decoder__alloc();
static inline wuffs_base__token_decoder*
wuffs_json__decoder__alloc_as__wuffs_base__token_decoder() { … }
static inline wuffs_base__token_decoder*
wuffs_json__decoder__upcast_as__wuffs_base__token_decoder(
wuffs_json__decoder* p) { … }
WUFFS_BASE__MAYBE_STATIC wuffs_base__empty_struct
wuffs_json__decoder__set_quirk_enabled(
wuffs_json__decoder* self,
uint32_t a_quirk,
bool a_enabled);
WUFFS_BASE__MAYBE_STATIC wuffs_base__range_ii_u64
wuffs_json__decoder__workbuf_len(
const wuffs_json__decoder* self);
WUFFS_BASE__MAYBE_STATIC wuffs_base__status
wuffs_json__decoder__decode_tokens(
wuffs_json__decoder* self,
wuffs_base__token_buffer* a_dst,
wuffs_base__io_buffer* a_src,
wuffs_base__slice_u8 a_workbuf);
#ifdef __cplusplus
}
#endif
#if defined(__cplusplus) || defined(WUFFS_IMPLEMENTATION)
struct wuffs_json__decoder__struct { … };
#endif
#endif
#if !defined(WUFFS_CONFIG__MODULES) || defined(WUFFS_CONFIG__MODULE__NIE) || defined(WUFFS_NONMONOLITHIC)
extern const char wuffs_nie__error__bad_header[];
extern const char wuffs_nie__error__truncated_input[];
extern const char wuffs_nie__error__unsupported_nie_file[];
#define WUFFS_NIE__DECODER_WORKBUF_LEN_MAX_INCL_WORST_CASE …
wuffs_nie__decoder;
#ifdef __cplusplus
extern "C" {
#endif
wuffs_base__status WUFFS_BASE__WARN_UNUSED_RESULT
wuffs_nie__decoder__initialize(
wuffs_nie__decoder* self,
size_t sizeof_star_self,
uint64_t wuffs_version,
uint32_t options);
size_t
sizeof__wuffs_nie__decoder();
wuffs_nie__decoder*
wuffs_nie__decoder__alloc();
static inline wuffs_base__image_decoder*
wuffs_nie__decoder__alloc_as__wuffs_base__image_decoder() { … }
static inline wuffs_base__image_decoder*
wuffs_nie__decoder__upcast_as__wuffs_base__image_decoder(
wuffs_nie__decoder* p) { … }
WUFFS_BASE__MAYBE_STATIC wuffs_base__empty_struct
wuffs_nie__decoder__set_quirk_enabled(
wuffs_nie__decoder* self,
uint32_t a_quirk,
bool a_enabled);
WUFFS_BASE__MAYBE_STATIC wuffs_base__status
wuffs_nie__decoder__decode_image_config(
wuffs_nie__decoder* self,
wuffs_base__image_config* a_dst,
wuffs_base__io_buffer* a_src);
WUFFS_BASE__MAYBE_STATIC wuffs_base__status
wuffs_nie__decoder__decode_frame_config(
wuffs_nie__decoder* self,
wuffs_base__frame_config* a_dst,
wuffs_base__io_buffer* a_src);
WUFFS_BASE__MAYBE_STATIC wuffs_base__status
wuffs_nie__decoder__decode_frame(
wuffs_nie__decoder* self,
wuffs_base__pixel_buffer* a_dst,
wuffs_base__io_buffer* a_src,
wuffs_base__pixel_blend a_blend,
wuffs_base__slice_u8 a_workbuf,
wuffs_base__decode_frame_options* a_opts);
WUFFS_BASE__MAYBE_STATIC wuffs_base__rect_ie_u32
wuffs_nie__decoder__frame_dirty_rect(
const wuffs_nie__decoder* self);
WUFFS_BASE__MAYBE_STATIC uint32_t
wuffs_nie__decoder__num_animation_loops(
const wuffs_nie__decoder* self);
WUFFS_BASE__MAYBE_STATIC uint64_t
wuffs_nie__decoder__num_decoded_frame_configs(
const wuffs_nie__decoder* self);
WUFFS_BASE__MAYBE_STATIC uint64_t
wuffs_nie__decoder__num_decoded_frames(
const wuffs_nie__decoder* self);
WUFFS_BASE__MAYBE_STATIC wuffs_base__status
wuffs_nie__decoder__restart_frame(
wuffs_nie__decoder* self,
uint64_t a_index,
uint64_t a_io_position);
WUFFS_BASE__MAYBE_STATIC wuffs_base__empty_struct
wuffs_nie__decoder__set_report_metadata(
wuffs_nie__decoder* self,
uint32_t a_fourcc,
bool a_report);
WUFFS_BASE__MAYBE_STATIC wuffs_base__status
wuffs_nie__decoder__tell_me_more(
wuffs_nie__decoder* self,
wuffs_base__io_buffer* a_dst,
wuffs_base__more_information* a_minfo,
wuffs_base__io_buffer* a_src);
WUFFS_BASE__MAYBE_STATIC wuffs_base__range_ii_u64
wuffs_nie__decoder__workbuf_len(
const wuffs_nie__decoder* self);
#ifdef __cplusplus
}
#endif
#if defined(__cplusplus) || defined(WUFFS_IMPLEMENTATION)
struct wuffs_nie__decoder__struct { … };
#endif
#endif
#if !defined(WUFFS_CONFIG__MODULES) || defined(WUFFS_CONFIG__MODULE__ZLIB) || defined(WUFFS_NONMONOLITHIC)
extern const char wuffs_zlib__note__dictionary_required[];
extern const char wuffs_zlib__error__bad_checksum[];
extern const char wuffs_zlib__error__bad_compression_method[];
extern const char wuffs_zlib__error__bad_compression_window_size[];
extern const char wuffs_zlib__error__bad_parity_check[];
extern const char wuffs_zlib__error__incorrect_dictionary[];
extern const char wuffs_zlib__error__truncated_input[];
#define WUFFS_ZLIB__QUIRK_JUST_RAW_DEFLATE …
#define WUFFS_ZLIB__DECODER_WORKBUF_LEN_MAX_INCL_WORST_CASE …
wuffs_zlib__decoder;
#ifdef __cplusplus
extern "C" {
#endif
wuffs_base__status WUFFS_BASE__WARN_UNUSED_RESULT
wuffs_zlib__decoder__initialize(
wuffs_zlib__decoder* self,
size_t sizeof_star_self,
uint64_t wuffs_version,
uint32_t options);
size_t
sizeof__wuffs_zlib__decoder();
wuffs_zlib__decoder*
wuffs_zlib__decoder__alloc();
static inline wuffs_base__io_transformer*
wuffs_zlib__decoder__alloc_as__wuffs_base__io_transformer() { … }
static inline wuffs_base__io_transformer*
wuffs_zlib__decoder__upcast_as__wuffs_base__io_transformer(
wuffs_zlib__decoder* p) { … }
WUFFS_BASE__MAYBE_STATIC uint32_t
wuffs_zlib__decoder__dictionary_id(
const wuffs_zlib__decoder* self);
WUFFS_BASE__MAYBE_STATIC wuffs_base__empty_struct
wuffs_zlib__decoder__add_dictionary(
wuffs_zlib__decoder* self,
wuffs_base__slice_u8 a_dict);
WUFFS_BASE__MAYBE_STATIC wuffs_base__empty_struct
wuffs_zlib__decoder__set_quirk_enabled(
wuffs_zlib__decoder* self,
uint32_t a_quirk,
bool a_enabled);
WUFFS_BASE__MAYBE_STATIC wuffs_base__range_ii_u64
wuffs_zlib__decoder__workbuf_len(
const wuffs_zlib__decoder* self);
WUFFS_BASE__MAYBE_STATIC wuffs_base__status
wuffs_zlib__decoder__transform_io(
wuffs_zlib__decoder* self,
wuffs_base__io_buffer* a_dst,
wuffs_base__io_buffer* a_src,
wuffs_base__slice_u8 a_workbuf);
#ifdef __cplusplus
}
#endif
#if defined(__cplusplus) || defined(WUFFS_IMPLEMENTATION)
struct wuffs_zlib__decoder__struct { … };
#endif
#endif
#if !defined(WUFFS_CONFIG__MODULES) || defined(WUFFS_CONFIG__MODULE__PNG) || defined(WUFFS_NONMONOLITHIC)
extern const char wuffs_png__error__bad_animation_sequence_number[];
extern const char wuffs_png__error__bad_checksum[];
extern const char wuffs_png__error__bad_chunk[];
extern const char wuffs_png__error__bad_filter[];
extern const char wuffs_png__error__bad_header[];
extern const char wuffs_png__error__bad_text_chunk_not_latin_1[];
extern const char wuffs_png__error__missing_palette[];
extern const char wuffs_png__error__truncated_input[];
extern const char wuffs_png__error__unsupported_cgbi_extension[];
extern const char wuffs_png__error__unsupported_png_compression_method[];
extern const char wuffs_png__error__unsupported_png_file[];
#define WUFFS_PNG__DECODER_WORKBUF_LEN_MAX_INCL_WORST_CASE …
#define WUFFS_PNG__DECODER_SRC_IO_BUFFER_LENGTH_MIN_INCL …
wuffs_png__decoder;
#ifdef __cplusplus
extern "C" {
#endif
wuffs_base__status WUFFS_BASE__WARN_UNUSED_RESULT
wuffs_png__decoder__initialize(
wuffs_png__decoder* self,
size_t sizeof_star_self,
uint64_t wuffs_version,
uint32_t options);
size_t
sizeof__wuffs_png__decoder();
wuffs_png__decoder*
wuffs_png__decoder__alloc();
static inline wuffs_base__image_decoder*
wuffs_png__decoder__alloc_as__wuffs_base__image_decoder() { … }
static inline wuffs_base__image_decoder*
wuffs_png__decoder__upcast_as__wuffs_base__image_decoder(
wuffs_png__decoder* p) { … }
WUFFS_BASE__MAYBE_STATIC wuffs_base__empty_struct
wuffs_png__decoder__set_quirk_enabled(
wuffs_png__decoder* self,
uint32_t a_quirk,
bool a_enabled);
WUFFS_BASE__MAYBE_STATIC wuffs_base__status
wuffs_png__decoder__decode_image_config(
wuffs_png__decoder* self,
wuffs_base__image_config* a_dst,
wuffs_base__io_buffer* a_src);
WUFFS_BASE__MAYBE_STATIC wuffs_base__status
wuffs_png__decoder__decode_frame_config(
wuffs_png__decoder* self,
wuffs_base__frame_config* a_dst,
wuffs_base__io_buffer* a_src);
WUFFS_BASE__MAYBE_STATIC wuffs_base__status
wuffs_png__decoder__decode_frame(
wuffs_png__decoder* self,
wuffs_base__pixel_buffer* a_dst,
wuffs_base__io_buffer* a_src,
wuffs_base__pixel_blend a_blend,
wuffs_base__slice_u8 a_workbuf,
wuffs_base__decode_frame_options* a_opts);
WUFFS_BASE__MAYBE_STATIC wuffs_base__rect_ie_u32
wuffs_png__decoder__frame_dirty_rect(
const wuffs_png__decoder* self);
WUFFS_BASE__MAYBE_STATIC uint32_t
wuffs_png__decoder__num_animation_loops(
const wuffs_png__decoder* self);
WUFFS_BASE__MAYBE_STATIC uint64_t
wuffs_png__decoder__num_decoded_frame_configs(
const wuffs_png__decoder* self);
WUFFS_BASE__MAYBE_STATIC uint64_t
wuffs_png__decoder__num_decoded_frames(
const wuffs_png__decoder* self);
WUFFS_BASE__MAYBE_STATIC wuffs_base__status
wuffs_png__decoder__restart_frame(
wuffs_png__decoder* self,
uint64_t a_index,
uint64_t a_io_position);
WUFFS_BASE__MAYBE_STATIC wuffs_base__empty_struct
wuffs_png__decoder__set_report_metadata(
wuffs_png__decoder* self,
uint32_t a_fourcc,
bool a_report);
WUFFS_BASE__MAYBE_STATIC wuffs_base__status
wuffs_png__decoder__tell_me_more(
wuffs_png__decoder* self,
wuffs_base__io_buffer* a_dst,
wuffs_base__more_information* a_minfo,
wuffs_base__io_buffer* a_src);
WUFFS_BASE__MAYBE_STATIC wuffs_base__range_ii_u64
wuffs_png__decoder__workbuf_len(
const wuffs_png__decoder* self);
#ifdef __cplusplus
}
#endif
#if defined(__cplusplus) || defined(WUFFS_IMPLEMENTATION)
struct wuffs_png__decoder__struct { … };
#endif
#endif
#if !defined(WUFFS_CONFIG__MODULES) || defined(WUFFS_CONFIG__MODULE__TGA) || defined(WUFFS_NONMONOLITHIC)
extern const char wuffs_tga__error__bad_header[];
extern const char wuffs_tga__error__bad_run_length_encoding[];
extern const char wuffs_tga__error__truncated_input[];
extern const char wuffs_tga__error__unsupported_tga_file[];
#define WUFFS_TGA__DECODER_WORKBUF_LEN_MAX_INCL_WORST_CASE …
wuffs_tga__decoder;
#ifdef __cplusplus
extern "C" {
#endif
wuffs_base__status WUFFS_BASE__WARN_UNUSED_RESULT
wuffs_tga__decoder__initialize(
wuffs_tga__decoder* self,
size_t sizeof_star_self,
uint64_t wuffs_version,
uint32_t options);
size_t
sizeof__wuffs_tga__decoder();
wuffs_tga__decoder*
wuffs_tga__decoder__alloc();
static inline wuffs_base__image_decoder*
wuffs_tga__decoder__alloc_as__wuffs_base__image_decoder() { … }
static inline wuffs_base__image_decoder*
wuffs_tga__decoder__upcast_as__wuffs_base__image_decoder(
wuffs_tga__decoder* p) { … }
WUFFS_BASE__MAYBE_STATIC wuffs_base__empty_struct
wuffs_tga__decoder__set_quirk_enabled(
wuffs_tga__decoder* self,
uint32_t a_quirk,
bool a_enabled);
WUFFS_BASE__MAYBE_STATIC wuffs_base__status
wuffs_tga__decoder__decode_image_config(
wuffs_tga__decoder* self,
wuffs_base__image_config* a_dst,
wuffs_base__io_buffer* a_src);
WUFFS_BASE__MAYBE_STATIC wuffs_base__status
wuffs_tga__decoder__decode_frame_config(
wuffs_tga__decoder* self,
wuffs_base__frame_config* a_dst,
wuffs_base__io_buffer* a_src);
WUFFS_BASE__MAYBE_STATIC wuffs_base__status
wuffs_tga__decoder__decode_frame(
wuffs_tga__decoder* self,
wuffs_base__pixel_buffer* a_dst,
wuffs_base__io_buffer* a_src,
wuffs_base__pixel_blend a_blend,
wuffs_base__slice_u8 a_workbuf,
wuffs_base__decode_frame_options* a_opts);
WUFFS_BASE__MAYBE_STATIC wuffs_base__rect_ie_u32
wuffs_tga__decoder__frame_dirty_rect(
const wuffs_tga__decoder* self);
WUFFS_BASE__MAYBE_STATIC uint32_t
wuffs_tga__decoder__num_animation_loops(
const wuffs_tga__decoder* self);
WUFFS_BASE__MAYBE_STATIC uint64_t
wuffs_tga__decoder__num_decoded_frame_configs(
const wuffs_tga__decoder* self);
WUFFS_BASE__MAYBE_STATIC uint64_t
wuffs_tga__decoder__num_decoded_frames(
const wuffs_tga__decoder* self);
WUFFS_BASE__MAYBE_STATIC wuffs_base__status
wuffs_tga__decoder__restart_frame(
wuffs_tga__decoder* self,
uint64_t a_index,
uint64_t a_io_position);
WUFFS_BASE__MAYBE_STATIC wuffs_base__empty_struct
wuffs_tga__decoder__set_report_metadata(
wuffs_tga__decoder* self,
uint32_t a_fourcc,
bool a_report);
WUFFS_BASE__MAYBE_STATIC wuffs_base__status
wuffs_tga__decoder__tell_me_more(
wuffs_tga__decoder* self,
wuffs_base__io_buffer* a_dst,
wuffs_base__more_information* a_minfo,
wuffs_base__io_buffer* a_src);
WUFFS_BASE__MAYBE_STATIC wuffs_base__range_ii_u64
wuffs_tga__decoder__workbuf_len(
const wuffs_tga__decoder* self);
#ifdef __cplusplus
}
#endif
#if defined(__cplusplus) || defined(WUFFS_IMPLEMENTATION)
struct wuffs_tga__decoder__struct { … };
#endif
#endif
#if !defined(WUFFS_CONFIG__MODULES) || defined(WUFFS_CONFIG__MODULE__WBMP) || defined(WUFFS_NONMONOLITHIC)
extern const char wuffs_wbmp__error__bad_header[];
extern const char wuffs_wbmp__error__truncated_input[];
#define WUFFS_WBMP__DECODER_WORKBUF_LEN_MAX_INCL_WORST_CASE …
wuffs_wbmp__decoder;
#ifdef __cplusplus
extern "C" {
#endif
wuffs_base__status WUFFS_BASE__WARN_UNUSED_RESULT
wuffs_wbmp__decoder__initialize(
wuffs_wbmp__decoder* self,
size_t sizeof_star_self,
uint64_t wuffs_version,
uint32_t options);
size_t
sizeof__wuffs_wbmp__decoder();
wuffs_wbmp__decoder*
wuffs_wbmp__decoder__alloc();
static inline wuffs_base__image_decoder*
wuffs_wbmp__decoder__alloc_as__wuffs_base__image_decoder() { … }
static inline wuffs_base__image_decoder*
wuffs_wbmp__decoder__upcast_as__wuffs_base__image_decoder(
wuffs_wbmp__decoder* p) { … }
WUFFS_BASE__MAYBE_STATIC wuffs_base__empty_struct
wuffs_wbmp__decoder__set_quirk_enabled(
wuffs_wbmp__decoder* self,
uint32_t a_quirk,
bool a_enabled);
WUFFS_BASE__MAYBE_STATIC wuffs_base__status
wuffs_wbmp__decoder__decode_image_config(
wuffs_wbmp__decoder* self,
wuffs_base__image_config* a_dst,
wuffs_base__io_buffer* a_src);
WUFFS_BASE__MAYBE_STATIC wuffs_base__status
wuffs_wbmp__decoder__decode_frame_config(
wuffs_wbmp__decoder* self,
wuffs_base__frame_config* a_dst,
wuffs_base__io_buffer* a_src);
WUFFS_BASE__MAYBE_STATIC wuffs_base__status
wuffs_wbmp__decoder__decode_frame(
wuffs_wbmp__decoder* self,
wuffs_base__pixel_buffer* a_dst,
wuffs_base__io_buffer* a_src,
wuffs_base__pixel_blend a_blend,
wuffs_base__slice_u8 a_workbuf,
wuffs_base__decode_frame_options* a_opts);
WUFFS_BASE__MAYBE_STATIC wuffs_base__rect_ie_u32
wuffs_wbmp__decoder__frame_dirty_rect(
const wuffs_wbmp__decoder* self);
WUFFS_BASE__MAYBE_STATIC uint32_t
wuffs_wbmp__decoder__num_animation_loops(
const wuffs_wbmp__decoder* self);
WUFFS_BASE__MAYBE_STATIC uint64_t
wuffs_wbmp__decoder__num_decoded_frame_configs(
const wuffs_wbmp__decoder* self);
WUFFS_BASE__MAYBE_STATIC uint64_t
wuffs_wbmp__decoder__num_decoded_frames(
const wuffs_wbmp__decoder* self);
WUFFS_BASE__MAYBE_STATIC wuffs_base__status
wuffs_wbmp__decoder__restart_frame(
wuffs_wbmp__decoder* self,
uint64_t a_index,
uint64_t a_io_position);
WUFFS_BASE__MAYBE_STATIC wuffs_base__empty_struct
wuffs_wbmp__decoder__set_report_metadata(
wuffs_wbmp__decoder* self,
uint32_t a_fourcc,
bool a_report);
WUFFS_BASE__MAYBE_STATIC wuffs_base__status
wuffs_wbmp__decoder__tell_me_more(
wuffs_wbmp__decoder* self,
wuffs_base__io_buffer* a_dst,
wuffs_base__more_information* a_minfo,
wuffs_base__io_buffer* a_src);
WUFFS_BASE__MAYBE_STATIC wuffs_base__range_ii_u64
wuffs_wbmp__decoder__workbuf_len(
const wuffs_wbmp__decoder* self);
#ifdef __cplusplus
}
#endif
#if defined(__cplusplus) || defined(WUFFS_IMPLEMENTATION)
struct wuffs_wbmp__decoder__struct { … };
#endif
#endif
#if defined(__cplusplus) && defined(WUFFS_BASE__HAVE_UNIQUE_PTR)
#include <stdio.h>
#include <string>
namespace wuffs_aux {
IOBuffer;
MemOwner;
namespace sync_io {
class DynIOBuffer { … };
class Input { … };
class FileInput : public Input { … };
class MemoryInput : public Input { … };
}
}
namespace wuffs_aux {
struct DecodeCborResult { … };
class DecodeCborCallbacks { … };
struct DecodeCborArgQuirks { … };
DecodeCborResult
DecodeCbor(DecodeCborCallbacks& callbacks,
sync_io::Input& input,
DecodeCborArgQuirks quirks = DecodeCborArgQuirks::DefaultValue());
}
namespace wuffs_aux {
struct DecodeImageResult { … };
class DecodeImageCallbacks { … };
extern const char DecodeImage_BufferIsTooShort[];
extern const char DecodeImage_MaxInclDimensionExceeded[];
extern const char DecodeImage_MaxInclMetadataLengthExceeded[];
extern const char DecodeImage_OutOfMemory[];
extern const char DecodeImage_UnexpectedEndOfFile[];
extern const char DecodeImage_UnsupportedImageFormat[];
extern const char DecodeImage_UnsupportedMetadata[];
extern const char DecodeImage_UnsupportedPixelBlend[];
extern const char DecodeImage_UnsupportedPixelConfiguration[];
extern const char DecodeImage_UnsupportedPixelFormat[];
struct DecodeImageArgQuirks { … };
struct DecodeImageArgFlags { … };
struct DecodeImageArgPixelBlend { … };
struct DecodeImageArgBackgroundColor { … };
struct DecodeImageArgMaxInclDimension { … };
struct DecodeImageArgMaxInclMetadataLength { … };
DecodeImageResult
DecodeImage(DecodeImageCallbacks& callbacks,
sync_io::Input& input,
DecodeImageArgQuirks quirks = DecodeImageArgQuirks::DefaultValue(),
DecodeImageArgFlags flags = DecodeImageArgFlags::DefaultValue(),
DecodeImageArgPixelBlend pixel_blend =
DecodeImageArgPixelBlend::DefaultValue(),
DecodeImageArgBackgroundColor background_color =
DecodeImageArgBackgroundColor::DefaultValue(),
DecodeImageArgMaxInclDimension max_incl_dimension =
DecodeImageArgMaxInclDimension::DefaultValue(),
DecodeImageArgMaxInclMetadataLength max_incl_metadata_length =
DecodeImageArgMaxInclMetadataLength::DefaultValue());
}
namespace wuffs_aux {
struct DecodeJsonResult { … };
class DecodeJsonCallbacks { … };
extern const char DecodeJson_BadJsonPointer[];
extern const char DecodeJson_NoMatch[];
struct DecodeJsonArgQuirks { … };
struct DecodeJsonArgJsonPointer { … };
DecodeJsonResult
DecodeJson(DecodeJsonCallbacks& callbacks,
sync_io::Input& input,
DecodeJsonArgQuirks quirks = DecodeJsonArgQuirks::DefaultValue(),
DecodeJsonArgJsonPointer json_pointer =
DecodeJsonArgJsonPointer::DefaultValue());
}
#endif
#ifdef WUFFS_IMPLEMENTATION
#ifdef __cplusplus
extern "C" {
#endif
#define WUFFS_BASE__MAGIC …
#define WUFFS_BASE__DISABLED …
#define WUFFS_BASE__COROUTINE_SUSPENSION_POINT_0 …
#define WUFFS_BASE__COROUTINE_SUSPENSION_POINT …
#define WUFFS_BASE__COROUTINE_SUSPENSION_POINT_MAYBE_SUSPEND …
#if defined(__GNUC__) || defined(__clang__)
#define WUFFS_BASE__LIKELY …
#define WUFFS_BASE__UNLIKELY …
#else
#define WUFFS_BASE__LIKELY …
#define WUFFS_BASE__UNLIKELY …
#endif
static inline wuffs_base__empty_struct
wuffs_base__ignore_status(wuffs_base__status z) {
return wuffs_base__make_empty_struct();
}
static inline wuffs_base__status
wuffs_base__status__ensure_not_a_suspension(wuffs_base__status z) {
if (z.repr && (*z.repr == '$')) {
z.repr = wuffs_base__error__cannot_return_a_suspension;
}
return z;
}
static inline size_t
wuffs_base__iterate_total_advance(size_t total_len,
size_t iter_len,
size_t iter_advance) {
if (total_len >= iter_len) {
size_t n = total_len - iter_len;
return ((n / iter_advance) * iter_advance) + iter_advance;
}
return 0;
}
extern const uint8_t wuffs_base__low_bits_mask__u8[8];
extern const uint16_t wuffs_base__low_bits_mask__u16[16];
extern const uint32_t wuffs_base__low_bits_mask__u32[32];
extern const uint64_t wuffs_base__low_bits_mask__u64[64];
#define WUFFS_BASE__LOW_BITS_MASK__U8 …
#define WUFFS_BASE__LOW_BITS_MASK__U16 …
#define WUFFS_BASE__LOW_BITS_MASK__U32 …
#define WUFFS_BASE__LOW_BITS_MASK__U64 …
static inline void
wuffs_base__u8__sat_add_indirect(uint8_t* x, uint8_t y) {
*x = wuffs_base__u8__sat_add(*x, y);
}
static inline void
wuffs_base__u8__sat_sub_indirect(uint8_t* x, uint8_t y) {
*x = wuffs_base__u8__sat_sub(*x, y);
}
static inline void
wuffs_base__u16__sat_add_indirect(uint16_t* x, uint16_t y) {
*x = wuffs_base__u16__sat_add(*x, y);
}
static inline void
wuffs_base__u16__sat_sub_indirect(uint16_t* x, uint16_t y) {
*x = wuffs_base__u16__sat_sub(*x, y);
}
static inline void
wuffs_base__u32__sat_add_indirect(uint32_t* x, uint32_t y) {
*x = wuffs_base__u32__sat_add(*x, y);
}
static inline void
wuffs_base__u32__sat_sub_indirect(uint32_t* x, uint32_t y) {
*x = wuffs_base__u32__sat_sub(*x, y);
}
static inline void
wuffs_base__u64__sat_add_indirect(uint64_t* x, uint64_t y) {
*x = wuffs_base__u64__sat_add(*x, y);
}
static inline void
wuffs_base__u64__sat_sub_indirect(uint64_t* x, uint64_t y) {
*x = wuffs_base__u64__sat_sub(*x, y);
}
static inline wuffs_base__slice_u8
wuffs_base__slice_u8__prefix(wuffs_base__slice_u8 s, uint64_t up_to) {
if (((uint64_t)(s.len)) > up_to) {
s.len = ((size_t)up_to);
}
return s;
}
static inline wuffs_base__slice_u8
wuffs_base__slice_u8__suffix(wuffs_base__slice_u8 s, uint64_t up_to) {
if (((uint64_t)(s.len)) > up_to) {
s.ptr += ((uint64_t)(s.len)) - up_to;
s.len = ((size_t)up_to);
}
return s;
}
static inline uint64_t
wuffs_base__slice_u8__copy_from_slice(wuffs_base__slice_u8 dst,
wuffs_base__slice_u8 src) {
size_t len = dst.len < src.len ? dst.len : src.len;
if (len > 0) {
memmove(dst.ptr, src.ptr, len);
}
return len;
}
static inline wuffs_base__slice_u8
wuffs_base__table_u8__row_u32(wuffs_base__table_u8 t, uint32_t y) {
if (y < t.height) {
return wuffs_base__make_slice_u8(t.ptr + (t.stride * y), t.width);
}
return wuffs_base__make_slice_u8(NULL, 0);
}
#define wuffs_base__utility__empty_slice_u8 …
static inline uint32_t
wuffs_base__range_ii_u32__get_min_incl(const wuffs_base__range_ii_u32* r) {
return r->min_incl;
}
static inline uint32_t
wuffs_base__range_ii_u32__get_max_incl(const wuffs_base__range_ii_u32* r) {
return r->max_incl;
}
static inline uint32_t
wuffs_base__range_ie_u32__get_min_incl(const wuffs_base__range_ie_u32* r) {
return r->min_incl;
}
static inline uint32_t
wuffs_base__range_ie_u32__get_max_excl(const wuffs_base__range_ie_u32* r) {
return r->max_excl;
}
static inline uint64_t
wuffs_base__range_ii_u64__get_min_incl(const wuffs_base__range_ii_u64* r) {
return r->min_incl;
}
static inline uint64_t
wuffs_base__range_ii_u64__get_max_incl(const wuffs_base__range_ii_u64* r) {
return r->max_incl;
}
static inline uint64_t
wuffs_base__range_ie_u64__get_min_incl(const wuffs_base__range_ie_u64* r) {
return r->min_incl;
}
static inline uint64_t
wuffs_base__range_ie_u64__get_max_excl(const wuffs_base__range_ie_u64* r) {
return r->max_excl;
}
#define wuffs_base__utility__empty_range_ii_u32 …
#define wuffs_base__utility__empty_range_ie_u32 …
#define wuffs_base__utility__empty_range_ii_u64 …
#define wuffs_base__utility__empty_range_ie_u64 …
#define wuffs_base__utility__empty_rect_ii_u32 …
#define wuffs_base__utility__empty_rect_ie_u32 …
#define wuffs_base__utility__make_range_ii_u32 …
#define wuffs_base__utility__make_range_ie_u32 …
#define wuffs_base__utility__make_range_ii_u64 …
#define wuffs_base__utility__make_range_ie_u64 …
#define wuffs_base__utility__make_rect_ii_u32 …
#define wuffs_base__utility__make_rect_ie_u32 …
static inline uint64_t
wuffs_base__io__count_since(uint64_t mark, uint64_t index) {
if (index >= mark) {
return index - mark;
}
return 0;
}
#if defined(__GNUC__)
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wcast-qual"
#endif
static inline wuffs_base__slice_u8
wuffs_base__io__since(uint64_t mark, uint64_t index, const uint8_t* ptr) {
if (index >= mark) {
return wuffs_base__make_slice_u8(((uint8_t*)ptr) + mark,
((size_t)(index - mark)));
}
return wuffs_base__make_slice_u8(NULL, 0);
}
#if defined(__GNUC__)
#pragma GCC diagnostic pop
#endif
static inline void
wuffs_base__io_reader__limit(const uint8_t** ptr_io2_r,
const uint8_t* iop_r,
uint64_t limit) {
if (((uint64_t)(*ptr_io2_r - iop_r)) > limit) {
*ptr_io2_r = iop_r + limit;
}
}
static inline uint32_t
wuffs_base__io_reader__limited_copy_u32_to_slice(const uint8_t** ptr_iop_r,
const uint8_t* io2_r,
uint32_t length,
wuffs_base__slice_u8 dst) {
const uint8_t* iop_r = *ptr_iop_r;
size_t n = dst.len;
if (n > length) {
n = length;
}
if (n > ((size_t)(io2_r - iop_r))) {
n = (size_t)(io2_r - iop_r);
}
if (n > 0) {
memmove(dst.ptr, iop_r, n);
*ptr_iop_r += n;
}
return (uint32_t)(n);
}
static inline uint32_t
wuffs_base__io_reader__match7(const uint8_t* iop_r,
const uint8_t* io2_r,
wuffs_base__io_buffer* r,
uint64_t a) {
uint32_t n = a & 7;
a >>= 8;
if ((io2_r - iop_r) >= 8) {
uint64_t x = wuffs_base__peek_u64le__no_bounds_check(iop_r);
uint32_t shift = 8 * (8 - n);
return ((a << shift) == (x << shift)) ? 0 : 2;
}
for (; n > 0; n--) {
if (iop_r >= io2_r) {
return (r && r->meta.closed) ? 2 : 1;
} else if (*iop_r != ((uint8_t)(a))) {
return 2;
}
iop_r++;
a >>= 8;
}
return 0;
}
static inline wuffs_base__io_buffer*
wuffs_base__io_reader__set(wuffs_base__io_buffer* b,
const uint8_t** ptr_iop_r,
const uint8_t** ptr_io0_r,
const uint8_t** ptr_io1_r,
const uint8_t** ptr_io2_r,
wuffs_base__slice_u8 data,
uint64_t history_position) {
b->data = data;
b->meta.wi = data.len;
b->meta.ri = 0;
b->meta.pos = history_position;
b->meta.closed = false;
*ptr_iop_r = data.ptr;
*ptr_io0_r = data.ptr;
*ptr_io1_r = data.ptr;
*ptr_io2_r = data.ptr + data.len;
return b;
}
static inline uint64_t
wuffs_base__io_writer__copy_from_slice(uint8_t** ptr_iop_w,
uint8_t* io2_w,
wuffs_base__slice_u8 src) {
uint8_t* iop_w = *ptr_iop_w;
size_t n = src.len;
if (n > ((size_t)(io2_w - iop_w))) {
n = (size_t)(io2_w - iop_w);
}
if (n > 0) {
memmove(iop_w, src.ptr, n);
*ptr_iop_w += n;
}
return (uint64_t)(n);
}
static inline void
wuffs_base__io_writer__limit(uint8_t** ptr_io2_w,
uint8_t* iop_w,
uint64_t limit) {
if (((uint64_t)(*ptr_io2_w - iop_w)) > limit) {
*ptr_io2_w = iop_w + limit;
}
}
static inline uint32_t
wuffs_base__io_writer__limited_copy_u32_from_history(uint8_t** ptr_iop_w,
uint8_t* io0_w,
uint8_t* io2_w,
uint32_t length,
uint32_t distance) {
if (!distance) {
return 0;
}
uint8_t* p = *ptr_iop_w;
if ((size_t)(p - io0_w) < (size_t)(distance)) {
return 0;
}
uint8_t* q = p - distance;
size_t n = (size_t)(io2_w - p);
if ((size_t)(length) > n) {
length = (uint32_t)(n);
} else {
n = (size_t)(length);
}
for (; n >= 3; n -= 3) {
*p++ = *q++;
*p++ = *q++;
*p++ = *q++;
}
for (; n; n--) {
*p++ = *q++;
}
*ptr_iop_w = p;
return length;
}
static inline uint32_t
wuffs_base__io_writer__limited_copy_u32_from_history_fast(uint8_t** ptr_iop_w,
uint8_t* io0_w,
uint8_t* io2_w,
uint32_t length,
uint32_t distance) {
uint8_t* p = *ptr_iop_w;
uint8_t* q = p - distance;
uint32_t n = length;
for (; n >= 3; n -= 3) {
*p++ = *q++;
*p++ = *q++;
*p++ = *q++;
}
for (; n; n--) {
*p++ = *q++;
}
*ptr_iop_w = p;
return length;
}
static inline uint32_t
wuffs_base__io_writer__limited_copy_u32_from_history_8_byte_chunks_distance_1_fast(
uint8_t** ptr_iop_w,
uint8_t* io0_w,
uint8_t* io2_w,
uint32_t length,
uint32_t distance) {
uint8_t* p = *ptr_iop_w;
uint64_t x = p[-1];
x |= x << 8;
x |= x << 16;
x |= x << 32;
uint32_t n = length;
while (1) {
wuffs_base__poke_u64le__no_bounds_check(p, x);
if (n <= 8) {
p += n;
break;
}
p += 8;
n -= 8;
}
*ptr_iop_w = p;
return length;
}
static inline uint32_t
wuffs_base__io_writer__limited_copy_u32_from_history_8_byte_chunks_fast(
uint8_t** ptr_iop_w,
uint8_t* io0_w,
uint8_t* io2_w,
uint32_t length,
uint32_t distance) {
uint8_t* p = *ptr_iop_w;
uint8_t* q = p - distance;
uint32_t n = length;
while (1) {
memcpy(p, q, 8);
if (n <= 8) {
p += n;
break;
}
p += 8;
q += 8;
n -= 8;
}
*ptr_iop_w = p;
return length;
}
static inline uint32_t
wuffs_base__io_writer__limited_copy_u32_from_reader(uint8_t** ptr_iop_w,
uint8_t* io2_w,
uint32_t length,
const uint8_t** ptr_iop_r,
const uint8_t* io2_r) {
uint8_t* iop_w = *ptr_iop_w;
size_t n = length;
if (n > ((size_t)(io2_w - iop_w))) {
n = (size_t)(io2_w - iop_w);
}
const uint8_t* iop_r = *ptr_iop_r;
if (n > ((size_t)(io2_r - iop_r))) {
n = (size_t)(io2_r - iop_r);
}
if (n > 0) {
memmove(iop_w, iop_r, n);
*ptr_iop_w += n;
*ptr_iop_r += n;
}
return (uint32_t)(n);
}
static inline uint32_t
wuffs_base__io_writer__limited_copy_u32_from_slice(uint8_t** ptr_iop_w,
uint8_t* io2_w,
uint32_t length,
wuffs_base__slice_u8 src) {
uint8_t* iop_w = *ptr_iop_w;
size_t n = src.len;
if (n > length) {
n = length;
}
if (n > ((size_t)(io2_w - iop_w))) {
n = (size_t)(io2_w - iop_w);
}
if (n > 0) {
memmove(iop_w, src.ptr, n);
*ptr_iop_w += n;
}
return (uint32_t)(n);
}
static inline wuffs_base__io_buffer*
wuffs_base__io_writer__set(wuffs_base__io_buffer* b,
uint8_t** ptr_iop_w,
uint8_t** ptr_io0_w,
uint8_t** ptr_io1_w,
uint8_t** ptr_io2_w,
wuffs_base__slice_u8 data,
uint64_t history_position) {
b->data = data;
b->meta.wi = 0;
b->meta.ri = 0;
b->meta.pos = history_position;
b->meta.closed = false;
*ptr_iop_w = data.ptr;
*ptr_io0_w = data.ptr;
*ptr_io1_w = data.ptr;
*ptr_io2_w = data.ptr + data.len;
return b;
}
#define wuffs_base__utility__empty_io_reader …
#define wuffs_base__utility__empty_io_writer …
WUFFS_BASE__MAYBE_STATIC uint64_t
wuffs_base__pixel_swizzler__limited_swizzle_u32_interleaved_from_reader(
const wuffs_base__pixel_swizzler* p,
uint32_t up_to_num_pixels,
wuffs_base__slice_u8 dst,
wuffs_base__slice_u8 dst_palette,
const uint8_t** ptr_iop_r,
const uint8_t* io2_r);
WUFFS_BASE__MAYBE_STATIC uint64_t
wuffs_base__pixel_swizzler__swizzle_interleaved_from_reader(
const wuffs_base__pixel_swizzler* p,
wuffs_base__slice_u8 dst,
wuffs_base__slice_u8 dst_palette,
const uint8_t** ptr_iop_r,
const uint8_t* io2_r);
WUFFS_BASE__MAYBE_STATIC uint64_t
wuffs_base__pixel_swizzler__swizzle_interleaved_transparent_black(
const wuffs_base__pixel_swizzler* p,
wuffs_base__slice_u8 dst,
wuffs_base__slice_u8 dst_palette,
uint64_t num_pixels);
#define wuffs_base__utility__make_pixel_format …
#if !defined(WUFFS_CONFIG__MODULES) || defined(WUFFS_CONFIG__MODULE__BASE) || \
defined(WUFFS_CONFIG__MODULE__BASE__CORE)
const uint8_t wuffs_base__low_bits_mask__u8[8] = {
0x00, 0x01, 0x03, 0x07, 0x0F, 0x1F, 0x3F, 0x7F,
};
const uint16_t wuffs_base__low_bits_mask__u16[16] = {
0x0000, 0x0001, 0x0003, 0x0007, 0x000F, 0x001F, 0x003F, 0x007F,
0x00FF, 0x01FF, 0x03FF, 0x07FF, 0x0FFF, 0x1FFF, 0x3FFF, 0x7FFF,
};
const uint32_t wuffs_base__low_bits_mask__u32[32] = {
0x00000000, 0x00000001, 0x00000003, 0x00000007, 0x0000000F, 0x0000001F,
0x0000003F, 0x0000007F, 0x000000FF, 0x000001FF, 0x000003FF, 0x000007FF,
0x00000FFF, 0x00001FFF, 0x00003FFF, 0x00007FFF, 0x0000FFFF, 0x0001FFFF,
0x0003FFFF, 0x0007FFFF, 0x000FFFFF, 0x001FFFFF, 0x003FFFFF, 0x007FFFFF,
0x00FFFFFF, 0x01FFFFFF, 0x03FFFFFF, 0x07FFFFFF, 0x0FFFFFFF, 0x1FFFFFFF,
0x3FFFFFFF, 0x7FFFFFFF,
};
const uint64_t wuffs_base__low_bits_mask__u64[64] = {
0x0000000000000000, 0x0000000000000001, 0x0000000000000003,
0x0000000000000007, 0x000000000000000F, 0x000000000000001F,
0x000000000000003F, 0x000000000000007F, 0x00000000000000FF,
0x00000000000001FF, 0x00000000000003FF, 0x00000000000007FF,
0x0000000000000FFF, 0x0000000000001FFF, 0x0000000000003FFF,
0x0000000000007FFF, 0x000000000000FFFF, 0x000000000001FFFF,
0x000000000003FFFF, 0x000000000007FFFF, 0x00000000000FFFFF,
0x00000000001FFFFF, 0x00000000003FFFFF, 0x00000000007FFFFF,
0x0000000000FFFFFF, 0x0000000001FFFFFF, 0x0000000003FFFFFF,
0x0000000007FFFFFF, 0x000000000FFFFFFF, 0x000000001FFFFFFF,
0x000000003FFFFFFF, 0x000000007FFFFFFF, 0x00000000FFFFFFFF,
0x00000001FFFFFFFF, 0x00000003FFFFFFFF, 0x00000007FFFFFFFF,
0x0000000FFFFFFFFF, 0x0000001FFFFFFFFF, 0x0000003FFFFFFFFF,
0x0000007FFFFFFFFF, 0x000000FFFFFFFFFF, 0x000001FFFFFFFFFF,
0x000003FFFFFFFFFF, 0x000007FFFFFFFFFF, 0x00000FFFFFFFFFFF,
0x00001FFFFFFFFFFF, 0x00003FFFFFFFFFFF, 0x00007FFFFFFFFFFF,
0x0000FFFFFFFFFFFF, 0x0001FFFFFFFFFFFF, 0x0003FFFFFFFFFFFF,
0x0007FFFFFFFFFFFF, 0x000FFFFFFFFFFFFF, 0x001FFFFFFFFFFFFF,
0x003FFFFFFFFFFFFF, 0x007FFFFFFFFFFFFF, 0x00FFFFFFFFFFFFFF,
0x01FFFFFFFFFFFFFF, 0x03FFFFFFFFFFFFFF, 0x07FFFFFFFFFFFFFF,
0x0FFFFFFFFFFFFFFF, 0x1FFFFFFFFFFFFFFF, 0x3FFFFFFFFFFFFFFF,
0x7FFFFFFFFFFFFFFF,
};
const uint32_t wuffs_base__pixel_format__bits_per_channel[16] = {
0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
0x08, 0x0A, 0x0C, 0x10, 0x18, 0x20, 0x30, 0x40,
};
const char wuffs_base__note__i_o_redirect[] = "@base: I/O redirect";
const char wuffs_base__note__end_of_data[] = "@base: end of data";
const char wuffs_base__note__metadata_reported[] = "@base: metadata reported";
const char wuffs_base__suspension__even_more_information[] = "$base: even more information";
const char wuffs_base__suspension__mispositioned_read[] = "$base: mispositioned read";
const char wuffs_base__suspension__mispositioned_write[] = "$base: mispositioned write";
const char wuffs_base__suspension__short_read[] = "$base: short read";
const char wuffs_base__suspension__short_write[] = "$base: short write";
const char wuffs_base__error__bad_i_o_position[] = "#base: bad I/O position";
const char wuffs_base__error__bad_argument_length_too_short[] = "#base: bad argument (length too short)";
const char wuffs_base__error__bad_argument[] = "#base: bad argument";
const char wuffs_base__error__bad_call_sequence[] = "#base: bad call sequence";
const char wuffs_base__error__bad_data[] = "#base: bad data";
const char wuffs_base__error__bad_receiver[] = "#base: bad receiver";
const char wuffs_base__error__bad_restart[] = "#base: bad restart";
const char wuffs_base__error__bad_sizeof_receiver[] = "#base: bad sizeof receiver";
const char wuffs_base__error__bad_vtable[] = "#base: bad vtable";
const char wuffs_base__error__bad_workbuf_length[] = "#base: bad workbuf length";
const char wuffs_base__error__bad_wuffs_version[] = "#base: bad wuffs version";
const char wuffs_base__error__cannot_return_a_suspension[] = "#base: cannot return a suspension";
const char wuffs_base__error__disabled_by_previous_error[] = "#base: disabled by previous error";
const char wuffs_base__error__initialize_falsely_claimed_already_zeroed[] = "#base: initialize falsely claimed already zeroed";
const char wuffs_base__error__initialize_not_called[] = "#base: initialize not called";
const char wuffs_base__error__interleaved_coroutine_calls[] = "#base: interleaved coroutine calls";
const char wuffs_base__error__no_more_information[] = "#base: no more information";
const char wuffs_base__error__not_enough_data[] = "#base: not enough data";
const char wuffs_base__error__out_of_bounds[] = "#base: out of bounds";
const char wuffs_base__error__unsupported_method[] = "#base: unsupported method";
const char wuffs_base__error__unsupported_option[] = "#base: unsupported option";
const char wuffs_base__error__unsupported_pixel_swizzler_option[] = "#base: unsupported pixel swizzler option";
const char wuffs_base__error__too_much_data[] = "#base: too much data";
const char wuffs_base__hasher_u32__vtable_name[] = "{vtable}wuffs_base__hasher_u32";
const char wuffs_base__image_decoder__vtable_name[] = "{vtable}wuffs_base__image_decoder";
const char wuffs_base__io_transformer__vtable_name[] = "{vtable}wuffs_base__io_transformer";
const char wuffs_base__token_decoder__vtable_name[] = "{vtable}wuffs_base__token_decoder";
#endif
#if !defined(WUFFS_CONFIG__MODULES) || defined(WUFFS_CONFIG__MODULE__BASE) || \
defined(WUFFS_CONFIG__MODULE__BASE__INTERFACES)
WUFFS_BASE__MAYBE_STATIC wuffs_base__empty_struct
wuffs_base__hasher_u32__set_quirk_enabled(
wuffs_base__hasher_u32* self,
uint32_t a_quirk,
bool a_enabled) {
if (!self) {
return wuffs_base__make_empty_struct();
}
if (self->private_impl.magic != WUFFS_BASE__MAGIC) {
return wuffs_base__make_empty_struct();
}
const wuffs_base__vtable* v = &self->private_impl.first_vtable;
int i;
for (i = 0; i < 63; i++) {
if (v->vtable_name == wuffs_base__hasher_u32__vtable_name) {
const wuffs_base__hasher_u32__func_ptrs* func_ptrs =
(const wuffs_base__hasher_u32__func_ptrs*)(v->function_pointers);
return (*func_ptrs->set_quirk_enabled)(self, a_quirk, a_enabled);
} else if (v->vtable_name == NULL) {
break;
}
v++;
}
return wuffs_base__make_empty_struct();
}
WUFFS_BASE__MAYBE_STATIC uint32_t
wuffs_base__hasher_u32__update_u32(
wuffs_base__hasher_u32* self,
wuffs_base__slice_u8 a_x) {
if (!self) {
return 0;
}
if (self->private_impl.magic != WUFFS_BASE__MAGIC) {
return 0;
}
const wuffs_base__vtable* v = &self->private_impl.first_vtable;
int i;
for (i = 0; i < 63; i++) {
if (v->vtable_name == wuffs_base__hasher_u32__vtable_name) {
const wuffs_base__hasher_u32__func_ptrs* func_ptrs =
(const wuffs_base__hasher_u32__func_ptrs*)(v->function_pointers);
return (*func_ptrs->update_u32)(self, a_x);
} else if (v->vtable_name == NULL) {
break;
}
v++;
}
return 0;
}
WUFFS_BASE__MAYBE_STATIC wuffs_base__status
wuffs_base__image_decoder__decode_frame(
wuffs_base__image_decoder* self,
wuffs_base__pixel_buffer* a_dst,
wuffs_base__io_buffer* a_src,
wuffs_base__pixel_blend a_blend,
wuffs_base__slice_u8 a_workbuf,
wuffs_base__decode_frame_options* a_opts) {
if (!self) {
return wuffs_base__make_status(wuffs_base__error__bad_receiver);
}
if (self->private_impl.magic != WUFFS_BASE__MAGIC) {
return wuffs_base__make_status(
(self->private_impl.magic == WUFFS_BASE__DISABLED)
? wuffs_base__error__disabled_by_previous_error
: wuffs_base__error__initialize_not_called);
}
const wuffs_base__vtable* v = &self->private_impl.first_vtable;
int i;
for (i = 0; i < 63; i++) {
if (v->vtable_name == wuffs_base__image_decoder__vtable_name) {
const wuffs_base__image_decoder__func_ptrs* func_ptrs =
(const wuffs_base__image_decoder__func_ptrs*)(v->function_pointers);
return (*func_ptrs->decode_frame)(self, a_dst, a_src, a_blend, a_workbuf, a_opts);
} else if (v->vtable_name == NULL) {
break;
}
v++;
}
return wuffs_base__make_status(wuffs_base__error__bad_vtable);
}
WUFFS_BASE__MAYBE_STATIC wuffs_base__status
wuffs_base__image_decoder__decode_frame_config(
wuffs_base__image_decoder* self,
wuffs_base__frame_config* a_dst,
wuffs_base__io_buffer* a_src) {
if (!self) {
return wuffs_base__make_status(wuffs_base__error__bad_receiver);
}
if (self->private_impl.magic != WUFFS_BASE__MAGIC) {
return wuffs_base__make_status(
(self->private_impl.magic == WUFFS_BASE__DISABLED)
? wuffs_base__error__disabled_by_previous_error
: wuffs_base__error__initialize_not_called);
}
const wuffs_base__vtable* v = &self->private_impl.first_vtable;
int i;
for (i = 0; i < 63; i++) {
if (v->vtable_name == wuffs_base__image_decoder__vtable_name) {
const wuffs_base__image_decoder__func_ptrs* func_ptrs =
(const wuffs_base__image_decoder__func_ptrs*)(v->function_pointers);
return (*func_ptrs->decode_frame_config)(self, a_dst, a_src);
} else if (v->vtable_name == NULL) {
break;
}
v++;
}
return wuffs_base__make_status(wuffs_base__error__bad_vtable);
}
WUFFS_BASE__MAYBE_STATIC wuffs_base__status
wuffs_base__image_decoder__decode_image_config(
wuffs_base__image_decoder* self,
wuffs_base__image_config* a_dst,
wuffs_base__io_buffer* a_src) {
if (!self) {
return wuffs_base__make_status(wuffs_base__error__bad_receiver);
}
if (self->private_impl.magic != WUFFS_BASE__MAGIC) {
return wuffs_base__make_status(
(self->private_impl.magic == WUFFS_BASE__DISABLED)
? wuffs_base__error__disabled_by_previous_error
: wuffs_base__error__initialize_not_called);
}
const wuffs_base__vtable* v = &self->private_impl.first_vtable;
int i;
for (i = 0; i < 63; i++) {
if (v->vtable_name == wuffs_base__image_decoder__vtable_name) {
const wuffs_base__image_decoder__func_ptrs* func_ptrs =
(const wuffs_base__image_decoder__func_ptrs*)(v->function_pointers);
return (*func_ptrs->decode_image_config)(self, a_dst, a_src);
} else if (v->vtable_name == NULL) {
break;
}
v++;
}
return wuffs_base__make_status(wuffs_base__error__bad_vtable);
}
WUFFS_BASE__MAYBE_STATIC wuffs_base__rect_ie_u32
wuffs_base__image_decoder__frame_dirty_rect(
const wuffs_base__image_decoder* self) {
if (!self) {
return wuffs_base__utility__empty_rect_ie_u32();
}
if ((self->private_impl.magic != WUFFS_BASE__MAGIC) &&
(self->private_impl.magic != WUFFS_BASE__DISABLED)) {
return wuffs_base__utility__empty_rect_ie_u32();
}
const wuffs_base__vtable* v = &self->private_impl.first_vtable;
int i;
for (i = 0; i < 63; i++) {
if (v->vtable_name == wuffs_base__image_decoder__vtable_name) {
const wuffs_base__image_decoder__func_ptrs* func_ptrs =
(const wuffs_base__image_decoder__func_ptrs*)(v->function_pointers);
return (*func_ptrs->frame_dirty_rect)(self);
} else if (v->vtable_name == NULL) {
break;
}
v++;
}
return wuffs_base__utility__empty_rect_ie_u32();
}
WUFFS_BASE__MAYBE_STATIC uint32_t
wuffs_base__image_decoder__num_animation_loops(
const wuffs_base__image_decoder* self) {
if (!self) {
return 0;
}
if ((self->private_impl.magic != WUFFS_BASE__MAGIC) &&
(self->private_impl.magic != WUFFS_BASE__DISABLED)) {
return 0;
}
const wuffs_base__vtable* v = &self->private_impl.first_vtable;
int i;
for (i = 0; i < 63; i++) {
if (v->vtable_name == wuffs_base__image_decoder__vtable_name) {
const wuffs_base__image_decoder__func_ptrs* func_ptrs =
(const wuffs_base__image_decoder__func_ptrs*)(v->function_pointers);
return (*func_ptrs->num_animation_loops)(self);
} else if (v->vtable_name == NULL) {
break;
}
v++;
}
return 0;
}
WUFFS_BASE__MAYBE_STATIC uint64_t
wuffs_base__image_decoder__num_decoded_frame_configs(
const wuffs_base__image_decoder* self) {
if (!self) {
return 0;
}
if ((self->private_impl.magic != WUFFS_BASE__MAGIC) &&
(self->private_impl.magic != WUFFS_BASE__DISABLED)) {
return 0;
}
const wuffs_base__vtable* v = &self->private_impl.first_vtable;
int i;
for (i = 0; i < 63; i++) {
if (v->vtable_name == wuffs_base__image_decoder__vtable_name) {
const wuffs_base__image_decoder__func_ptrs* func_ptrs =
(const wuffs_base__image_decoder__func_ptrs*)(v->function_pointers);
return (*func_ptrs->num_decoded_frame_configs)(self);
} else if (v->vtable_name == NULL) {
break;
}
v++;
}
return 0;
}
WUFFS_BASE__MAYBE_STATIC uint64_t
wuffs_base__image_decoder__num_decoded_frames(
const wuffs_base__image_decoder* self) {
if (!self) {
return 0;
}
if ((self->private_impl.magic != WUFFS_BASE__MAGIC) &&
(self->private_impl.magic != WUFFS_BASE__DISABLED)) {
return 0;
}
const wuffs_base__vtable* v = &self->private_impl.first_vtable;
int i;
for (i = 0; i < 63; i++) {
if (v->vtable_name == wuffs_base__image_decoder__vtable_name) {
const wuffs_base__image_decoder__func_ptrs* func_ptrs =
(const wuffs_base__image_decoder__func_ptrs*)(v->function_pointers);
return (*func_ptrs->num_decoded_frames)(self);
} else if (v->vtable_name == NULL) {
break;
}
v++;
}
return 0;
}
WUFFS_BASE__MAYBE_STATIC wuffs_base__status
wuffs_base__image_decoder__restart_frame(
wuffs_base__image_decoder* self,
uint64_t a_index,
uint64_t a_io_position) {
if (!self) {
return wuffs_base__make_status(wuffs_base__error__bad_receiver);
}
if (self->private_impl.magic != WUFFS_BASE__MAGIC) {
return wuffs_base__make_status(
(self->private_impl.magic == WUFFS_BASE__DISABLED)
? wuffs_base__error__disabled_by_previous_error
: wuffs_base__error__initialize_not_called);
}
const wuffs_base__vtable* v = &self->private_impl.first_vtable;
int i;
for (i = 0; i < 63; i++) {
if (v->vtable_name == wuffs_base__image_decoder__vtable_name) {
const wuffs_base__image_decoder__func_ptrs* func_ptrs =
(const wuffs_base__image_decoder__func_ptrs*)(v->function_pointers);
return (*func_ptrs->restart_frame)(self, a_index, a_io_position);
} else if (v->vtable_name == NULL) {
break;
}
v++;
}
return wuffs_base__make_status(wuffs_base__error__bad_vtable);
}
WUFFS_BASE__MAYBE_STATIC wuffs_base__empty_struct
wuffs_base__image_decoder__set_quirk_enabled(
wuffs_base__image_decoder* self,
uint32_t a_quirk,
bool a_enabled) {
if (!self) {
return wuffs_base__make_empty_struct();
}
if (self->private_impl.magic != WUFFS_BASE__MAGIC) {
return wuffs_base__make_empty_struct();
}
const wuffs_base__vtable* v = &self->private_impl.first_vtable;
int i;
for (i = 0; i < 63; i++) {
if (v->vtable_name == wuffs_base__image_decoder__vtable_name) {
const wuffs_base__image_decoder__func_ptrs* func_ptrs =
(const wuffs_base__image_decoder__func_ptrs*)(v->function_pointers);
return (*func_ptrs->set_quirk_enabled)(self, a_quirk, a_enabled);
} else if (v->vtable_name == NULL) {
break;
}
v++;
}
return wuffs_base__make_empty_struct();
}
WUFFS_BASE__MAYBE_STATIC wuffs_base__empty_struct
wuffs_base__image_decoder__set_report_metadata(
wuffs_base__image_decoder* self,
uint32_t a_fourcc,
bool a_report) {
if (!self) {
return wuffs_base__make_empty_struct();
}
if (self->private_impl.magic != WUFFS_BASE__MAGIC) {
return wuffs_base__make_empty_struct();
}
const wuffs_base__vtable* v = &self->private_impl.first_vtable;
int i;
for (i = 0; i < 63; i++) {
if (v->vtable_name == wuffs_base__image_decoder__vtable_name) {
const wuffs_base__image_decoder__func_ptrs* func_ptrs =
(const wuffs_base__image_decoder__func_ptrs*)(v->function_pointers);
return (*func_ptrs->set_report_metadata)(self, a_fourcc, a_report);
} else if (v->vtable_name == NULL) {
break;
}
v++;
}
return wuffs_base__make_empty_struct();
}
WUFFS_BASE__MAYBE_STATIC wuffs_base__status
wuffs_base__image_decoder__tell_me_more(
wuffs_base__image_decoder* self,
wuffs_base__io_buffer* a_dst,
wuffs_base__more_information* a_minfo,
wuffs_base__io_buffer* a_src) {
if (!self) {
return wuffs_base__make_status(wuffs_base__error__bad_receiver);
}
if (self->private_impl.magic != WUFFS_BASE__MAGIC) {
return wuffs_base__make_status(
(self->private_impl.magic == WUFFS_BASE__DISABLED)
? wuffs_base__error__disabled_by_previous_error
: wuffs_base__error__initialize_not_called);
}
const wuffs_base__vtable* v = &self->private_impl.first_vtable;
int i;
for (i = 0; i < 63; i++) {
if (v->vtable_name == wuffs_base__image_decoder__vtable_name) {
const wuffs_base__image_decoder__func_ptrs* func_ptrs =
(const wuffs_base__image_decoder__func_ptrs*)(v->function_pointers);
return (*func_ptrs->tell_me_more)(self, a_dst, a_minfo, a_src);
} else if (v->vtable_name == NULL) {
break;
}
v++;
}
return wuffs_base__make_status(wuffs_base__error__bad_vtable);
}
WUFFS_BASE__MAYBE_STATIC wuffs_base__range_ii_u64
wuffs_base__image_decoder__workbuf_len(
const wuffs_base__image_decoder* self) {
if (!self) {
return wuffs_base__utility__empty_range_ii_u64();
}
if ((self->private_impl.magic != WUFFS_BASE__MAGIC) &&
(self->private_impl.magic != WUFFS_BASE__DISABLED)) {
return wuffs_base__utility__empty_range_ii_u64();
}
const wuffs_base__vtable* v = &self->private_impl.first_vtable;
int i;
for (i = 0; i < 63; i++) {
if (v->vtable_name == wuffs_base__image_decoder__vtable_name) {
const wuffs_base__image_decoder__func_ptrs* func_ptrs =
(const wuffs_base__image_decoder__func_ptrs*)(v->function_pointers);
return (*func_ptrs->workbuf_len)(self);
} else if (v->vtable_name == NULL) {
break;
}
v++;
}
return wuffs_base__utility__empty_range_ii_u64();
}
WUFFS_BASE__MAYBE_STATIC wuffs_base__empty_struct
wuffs_base__io_transformer__set_quirk_enabled(
wuffs_base__io_transformer* self,
uint32_t a_quirk,
bool a_enabled) {
if (!self) {
return wuffs_base__make_empty_struct();
}
if (self->private_impl.magic != WUFFS_BASE__MAGIC) {
return wuffs_base__make_empty_struct();
}
const wuffs_base__vtable* v = &self->private_impl.first_vtable;
int i;
for (i = 0; i < 63; i++) {
if (v->vtable_name == wuffs_base__io_transformer__vtable_name) {
const wuffs_base__io_transformer__func_ptrs* func_ptrs =
(const wuffs_base__io_transformer__func_ptrs*)(v->function_pointers);
return (*func_ptrs->set_quirk_enabled)(self, a_quirk, a_enabled);
} else if (v->vtable_name == NULL) {
break;
}
v++;
}
return wuffs_base__make_empty_struct();
}
WUFFS_BASE__MAYBE_STATIC wuffs_base__status
wuffs_base__io_transformer__transform_io(
wuffs_base__io_transformer* self,
wuffs_base__io_buffer* a_dst,
wuffs_base__io_buffer* a_src,
wuffs_base__slice_u8 a_workbuf) {
if (!self) {
return wuffs_base__make_status(wuffs_base__error__bad_receiver);
}
if (self->private_impl.magic != WUFFS_BASE__MAGIC) {
return wuffs_base__make_status(
(self->private_impl.magic == WUFFS_BASE__DISABLED)
? wuffs_base__error__disabled_by_previous_error
: wuffs_base__error__initialize_not_called);
}
const wuffs_base__vtable* v = &self->private_impl.first_vtable;
int i;
for (i = 0; i < 63; i++) {
if (v->vtable_name == wuffs_base__io_transformer__vtable_name) {
const wuffs_base__io_transformer__func_ptrs* func_ptrs =
(const wuffs_base__io_transformer__func_ptrs*)(v->function_pointers);
return (*func_ptrs->transform_io)(self, a_dst, a_src, a_workbuf);
} else if (v->vtable_name == NULL) {
break;
}
v++;
}
return wuffs_base__make_status(wuffs_base__error__bad_vtable);
}
WUFFS_BASE__MAYBE_STATIC wuffs_base__range_ii_u64
wuffs_base__io_transformer__workbuf_len(
const wuffs_base__io_transformer* self) {
if (!self) {
return wuffs_base__utility__empty_range_ii_u64();
}
if ((self->private_impl.magic != WUFFS_BASE__MAGIC) &&
(self->private_impl.magic != WUFFS_BASE__DISABLED)) {
return wuffs_base__utility__empty_range_ii_u64();
}
const wuffs_base__vtable* v = &self->private_impl.first_vtable;
int i;
for (i = 0; i < 63; i++) {
if (v->vtable_name == wuffs_base__io_transformer__vtable_name) {
const wuffs_base__io_transformer__func_ptrs* func_ptrs =
(const wuffs_base__io_transformer__func_ptrs*)(v->function_pointers);
return (*func_ptrs->workbuf_len)(self);
} else if (v->vtable_name == NULL) {
break;
}
v++;
}
return wuffs_base__utility__empty_range_ii_u64();
}
WUFFS_BASE__MAYBE_STATIC wuffs_base__status
wuffs_base__token_decoder__decode_tokens(
wuffs_base__token_decoder* self,
wuffs_base__token_buffer* a_dst,
wuffs_base__io_buffer* a_src,
wuffs_base__slice_u8 a_workbuf) {
if (!self) {
return wuffs_base__make_status(wuffs_base__error__bad_receiver);
}
if (self->private_impl.magic != WUFFS_BASE__MAGIC) {
return wuffs_base__make_status(
(self->private_impl.magic == WUFFS_BASE__DISABLED)
? wuffs_base__error__disabled_by_previous_error
: wuffs_base__error__initialize_not_called);
}
const wuffs_base__vtable* v = &self->private_impl.first_vtable;
int i;
for (i = 0; i < 63; i++) {
if (v->vtable_name == wuffs_base__token_decoder__vtable_name) {
const wuffs_base__token_decoder__func_ptrs* func_ptrs =
(const wuffs_base__token_decoder__func_ptrs*)(v->function_pointers);
return (*func_ptrs->decode_tokens)(self, a_dst, a_src, a_workbuf);
} else if (v->vtable_name == NULL) {
break;
}
v++;
}
return wuffs_base__make_status(wuffs_base__error__bad_vtable);
}
WUFFS_BASE__MAYBE_STATIC wuffs_base__empty_struct
wuffs_base__token_decoder__set_quirk_enabled(
wuffs_base__token_decoder* self,
uint32_t a_quirk,
bool a_enabled) {
if (!self) {
return wuffs_base__make_empty_struct();
}
if (self->private_impl.magic != WUFFS_BASE__MAGIC) {
return wuffs_base__make_empty_struct();
}
const wuffs_base__vtable* v = &self->private_impl.first_vtable;
int i;
for (i = 0; i < 63; i++) {
if (v->vtable_name == wuffs_base__token_decoder__vtable_name) {
const wuffs_base__token_decoder__func_ptrs* func_ptrs =
(const wuffs_base__token_decoder__func_ptrs*)(v->function_pointers);
return (*func_ptrs->set_quirk_enabled)(self, a_quirk, a_enabled);
} else if (v->vtable_name == NULL) {
break;
}
v++;
}
return wuffs_base__make_empty_struct();
}
WUFFS_BASE__MAYBE_STATIC wuffs_base__range_ii_u64
wuffs_base__token_decoder__workbuf_len(
const wuffs_base__token_decoder* self) {
if (!self) {
return wuffs_base__utility__empty_range_ii_u64();
}
if ((self->private_impl.magic != WUFFS_BASE__MAGIC) &&
(self->private_impl.magic != WUFFS_BASE__DISABLED)) {
return wuffs_base__utility__empty_range_ii_u64();
}
const wuffs_base__vtable* v = &self->private_impl.first_vtable;
int i;
for (i = 0; i < 63; i++) {
if (v->vtable_name == wuffs_base__token_decoder__vtable_name) {
const wuffs_base__token_decoder__func_ptrs* func_ptrs =
(const wuffs_base__token_decoder__func_ptrs*)(v->function_pointers);
return (*func_ptrs->workbuf_len)(self);
} else if (v->vtable_name == NULL) {
break;
}
v++;
}
return wuffs_base__utility__empty_range_ii_u64();
}
#endif
#if !defined(WUFFS_CONFIG__MODULES) || defined(WUFFS_CONFIG__MODULE__BASE) || \
defined(WUFFS_CONFIG__MODULE__BASE__FLOATCONV)
static const uint16_t wuffs_base__private_implementation__hpd_left_shift[65] = {
0x0000, 0x0800, 0x0801, 0x0803, 0x1006, 0x1009, 0x100D, 0x1812, 0x1817,
0x181D, 0x2024, 0x202B, 0x2033, 0x203C, 0x2846, 0x2850, 0x285B, 0x3067,
0x3073, 0x3080, 0x388E, 0x389C, 0x38AB, 0x38BB, 0x40CC, 0x40DD, 0x40EF,
0x4902, 0x4915, 0x4929, 0x513E, 0x5153, 0x5169, 0x5180, 0x5998, 0x59B0,
0x59C9, 0x61E3, 0x61FD, 0x6218, 0x6A34, 0x6A50, 0x6A6D, 0x6A8B, 0x72AA,
0x72C9, 0x72E9, 0x7B0A, 0x7B2B, 0x7B4D, 0x8370, 0x8393, 0x83B7, 0x83DC,
0x8C02, 0x8C28, 0x8C4F, 0x9477, 0x949F, 0x94C8, 0x9CF2, 0x051C, 0x051C,
0x051C, 0x051C,
};
static const uint8_t wuffs_base__private_implementation__powers_of_5[0x051C] = {
5, 2, 5, 1, 2, 5, 6, 2, 5, 3, 1, 2, 5, 1, 5, 6, 2, 5, 7, 8, 1, 2, 5, 3, 9,
0, 6, 2, 5, 1, 9, 5, 3, 1, 2, 5, 9, 7, 6, 5, 6, 2, 5, 4, 8, 8, 2, 8, 1, 2,
5, 2, 4, 4, 1, 4, 0, 6, 2, 5, 1, 2, 2, 0, 7, 0, 3, 1, 2, 5, 6, 1, 0, 3, 5,
1, 5, 6, 2, 5, 3, 0, 5, 1, 7, 5, 7, 8, 1, 2, 5, 1, 5, 2, 5, 8, 7, 8, 9, 0,
6, 2, 5, 7, 6, 2, 9, 3, 9, 4, 5, 3, 1, 2, 5, 3, 8, 1, 4, 6, 9, 7, 2, 6, 5,
6, 2, 5, 1, 9, 0, 7, 3, 4, 8, 6, 3, 2, 8, 1, 2, 5, 9, 5, 3, 6, 7, 4, 3, 1,
6, 4, 0, 6, 2, 5, 4, 7, 6, 8, 3, 7, 1, 5, 8, 2, 0, 3, 1, 2, 5, 2, 3, 8, 4,
1, 8, 5, 7, 9, 1, 0, 1, 5, 6, 2, 5, 1, 1, 9, 2, 0, 9, 2, 8, 9, 5, 5, 0, 7,
8, 1, 2, 5, 5, 9, 6, 0, 4, 6, 4, 4, 7, 7, 5, 3, 9, 0, 6, 2, 5, 2, 9, 8, 0,
2, 3, 2, 2, 3, 8, 7, 6, 9, 5, 3, 1, 2, 5, 1, 4, 9, 0, 1, 1, 6, 1, 1, 9, 3,
8, 4, 7, 6, 5, 6, 2, 5, 7, 4, 5, 0, 5, 8, 0, 5, 9, 6, 9, 2, 3, 8, 2, 8, 1,
2, 5, 3, 7, 2, 5, 2, 9, 0, 2, 9, 8, 4, 6, 1, 9, 1, 4, 0, 6, 2, 5, 1, 8, 6,
2, 6, 4, 5, 1, 4, 9, 2, 3, 0, 9, 5, 7, 0, 3, 1, 2, 5, 9, 3, 1, 3, 2, 2, 5,
7, 4, 6, 1, 5, 4, 7, 8, 5, 1, 5, 6, 2, 5, 4, 6, 5, 6, 6, 1, 2, 8, 7, 3, 0,
7, 7, 3, 9, 2, 5, 7, 8, 1, 2, 5, 2, 3, 2, 8, 3, 0, 6, 4, 3, 6, 5, 3, 8, 6,
9, 6, 2, 8, 9, 0, 6, 2, 5, 1, 1, 6, 4, 1, 5, 3, 2, 1, 8, 2, 6, 9, 3, 4, 8,
1, 4, 4, 5, 3, 1, 2, 5, 5, 8, 2, 0, 7, 6, 6, 0, 9, 1, 3, 4, 6, 7, 4, 0, 7,
2, 2, 6, 5, 6, 2, 5, 2, 9, 1, 0, 3, 8, 3, 0, 4, 5, 6, 7, 3, 3, 7, 0, 3, 6,
1, 3, 2, 8, 1, 2, 5, 1, 4, 5, 5, 1, 9, 1, 5, 2, 2, 8, 3, 6, 6, 8, 5, 1, 8,
0, 6, 6, 4, 0, 6, 2, 5, 7, 2, 7, 5, 9, 5, 7, 6, 1, 4, 1, 8, 3, 4, 2, 5, 9,
0, 3, 3, 2, 0, 3, 1, 2, 5, 3, 6, 3, 7, 9, 7, 8, 8, 0, 7, 0, 9, 1, 7, 1, 2,
9, 5, 1, 6, 6, 0, 1, 5, 6, 2, 5, 1, 8, 1, 8, 9, 8, 9, 4, 0, 3, 5, 4, 5, 8,
5, 6, 4, 7, 5, 8, 3, 0, 0, 7, 8, 1, 2, 5, 9, 0, 9, 4, 9, 4, 7, 0, 1, 7, 7,
2, 9, 2, 8, 2, 3, 7, 9, 1, 5, 0, 3, 9, 0, 6, 2, 5, 4, 5, 4, 7, 4, 7, 3, 5,
0, 8, 8, 6, 4, 6, 4, 1, 1, 8, 9, 5, 7, 5, 1, 9, 5, 3, 1, 2, 5, 2, 2, 7, 3,
7, 3, 6, 7, 5, 4, 4, 3, 2, 3, 2, 0, 5, 9, 4, 7, 8, 7, 5, 9, 7, 6, 5, 6, 2,
5, 1, 1, 3, 6, 8, 6, 8, 3, 7, 7, 2, 1, 6, 1, 6, 0, 2, 9, 7, 3, 9, 3, 7, 9,
8, 8, 2, 8, 1, 2, 5, 5, 6, 8, 4, 3, 4, 1, 8, 8, 6, 0, 8, 0, 8, 0, 1, 4, 8,
6, 9, 6, 8, 9, 9, 4, 1, 4, 0, 6, 2, 5, 2, 8, 4, 2, 1, 7, 0, 9, 4, 3, 0, 4,
0, 4, 0, 0, 7, 4, 3, 4, 8, 4, 4, 9, 7, 0, 7, 0, 3, 1, 2, 5, 1, 4, 2, 1, 0,
8, 5, 4, 7, 1, 5, 2, 0, 2, 0, 0, 3, 7, 1, 7, 4, 2, 2, 4, 8, 5, 3, 5, 1, 5,
6, 2, 5, 7, 1, 0, 5, 4, 2, 7, 3, 5, 7, 6, 0, 1, 0, 0, 1, 8, 5, 8, 7, 1, 1,
2, 4, 2, 6, 7, 5, 7, 8, 1, 2, 5, 3, 5, 5, 2, 7, 1, 3, 6, 7, 8, 8, 0, 0, 5,
0, 0, 9, 2, 9, 3, 5, 5, 6, 2, 1, 3, 3, 7, 8, 9, 0, 6, 2, 5, 1, 7, 7, 6, 3,
5, 6, 8, 3, 9, 4, 0, 0, 2, 5, 0, 4, 6, 4, 6, 7, 7, 8, 1, 0, 6, 6, 8, 9, 4,
5, 3, 1, 2, 5, 8, 8, 8, 1, 7, 8, 4, 1, 9, 7, 0, 0, 1, 2, 5, 2, 3, 2, 3, 3,
8, 9, 0, 5, 3, 3, 4, 4, 7, 2, 6, 5, 6, 2, 5, 4, 4, 4, 0, 8, 9, 2, 0, 9, 8,
5, 0, 0, 6, 2, 6, 1, 6, 1, 6, 9, 4, 5, 2, 6, 6, 7, 2, 3, 6, 3, 2, 8, 1, 2,
5, 2, 2, 2, 0, 4, 4, 6, 0, 4, 9, 2, 5, 0, 3, 1, 3, 0, 8, 0, 8, 4, 7, 2, 6,
3, 3, 3, 6, 1, 8, 1, 6, 4, 0, 6, 2, 5, 1, 1, 1, 0, 2, 2, 3, 0, 2, 4, 6, 2,
5, 1, 5, 6, 5, 4, 0, 4, 2, 3, 6, 3, 1, 6, 6, 8, 0, 9, 0, 8, 2, 0, 3, 1, 2,
5, 5, 5, 5, 1, 1, 1, 5, 1, 2, 3, 1, 2, 5, 7, 8, 2, 7, 0, 2, 1, 1, 8, 1, 5,
8, 3, 4, 0, 4, 5, 4, 1, 0, 1, 5, 6, 2, 5, 2, 7, 7, 5, 5, 5, 7, 5, 6, 1, 5,
6, 2, 8, 9, 1, 3, 5, 1, 0, 5, 9, 0, 7, 9, 1, 7, 0, 2, 2, 7, 0, 5, 0, 7, 8,
1, 2, 5, 1, 3, 8, 7, 7, 7, 8, 7, 8, 0, 7, 8, 1, 4, 4, 5, 6, 7, 5, 5, 2, 9,
5, 3, 9, 5, 8, 5, 1, 1, 3, 5, 2, 5, 3, 9, 0, 6, 2, 5, 6, 9, 3, 8, 8, 9, 3,
9, 0, 3, 9, 0, 7, 2, 2, 8, 3, 7, 7, 6, 4, 7, 6, 9, 7, 9, 2, 5, 5, 6, 7, 6,
2, 6, 9, 5, 3, 1, 2, 5, 3, 4, 6, 9, 4, 4, 6, 9, 5, 1, 9, 5, 3, 6, 1, 4, 1,
8, 8, 8, 2, 3, 8, 4, 8, 9, 6, 2, 7, 8, 3, 8, 1, 3, 4, 7, 6, 5, 6, 2, 5, 1,
7, 3, 4, 7, 2, 3, 4, 7, 5, 9, 7, 6, 8, 0, 7, 0, 9, 4, 4, 1, 1, 9, 2, 4, 4,
8, 1, 3, 9, 1, 9, 0, 6, 7, 3, 8, 2, 8, 1, 2, 5, 8, 6, 7, 3, 6, 1, 7, 3, 7,
9, 8, 8, 4, 0, 3, 5, 4, 7, 2, 0, 5, 9, 6, 2, 2, 4, 0, 6, 9, 5, 9, 5, 3, 3,
6, 9, 1, 4, 0, 6, 2, 5,
};
static const uint64_t wuffs_base__private_implementation__powers_of_10[596][2] =
{
{0xA5D3B6D479F8E056, 0x8FD0C16206306BAB},
{0x8F48A4899877186C, 0xB3C4F1BA87BC8696},
{0x331ACDABFE94DE87, 0xE0B62E2929ABA83C},
{0x9FF0C08B7F1D0B14, 0x8C71DCD9BA0B4925},
{0x07ECF0AE5EE44DD9, 0xAF8E5410288E1B6F},
{0xC9E82CD9F69D6150, 0xDB71E91432B1A24A},
{0xBE311C083A225CD2, 0x892731AC9FAF056E},
{0x6DBD630A48AAF406, 0xAB70FE17C79AC6CA},
{0x092CBBCCDAD5B108, 0xD64D3D9DB981787D},
{0x25BBF56008C58EA5, 0x85F0468293F0EB4E},
{0xAF2AF2B80AF6F24E, 0xA76C582338ED2621},
{0x1AF5AF660DB4AEE1, 0xD1476E2C07286FAA},
{0x50D98D9FC890ED4D, 0x82CCA4DB847945CA},
{0xE50FF107BAB528A0, 0xA37FCE126597973C},
{0x1E53ED49A96272C8, 0xCC5FC196FEFD7D0C},
{0x25E8E89C13BB0F7A, 0xFF77B1FCBEBCDC4F},
{0x77B191618C54E9AC, 0x9FAACF3DF73609B1},
{0xD59DF5B9EF6A2417, 0xC795830D75038C1D},
{0x4B0573286B44AD1D, 0xF97AE3D0D2446F25},
{0x4EE367F9430AEC32, 0x9BECCE62836AC577},
{0x229C41F793CDA73F, 0xC2E801FB244576D5},
{0x6B43527578C1110F, 0xF3A20279ED56D48A},
{0x830A13896B78AAA9, 0x9845418C345644D6},
{0x23CC986BC656D553, 0xBE5691EF416BD60C},
{0x2CBFBE86B7EC8AA8, 0xEDEC366B11C6CB8F},
{0x7BF7D71432F3D6A9, 0x94B3A202EB1C3F39},
{0xDAF5CCD93FB0CC53, 0xB9E08A83A5E34F07},
{0xD1B3400F8F9CFF68, 0xE858AD248F5C22C9},
{0x23100809B9C21FA1, 0x91376C36D99995BE},
{0xABD40A0C2832A78A, 0xB58547448FFFFB2D},
{0x16C90C8F323F516C, 0xE2E69915B3FFF9F9},
{0xAE3DA7D97F6792E3, 0x8DD01FAD907FFC3B},
{0x99CD11CFDF41779C, 0xB1442798F49FFB4A},
{0x40405643D711D583, 0xDD95317F31C7FA1D},
{0x482835EA666B2572, 0x8A7D3EEF7F1CFC52},
{0xDA3243650005EECF, 0xAD1C8EAB5EE43B66},
{0x90BED43E40076A82, 0xD863B256369D4A40},
{0x5A7744A6E804A291, 0x873E4F75E2224E68},
{0x711515D0A205CB36, 0xA90DE3535AAAE202},
{0x0D5A5B44CA873E03, 0xD3515C2831559A83},
{0xE858790AFE9486C2, 0x8412D9991ED58091},
{0x626E974DBE39A872, 0xA5178FFF668AE0B6},
{0xFB0A3D212DC8128F, 0xCE5D73FF402D98E3},
{0x7CE66634BC9D0B99, 0x80FA687F881C7F8E},
{0x1C1FFFC1EBC44E80, 0xA139029F6A239F72},
{0xA327FFB266B56220, 0xC987434744AC874E},
{0x4BF1FF9F0062BAA8, 0xFBE9141915D7A922},
{0x6F773FC3603DB4A9, 0x9D71AC8FADA6C9B5},
{0xCB550FB4384D21D3, 0xC4CE17B399107C22},
{0x7E2A53A146606A48, 0xF6019DA07F549B2B},
{0x2EDA7444CBFC426D, 0x99C102844F94E0FB},
{0xFA911155FEFB5308, 0xC0314325637A1939},
{0x793555AB7EBA27CA, 0xF03D93EEBC589F88},
{0x4BC1558B2F3458DE, 0x96267C7535B763B5},
{0x9EB1AAEDFB016F16, 0xBBB01B9283253CA2},
{0x465E15A979C1CADC, 0xEA9C227723EE8BCB},
{0x0BFACD89EC191EC9, 0x92A1958A7675175F},
{0xCEF980EC671F667B, 0xB749FAED14125D36},
{0x82B7E12780E7401A, 0xE51C79A85916F484},
{0xD1B2ECB8B0908810, 0x8F31CC0937AE58D2},
{0x861FA7E6DCB4AA15, 0xB2FE3F0B8599EF07},
{0x67A791E093E1D49A, 0xDFBDCECE67006AC9},
{0xE0C8BB2C5C6D24E0, 0x8BD6A141006042BD},
{0x58FAE9F773886E18, 0xAECC49914078536D},
{0xAF39A475506A899E, 0xDA7F5BF590966848},
{0x6D8406C952429603, 0x888F99797A5E012D},
{0xC8E5087BA6D33B83, 0xAAB37FD7D8F58178},
{0xFB1E4A9A90880A64, 0xD5605FCDCF32E1D6},
{0x5CF2EEA09A55067F, 0x855C3BE0A17FCD26},
{0xF42FAA48C0EA481E, 0xA6B34AD8C9DFC06F},
{0xF13B94DAF124DA26, 0xD0601D8EFC57B08B},
{0x76C53D08D6B70858, 0x823C12795DB6CE57},
{0x54768C4B0C64CA6E, 0xA2CB1717B52481ED},
{0xA9942F5DCF7DFD09, 0xCB7DDCDDA26DA268},
{0xD3F93B35435D7C4C, 0xFE5D54150B090B02},
{0xC47BC5014A1A6DAF, 0x9EFA548D26E5A6E1},
{0x359AB6419CA1091B, 0xC6B8E9B0709F109A},
{0xC30163D203C94B62, 0xF867241C8CC6D4C0},
{0x79E0DE63425DCF1D, 0x9B407691D7FC44F8},
{0x985915FC12F542E4, 0xC21094364DFB5636},
{0x3E6F5B7B17B2939D, 0xF294B943E17A2BC4},
{0xA705992CEECF9C42, 0x979CF3CA6CEC5B5A},
{0x50C6FF782A838353, 0xBD8430BD08277231},
{0xA4F8BF5635246428, 0xECE53CEC4A314EBD},
{0x871B7795E136BE99, 0x940F4613AE5ED136},
{0x28E2557B59846E3F, 0xB913179899F68584},
{0x331AEADA2FE589CF, 0xE757DD7EC07426E5},
{0x3FF0D2C85DEF7621, 0x9096EA6F3848984F},
{0x0FED077A756B53A9, 0xB4BCA50B065ABE63},
{0xD3E8495912C62894, 0xE1EBCE4DC7F16DFB},
{0x64712DD7ABBBD95C, 0x8D3360F09CF6E4BD},
{0xBD8D794D96AACFB3, 0xB080392CC4349DEC},
{0xECF0D7A0FC5583A0, 0xDCA04777F541C567},
{0xF41686C49DB57244, 0x89E42CAAF9491B60},
{0x311C2875C522CED5, 0xAC5D37D5B79B6239},
{0x7D633293366B828B, 0xD77485CB25823AC7},
{0xAE5DFF9C02033197, 0x86A8D39EF77164BC},
{0xD9F57F830283FDFC, 0xA8530886B54DBDEB},
{0xD072DF63C324FD7B, 0xD267CAA862A12D66},
{0x4247CB9E59F71E6D, 0x8380DEA93DA4BC60},
{0x52D9BE85F074E608, 0xA46116538D0DEB78},
{0x67902E276C921F8B, 0xCD795BE870516656},
{0x00BA1CD8A3DB53B6, 0x806BD9714632DFF6},
{0x80E8A40ECCD228A4, 0xA086CFCD97BF97F3},
{0x6122CD128006B2CD, 0xC8A883C0FDAF7DF0},
{0x796B805720085F81, 0xFAD2A4B13D1B5D6C},
{0xCBE3303674053BB0, 0x9CC3A6EEC6311A63},
{0xBEDBFC4411068A9C, 0xC3F490AA77BD60FC},
{0xEE92FB5515482D44, 0xF4F1B4D515ACB93B},
{0x751BDD152D4D1C4A, 0x991711052D8BF3C5},
{0xD262D45A78A0635D, 0xBF5CD54678EEF0B6},
{0x86FB897116C87C34, 0xEF340A98172AACE4},
{0xD45D35E6AE3D4DA0, 0x9580869F0E7AAC0E},
{0x8974836059CCA109, 0xBAE0A846D2195712},
{0x2BD1A438703FC94B, 0xE998D258869FACD7},
{0x7B6306A34627DDCF, 0x91FF83775423CC06},
{0x1A3BC84C17B1D542, 0xB67F6455292CBF08},
{0x20CABA5F1D9E4A93, 0xE41F3D6A7377EECA},
{0x547EB47B7282EE9C, 0x8E938662882AF53E},
{0xE99E619A4F23AA43, 0xB23867FB2A35B28D},
{0x6405FA00E2EC94D4, 0xDEC681F9F4C31F31},
{0xDE83BC408DD3DD04, 0x8B3C113C38F9F37E},
{0x9624AB50B148D445, 0xAE0B158B4738705E},
{0x3BADD624DD9B0957, 0xD98DDAEE19068C76},
{0xE54CA5D70A80E5D6, 0x87F8A8D4CFA417C9},
{0x5E9FCF4CCD211F4C, 0xA9F6D30A038D1DBC},
{0x7647C3200069671F, 0xD47487CC8470652B},
{0x29ECD9F40041E073, 0x84C8D4DFD2C63F3B},
{0xF468107100525890, 0xA5FB0A17C777CF09},
{0x7182148D4066EEB4, 0xCF79CC9DB955C2CC},
{0xC6F14CD848405530, 0x81AC1FE293D599BF},
{0xB8ADA00E5A506A7C, 0xA21727DB38CB002F},
{0xA6D90811F0E4851C, 0xCA9CF1D206FDC03B},
{0x908F4A166D1DA663, 0xFD442E4688BD304A},
{0x9A598E4E043287FE, 0x9E4A9CEC15763E2E},
{0x40EFF1E1853F29FD, 0xC5DD44271AD3CDBA},
{0xD12BEE59E68EF47C, 0xF7549530E188C128},
{0x82BB74F8301958CE, 0x9A94DD3E8CF578B9},
{0xE36A52363C1FAF01, 0xC13A148E3032D6E7},
{0xDC44E6C3CB279AC1, 0xF18899B1BC3F8CA1},
{0x29AB103A5EF8C0B9, 0x96F5600F15A7B7E5},
{0x7415D448F6B6F0E7, 0xBCB2B812DB11A5DE},
{0x111B495B3464AD21, 0xEBDF661791D60F56},
{0xCAB10DD900BEEC34, 0x936B9FCEBB25C995},
{0x3D5D514F40EEA742, 0xB84687C269EF3BFB},
{0x0CB4A5A3112A5112, 0xE65829B3046B0AFA},
{0x47F0E785EABA72AB, 0x8FF71A0FE2C2E6DC},
{0x59ED216765690F56, 0xB3F4E093DB73A093},
{0x306869C13EC3532C, 0xE0F218B8D25088B8},
{0x1E414218C73A13FB, 0x8C974F7383725573},
{0xE5D1929EF90898FA, 0xAFBD2350644EEACF},
{0xDF45F746B74ABF39, 0xDBAC6C247D62A583},
{0x6B8BBA8C328EB783, 0x894BC396CE5DA772},
{0x066EA92F3F326564, 0xAB9EB47C81F5114F},
{0xC80A537B0EFEFEBD, 0xD686619BA27255A2},
{0xBD06742CE95F5F36, 0x8613FD0145877585},
{0x2C48113823B73704, 0xA798FC4196E952E7},
{0xF75A15862CA504C5, 0xD17F3B51FCA3A7A0},
{0x9A984D73DBE722FB, 0x82EF85133DE648C4},
{0xC13E60D0D2E0EBBA, 0xA3AB66580D5FDAF5},
{0x318DF905079926A8, 0xCC963FEE10B7D1B3},
{0xFDF17746497F7052, 0xFFBBCFE994E5C61F},
{0xFEB6EA8BEDEFA633, 0x9FD561F1FD0F9BD3},
{0xFE64A52EE96B8FC0, 0xC7CABA6E7C5382C8},
{0x3DFDCE7AA3C673B0, 0xF9BD690A1B68637B},
{0x06BEA10CA65C084E, 0x9C1661A651213E2D},
{0x486E494FCFF30A62, 0xC31BFA0FE5698DB8},
{0x5A89DBA3C3EFCCFA, 0xF3E2F893DEC3F126},
{0xF89629465A75E01C, 0x986DDB5C6B3A76B7},
{0xF6BBB397F1135823, 0xBE89523386091465},
{0x746AA07DED582E2C, 0xEE2BA6C0678B597F},
{0xA8C2A44EB4571CDC, 0x94DB483840B717EF},
{0x92F34D62616CE413, 0xBA121A4650E4DDEB},
{0x77B020BAF9C81D17, 0xE896A0D7E51E1566},
{0x0ACE1474DC1D122E, 0x915E2486EF32CD60},
{0x0D819992132456BA, 0xB5B5ADA8AAFF80B8},
{0x10E1FFF697ED6C69, 0xE3231912D5BF60E6},
{0xCA8D3FFA1EF463C1, 0x8DF5EFABC5979C8F},
{0xBD308FF8A6B17CB2, 0xB1736B96B6FD83B3},
{0xAC7CB3F6D05DDBDE, 0xDDD0467C64BCE4A0},
{0x6BCDF07A423AA96B, 0x8AA22C0DBEF60EE4},
{0x86C16C98D2C953C6, 0xAD4AB7112EB3929D},
{0xE871C7BF077BA8B7, 0xD89D64D57A607744},
{0x11471CD764AD4972, 0x87625F056C7C4A8B},
{0xD598E40D3DD89BCF, 0xA93AF6C6C79B5D2D},
{0x4AFF1D108D4EC2C3, 0xD389B47879823479},
{0xCEDF722A585139BA, 0x843610CB4BF160CB},
{0xC2974EB4EE658828, 0xA54394FE1EEDB8FE},
{0x733D226229FEEA32, 0xCE947A3DA6A9273E},
{0x0806357D5A3F525F, 0x811CCC668829B887},
{0xCA07C2DCB0CF26F7, 0xA163FF802A3426A8},
{0xFC89B393DD02F0B5, 0xC9BCFF6034C13052},
{0xBBAC2078D443ACE2, 0xFC2C3F3841F17C67},
{0xD54B944B84AA4C0D, 0x9D9BA7832936EDC0},
{0x0A9E795E65D4DF11, 0xC5029163F384A931},
{0x4D4617B5FF4A16D5, 0xF64335BCF065D37D},
{0x504BCED1BF8E4E45, 0x99EA0196163FA42E},
{0xE45EC2862F71E1D6, 0xC06481FB9BCF8D39},
{0x5D767327BB4E5A4C, 0xF07DA27A82C37088},
{0x3A6A07F8D510F86F, 0x964E858C91BA2655},
{0x890489F70A55368B, 0xBBE226EFB628AFEA},
{0x2B45AC74CCEA842E, 0xEADAB0ABA3B2DBE5},
{0x3B0B8BC90012929D, 0x92C8AE6B464FC96F},
{0x09CE6EBB40173744, 0xB77ADA0617E3BBCB},
{0xCC420A6A101D0515, 0xE55990879DDCAABD},
{0x9FA946824A12232D, 0x8F57FA54C2A9EAB6},
{0x47939822DC96ABF9, 0xB32DF8E9F3546564},
{0x59787E2B93BC56F7, 0xDFF9772470297EBD},
{0x57EB4EDB3C55B65A, 0x8BFBEA76C619EF36},
{0xEDE622920B6B23F1, 0xAEFAE51477A06B03},
{0xE95FAB368E45ECED, 0xDAB99E59958885C4},
{0x11DBCB0218EBB414, 0x88B402F7FD75539B},
{0xD652BDC29F26A119, 0xAAE103B5FCD2A881},
{0x4BE76D3346F0495F, 0xD59944A37C0752A2},
{0x6F70A4400C562DDB, 0x857FCAE62D8493A5},
{0xCB4CCD500F6BB952, 0xA6DFBD9FB8E5B88E},
{0x7E2000A41346A7A7, 0xD097AD07A71F26B2},
{0x8ED400668C0C28C8, 0x825ECC24C873782F},
{0x728900802F0F32FA, 0xA2F67F2DFA90563B},
{0x4F2B40A03AD2FFB9, 0xCBB41EF979346BCA},
{0xE2F610C84987BFA8, 0xFEA126B7D78186BC},
{0x0DD9CA7D2DF4D7C9, 0x9F24B832E6B0F436},
{0x91503D1C79720DBB, 0xC6EDE63FA05D3143},
{0x75A44C6397CE912A, 0xF8A95FCF88747D94},
{0xC986AFBE3EE11ABA, 0x9B69DBE1B548CE7C},
{0xFBE85BADCE996168, 0xC24452DA229B021B},
{0xFAE27299423FB9C3, 0xF2D56790AB41C2A2},
{0xDCCD879FC967D41A, 0x97C560BA6B0919A5},
{0x5400E987BBC1C920, 0xBDB6B8E905CB600F},
{0x290123E9AAB23B68, 0xED246723473E3813},
{0xF9A0B6720AAF6521, 0x9436C0760C86E30B},
{0xF808E40E8D5B3E69, 0xB94470938FA89BCE},
{0xB60B1D1230B20E04, 0xE7958CB87392C2C2},
{0xB1C6F22B5E6F48C2, 0x90BD77F3483BB9B9},
{0x1E38AEB6360B1AF3, 0xB4ECD5F01A4AA828},
{0x25C6DA63C38DE1B0, 0xE2280B6C20DD5232},
{0x579C487E5A38AD0E, 0x8D590723948A535F},
{0x2D835A9DF0C6D851, 0xB0AF48EC79ACE837},
{0xF8E431456CF88E65, 0xDCDB1B2798182244},
{0x1B8E9ECB641B58FF, 0x8A08F0F8BF0F156B},
{0xE272467E3D222F3F, 0xAC8B2D36EED2DAC5},
{0x5B0ED81DCC6ABB0F, 0xD7ADF884AA879177},
{0x98E947129FC2B4E9, 0x86CCBB52EA94BAEA},
{0x3F2398D747B36224, 0xA87FEA27A539E9A5},
{0x8EEC7F0D19A03AAD, 0xD29FE4B18E88640E},
{0x1953CF68300424AC, 0x83A3EEEEF9153E89},
{0x5FA8C3423C052DD7, 0xA48CEAAAB75A8E2B},
{0x3792F412CB06794D, 0xCDB02555653131B6},
{0xE2BBD88BBEE40BD0, 0x808E17555F3EBF11},
{0x5B6ACEAEAE9D0EC4, 0xA0B19D2AB70E6ED6},
{0xF245825A5A445275, 0xC8DE047564D20A8B},
{0xEED6E2F0F0D56712, 0xFB158592BE068D2E},
{0x55464DD69685606B, 0x9CED737BB6C4183D},
{0xAA97E14C3C26B886, 0xC428D05AA4751E4C},
{0xD53DD99F4B3066A8, 0xF53304714D9265DF},
{0xE546A8038EFE4029, 0x993FE2C6D07B7FAB},
{0xDE98520472BDD033, 0xBF8FDB78849A5F96},
{0x963E66858F6D4440, 0xEF73D256A5C0F77C},
{0xDDE7001379A44AA8, 0x95A8637627989AAD},
{0x5560C018580D5D52, 0xBB127C53B17EC159},
{0xAAB8F01E6E10B4A6, 0xE9D71B689DDE71AF},
{0xCAB3961304CA70E8, 0x9226712162AB070D},
{0x3D607B97C5FD0D22, 0xB6B00D69BB55C8D1},
{0x8CB89A7DB77C506A, 0xE45C10C42A2B3B05},
{0x77F3608E92ADB242, 0x8EB98A7A9A5B04E3},
{0x55F038B237591ED3, 0xB267ED1940F1C61C},
{0x6B6C46DEC52F6688, 0xDF01E85F912E37A3},
{0x2323AC4B3B3DA015, 0x8B61313BBABCE2C6},
{0xABEC975E0A0D081A, 0xAE397D8AA96C1B77},
{0x96E7BD358C904A21, 0xD9C7DCED53C72255},
{0x7E50D64177DA2E54, 0x881CEA14545C7575},
{0xDDE50BD1D5D0B9E9, 0xAA242499697392D2},
{0x955E4EC64B44E864, 0xD4AD2DBFC3D07787},
{0xBD5AF13BEF0B113E, 0x84EC3C97DA624AB4},
{0xECB1AD8AEACDD58E, 0xA6274BBDD0FADD61},
{0x67DE18EDA5814AF2, 0xCFB11EAD453994BA},
{0x80EACF948770CED7, 0x81CEB32C4B43FCF4},
{0xA1258379A94D028D, 0xA2425FF75E14FC31},
{0x096EE45813A04330, 0xCAD2F7F5359A3B3E},
{0x8BCA9D6E188853FC, 0xFD87B5F28300CA0D},
{0x775EA264CF55347D, 0x9E74D1B791E07E48},
{0x95364AFE032A819D, 0xC612062576589DDA},
{0x3A83DDBD83F52204, 0xF79687AED3EEC551},
{0xC4926A9672793542, 0x9ABE14CD44753B52},
{0x75B7053C0F178293, 0xC16D9A0095928A27},
{0x5324C68B12DD6338, 0xF1C90080BAF72CB1},
{0xD3F6FC16EBCA5E03, 0x971DA05074DA7BEE},
{0x88F4BB1CA6BCF584, 0xBCE5086492111AEA},
{0x2B31E9E3D06C32E5, 0xEC1E4A7DB69561A5},
{0x3AFF322E62439FCF, 0x9392EE8E921D5D07},
{0x09BEFEB9FAD487C2, 0xB877AA3236A4B449},
{0x4C2EBE687989A9B3, 0xE69594BEC44DE15B},
{0x0F9D37014BF60A10, 0x901D7CF73AB0ACD9},
{0x538484C19EF38C94, 0xB424DC35095CD80F},
{0x2865A5F206B06FB9, 0xE12E13424BB40E13},
{0xF93F87B7442E45D3, 0x8CBCCC096F5088CB},
{0xF78F69A51539D748, 0xAFEBFF0BCB24AAFE},
{0xB573440E5A884D1B, 0xDBE6FECEBDEDD5BE},
{0x31680A88F8953030, 0x89705F4136B4A597},
{0xFDC20D2B36BA7C3D, 0xABCC77118461CEFC},
{0x3D32907604691B4C, 0xD6BF94D5E57A42BC},
{0xA63F9A49C2C1B10F, 0x8637BD05AF6C69B5},
{0x0FCF80DC33721D53, 0xA7C5AC471B478423},
{0xD3C36113404EA4A8, 0xD1B71758E219652B},
{0x645A1CAC083126E9, 0x83126E978D4FDF3B},
{0x3D70A3D70A3D70A3, 0xA3D70A3D70A3D70A},
{0xCCCCCCCCCCCCCCCC, 0xCCCCCCCCCCCCCCCC},
{0x0000000000000000, 0x8000000000000000},
{0x0000000000000000, 0xA000000000000000},
{0x0000000000000000, 0xC800000000000000},
{0x0000000000000000, 0xFA00000000000000},
{0x0000000000000000, 0x9C40000000000000},
{0x0000000000000000, 0xC350000000000000},
{0x0000000000000000, 0xF424000000000000},
{0x0000000000000000, 0x9896800000000000},
{0x0000000000000000, 0xBEBC200000000000},
{0x0000000000000000, 0xEE6B280000000000},
{0x0000000000000000, 0x9502F90000000000},
{0x0000000000000000, 0xBA43B74000000000},
{0x0000000000000000, 0xE8D4A51000000000},
{0x0000000000000000, 0x9184E72A00000000},
{0x0000000000000000, 0xB5E620F480000000},
{0x0000000000000000, 0xE35FA931A0000000},
{0x0000000000000000, 0x8E1BC9BF04000000},
{0x0000000000000000, 0xB1A2BC2EC5000000},
{0x0000000000000000, 0xDE0B6B3A76400000},
{0x0000000000000000, 0x8AC7230489E80000},
{0x0000000000000000, 0xAD78EBC5AC620000},
{0x0000000000000000, 0xD8D726B7177A8000},
{0x0000000000000000, 0x878678326EAC9000},
{0x0000000000000000, 0xA968163F0A57B400},
{0x0000000000000000, 0xD3C21BCECCEDA100},
{0x0000000000000000, 0x84595161401484A0},
{0x0000000000000000, 0xA56FA5B99019A5C8},
{0x0000000000000000, 0xCECB8F27F4200F3A},
{0x4000000000000000, 0x813F3978F8940984},
{0x5000000000000000, 0xA18F07D736B90BE5},
{0xA400000000000000, 0xC9F2C9CD04674EDE},
{0x4D00000000000000, 0xFC6F7C4045812296},
{0xF020000000000000, 0x9DC5ADA82B70B59D},
{0x6C28000000000000, 0xC5371912364CE305},
{0xC732000000000000, 0xF684DF56C3E01BC6},
{0x3C7F400000000000, 0x9A130B963A6C115C},
{0x4B9F100000000000, 0xC097CE7BC90715B3},
{0x1E86D40000000000, 0xF0BDC21ABB48DB20},
{0x1314448000000000, 0x96769950B50D88F4},
{0x17D955A000000000, 0xBC143FA4E250EB31},
{0x5DCFAB0800000000, 0xEB194F8E1AE525FD},
{0x5AA1CAE500000000, 0x92EFD1B8D0CF37BE},
{0xF14A3D9E40000000, 0xB7ABC627050305AD},
{0x6D9CCD05D0000000, 0xE596B7B0C643C719},
{0xE4820023A2000000, 0x8F7E32CE7BEA5C6F},
{0xDDA2802C8A800000, 0xB35DBF821AE4F38B},
{0xD50B2037AD200000, 0xE0352F62A19E306E},
{0x4526F422CC340000, 0x8C213D9DA502DE45},
{0x9670B12B7F410000, 0xAF298D050E4395D6},
{0x3C0CDD765F114000, 0xDAF3F04651D47B4C},
{0xA5880A69FB6AC800, 0x88D8762BF324CD0F},
{0x8EEA0D047A457A00, 0xAB0E93B6EFEE0053},
{0x72A4904598D6D880, 0xD5D238A4ABE98068},
{0x47A6DA2B7F864750, 0x85A36366EB71F041},
{0x999090B65F67D924, 0xA70C3C40A64E6C51},
{0xFFF4B4E3F741CF6D, 0xD0CF4B50CFE20765},
{0xBFF8F10E7A8921A4, 0x82818F1281ED449F},
{0xAFF72D52192B6A0D, 0xA321F2D7226895C7},
{0x9BF4F8A69F764490, 0xCBEA6F8CEB02BB39},
{0x02F236D04753D5B4, 0xFEE50B7025C36A08},
{0x01D762422C946590, 0x9F4F2726179A2245},
{0x424D3AD2B7B97EF5, 0xC722F0EF9D80AAD6},
{0xD2E0898765A7DEB2, 0xF8EBAD2B84E0D58B},
{0x63CC55F49F88EB2F, 0x9B934C3B330C8577},
{0x3CBF6B71C76B25FB, 0xC2781F49FFCFA6D5},
{0x8BEF464E3945EF7A, 0xF316271C7FC3908A},
{0x97758BF0E3CBB5AC, 0x97EDD871CFDA3A56},
{0x3D52EEED1CBEA317, 0xBDE94E8E43D0C8EC},
{0x4CA7AAA863EE4BDD, 0xED63A231D4C4FB27},
{0x8FE8CAA93E74EF6A, 0x945E455F24FB1CF8},
{0xB3E2FD538E122B44, 0xB975D6B6EE39E436},
{0x60DBBCA87196B616, 0xE7D34C64A9C85D44},
{0xBC8955E946FE31CD, 0x90E40FBEEA1D3A4A},
{0x6BABAB6398BDBE41, 0xB51D13AEA4A488DD},
{0xC696963C7EED2DD1, 0xE264589A4DCDAB14},
{0xFC1E1DE5CF543CA2, 0x8D7EB76070A08AEC},
{0x3B25A55F43294BCB, 0xB0DE65388CC8ADA8},
{0x49EF0EB713F39EBE, 0xDD15FE86AFFAD912},
{0x6E3569326C784337, 0x8A2DBF142DFCC7AB},
{0x49C2C37F07965404, 0xACB92ED9397BF996},
{0xDC33745EC97BE906, 0xD7E77A8F87DAF7FB},
{0x69A028BB3DED71A3, 0x86F0AC99B4E8DAFD},
{0xC40832EA0D68CE0C, 0xA8ACD7C0222311BC},
{0xF50A3FA490C30190, 0xD2D80DB02AABD62B},
{0x792667C6DA79E0FA, 0x83C7088E1AAB65DB},
{0x577001B891185938, 0xA4B8CAB1A1563F52},
{0xED4C0226B55E6F86, 0xCDE6FD5E09ABCF26},
{0x544F8158315B05B4, 0x80B05E5AC60B6178},
{0x696361AE3DB1C721, 0xA0DC75F1778E39D6},
{0x03BC3A19CD1E38E9, 0xC913936DD571C84C},
{0x04AB48A04065C723, 0xFB5878494ACE3A5F},
{0x62EB0D64283F9C76, 0x9D174B2DCEC0E47B},
{0x3BA5D0BD324F8394, 0xC45D1DF942711D9A},
{0xCA8F44EC7EE36479, 0xF5746577930D6500},
{0x7E998B13CF4E1ECB, 0x9968BF6ABBE85F20},
{0x9E3FEDD8C321A67E, 0xBFC2EF456AE276E8},
{0xC5CFE94EF3EA101E, 0xEFB3AB16C59B14A2},
{0xBBA1F1D158724A12, 0x95D04AEE3B80ECE5},
{0x2A8A6E45AE8EDC97, 0xBB445DA9CA61281F},
{0xF52D09D71A3293BD, 0xEA1575143CF97226},
{0x593C2626705F9C56, 0x924D692CA61BE758},
{0x6F8B2FB00C77836C, 0xB6E0C377CFA2E12E},
{0x0B6DFB9C0F956447, 0xE498F455C38B997A},
{0x4724BD4189BD5EAC, 0x8EDF98B59A373FEC},
{0x58EDEC91EC2CB657, 0xB2977EE300C50FE7},
{0x2F2967B66737E3ED, 0xDF3D5E9BC0F653E1},
{0xBD79E0D20082EE74, 0x8B865B215899F46C},
{0xECD8590680A3AA11, 0xAE67F1E9AEC07187},
{0xE80E6F4820CC9495, 0xDA01EE641A708DE9},
{0x3109058D147FDCDD, 0x884134FE908658B2},
{0xBD4B46F0599FD415, 0xAA51823E34A7EEDE},
{0x6C9E18AC7007C91A, 0xD4E5E2CDC1D1EA96},
{0x03E2CF6BC604DDB0, 0x850FADC09923329E},
{0x84DB8346B786151C, 0xA6539930BF6BFF45},
{0xE612641865679A63, 0xCFE87F7CEF46FF16},
{0x4FCB7E8F3F60C07E, 0x81F14FAE158C5F6E},
{0xE3BE5E330F38F09D, 0xA26DA3999AEF7749},
{0x5CADF5BFD3072CC5, 0xCB090C8001AB551C},
{0x73D9732FC7C8F7F6, 0xFDCB4FA002162A63},
{0x2867E7FDDCDD9AFA, 0x9E9F11C4014DDA7E},
{0xB281E1FD541501B8, 0xC646D63501A1511D},
{0x1F225A7CA91A4226, 0xF7D88BC24209A565},
{0x3375788DE9B06958, 0x9AE757596946075F},
{0x0052D6B1641C83AE, 0xC1A12D2FC3978937},
{0xC0678C5DBD23A49A, 0xF209787BB47D6B84},
{0xF840B7BA963646E0, 0x9745EB4D50CE6332},
{0xB650E5A93BC3D898, 0xBD176620A501FBFF},
{0xA3E51F138AB4CEBE, 0xEC5D3FA8CE427AFF},
{0xC66F336C36B10137, 0x93BA47C980E98CDF},
{0xB80B0047445D4184, 0xB8A8D9BBE123F017},
{0xA60DC059157491E5, 0xE6D3102AD96CEC1D},
{0x87C89837AD68DB2F, 0x9043EA1AC7E41392},
{0x29BABE4598C311FB, 0xB454E4A179DD1877},
{0xF4296DD6FEF3D67A, 0xE16A1DC9D8545E94},
{0x1899E4A65F58660C, 0x8CE2529E2734BB1D},
{0x5EC05DCFF72E7F8F, 0xB01AE745B101E9E4},
{0x76707543F4FA1F73, 0xDC21A1171D42645D},
{0x6A06494A791C53A8, 0x899504AE72497EBA},
{0x0487DB9D17636892, 0xABFA45DA0EDBDE69},
{0x45A9D2845D3C42B6, 0xD6F8D7509292D603},
{0x0B8A2392BA45A9B2, 0x865B86925B9BC5C2},
{0x8E6CAC7768D7141E, 0xA7F26836F282B732},
{0x3207D795430CD926, 0xD1EF0244AF2364FF},
{0x7F44E6BD49E807B8, 0x8335616AED761F1F},
{0x5F16206C9C6209A6, 0xA402B9C5A8D3A6E7},
{0x36DBA887C37A8C0F, 0xCD036837130890A1},
{0xC2494954DA2C9789, 0x802221226BE55A64},
{0xF2DB9BAA10B7BD6C, 0xA02AA96B06DEB0FD},
{0x6F92829494E5ACC7, 0xC83553C5C8965D3D},
{0xCB772339BA1F17F9, 0xFA42A8B73ABBF48C},
{0xFF2A760414536EFB, 0x9C69A97284B578D7},
{0xFEF5138519684ABA, 0xC38413CF25E2D70D},
{0x7EB258665FC25D69, 0xF46518C2EF5B8CD1},
{0xEF2F773FFBD97A61, 0x98BF2F79D5993802},
{0xAAFB550FFACFD8FA, 0xBEEEFB584AFF8603},
{0x95BA2A53F983CF38, 0xEEAABA2E5DBF6784},
{0xDD945A747BF26183, 0x952AB45CFA97A0B2},
{0x94F971119AEEF9E4, 0xBA756174393D88DF},
{0x7A37CD5601AAB85D, 0xE912B9D1478CEB17},
{0xAC62E055C10AB33A, 0x91ABB422CCB812EE},
{0x577B986B314D6009, 0xB616A12B7FE617AA},
{0xED5A7E85FDA0B80B, 0xE39C49765FDF9D94},
{0x14588F13BE847307, 0x8E41ADE9FBEBC27D},
{0x596EB2D8AE258FC8, 0xB1D219647AE6B31C},
{0x6FCA5F8ED9AEF3BB, 0xDE469FBD99A05FE3},
{0x25DE7BB9480D5854, 0x8AEC23D680043BEE},
{0xAF561AA79A10AE6A, 0xADA72CCC20054AE9},
{0x1B2BA1518094DA04, 0xD910F7FF28069DA4},
{0x90FB44D2F05D0842, 0x87AA9AFF79042286},
{0x353A1607AC744A53, 0xA99541BF57452B28},
{0x42889B8997915CE8, 0xD3FA922F2D1675F2},
{0x69956135FEBADA11, 0x847C9B5D7C2E09B7},
{0x43FAB9837E699095, 0xA59BC234DB398C25},
{0x94F967E45E03F4BB, 0xCF02B2C21207EF2E},
{0x1D1BE0EEBAC278F5, 0x8161AFB94B44F57D},
{0x6462D92A69731732, 0xA1BA1BA79E1632DC},
{0x7D7B8F7503CFDCFE, 0xCA28A291859BBF93},
{0x5CDA735244C3D43E, 0xFCB2CB35E702AF78},
{0x3A0888136AFA64A7, 0x9DEFBF01B061ADAB},
{0x088AAA1845B8FDD0, 0xC56BAEC21C7A1916},
{0x8AAD549E57273D45, 0xF6C69A72A3989F5B},
{0x36AC54E2F678864B, 0x9A3C2087A63F6399},
{0x84576A1BB416A7DD, 0xC0CB28A98FCF3C7F},
{0x656D44A2A11C51D5, 0xF0FDF2D3F3C30B9F},
{0x9F644AE5A4B1B325, 0x969EB7C47859E743},
{0x873D5D9F0DDE1FEE, 0xBC4665B596706114},
{0xA90CB506D155A7EA, 0xEB57FF22FC0C7959},
{0x09A7F12442D588F2, 0x9316FF75DD87CBD8},
{0x0C11ED6D538AEB2F, 0xB7DCBF5354E9BECE},
{0x8F1668C8A86DA5FA, 0xE5D3EF282A242E81},
{0xF96E017D694487BC, 0x8FA475791A569D10},
{0x37C981DCC395A9AC, 0xB38D92D760EC4455},
{0x85BBE253F47B1417, 0xE070F78D3927556A},
{0x93956D7478CCEC8E, 0x8C469AB843B89562},
{0x387AC8D1970027B2, 0xAF58416654A6BABB},
{0x06997B05FCC0319E, 0xDB2E51BFE9D0696A},
{0x441FECE3BDF81F03, 0x88FCF317F22241E2},
{0xD527E81CAD7626C3, 0xAB3C2FDDEEAAD25A},
{0x8A71E223D8D3B074, 0xD60B3BD56A5586F1},
{0xF6872D5667844E49, 0x85C7056562757456},
{0xB428F8AC016561DB, 0xA738C6BEBB12D16C},
{0xE13336D701BEBA52, 0xD106F86E69D785C7},
{0xECC0024661173473, 0x82A45B450226B39C},
{0x27F002D7F95D0190, 0xA34D721642B06084},
{0x31EC038DF7B441F4, 0xCC20CE9BD35C78A5},
{0x7E67047175A15271, 0xFF290242C83396CE},
{0x0F0062C6E984D386, 0x9F79A169BD203E41},
{0x52C07B78A3E60868, 0xC75809C42C684DD1},
{0xA7709A56CCDF8A82, 0xF92E0C3537826145},
{0x88A66076400BB691, 0x9BBCC7A142B17CCB},
{0x6ACFF893D00EA435, 0xC2ABF989935DDBFE},
{0x0583F6B8C4124D43, 0xF356F7EBF83552FE},
{0xC3727A337A8B704A, 0x98165AF37B2153DE},
{0x744F18C0592E4C5C, 0xBE1BF1B059E9A8D6},
{0x1162DEF06F79DF73, 0xEDA2EE1C7064130C},
{0x8ADDCB5645AC2BA8, 0x9485D4D1C63E8BE7},
{0x6D953E2BD7173692, 0xB9A74A0637CE2EE1},
{0xC8FA8DB6CCDD0437, 0xE8111C87C5C1BA99},
{0x1D9C9892400A22A2, 0x910AB1D4DB9914A0},
{0x2503BEB6D00CAB4B, 0xB54D5E4A127F59C8},
{0x2E44AE64840FD61D, 0xE2A0B5DC971F303A},
{0x5CEAECFED289E5D2, 0x8DA471A9DE737E24},
{0x7425A83E872C5F47, 0xB10D8E1456105DAD},
{0xD12F124E28F77719, 0xDD50F1996B947518},
{0x82BD6B70D99AAA6F, 0x8A5296FFE33CC92F},
{0x636CC64D1001550B, 0xACE73CBFDC0BFB7B},
{0x3C47F7E05401AA4E, 0xD8210BEFD30EFA5A},
{0x65ACFAEC34810A71, 0x8714A775E3E95C78},
{0x7F1839A741A14D0D, 0xA8D9D1535CE3B396},
{0x1EDE48111209A050, 0xD31045A8341CA07C},
{0x934AED0AAB460432, 0x83EA2B892091E44D},
{0xF81DA84D5617853F, 0xA4E4B66B68B65D60},
{0x36251260AB9D668E, 0xCE1DE40642E3F4B9},
{0xC1D72B7C6B426019, 0x80D2AE83E9CE78F3},
{0xB24CF65B8612F81F, 0xA1075A24E4421730},
{0xDEE033F26797B627, 0xC94930AE1D529CFC},
{0x169840EF017DA3B1, 0xFB9B7CD9A4A7443C},
{0x8E1F289560EE864E, 0x9D412E0806E88AA5},
{0xF1A6F2BAB92A27E2, 0xC491798A08A2AD4E},
{0xAE10AF696774B1DB, 0xF5B5D7EC8ACB58A2},
{0xACCA6DA1E0A8EF29, 0x9991A6F3D6BF1765},
{0x17FD090A58D32AF3, 0xBFF610B0CC6EDD3F},
{0xDDFC4B4CEF07F5B0, 0xEFF394DCFF8A948E},
{0x4ABDAF101564F98E, 0x95F83D0A1FB69CD9},
{0x9D6D1AD41ABE37F1, 0xBB764C4CA7A4440F},
{0x84C86189216DC5ED, 0xEA53DF5FD18D5513},
{0x32FD3CF5B4E49BB4, 0x92746B9BE2F8552C},
{0x3FBC8C33221DC2A1, 0xB7118682DBB66A77},
{0x0FABAF3FEAA5334A, 0xE4D5E82392A40515},
{0x29CB4D87F2A7400E, 0x8F05B1163BA6832D},
{0x743E20E9EF511012, 0xB2C71D5BCA9023F8},
{0x914DA9246B255416, 0xDF78E4B2BD342CF6},
{0x1AD089B6C2F7548E, 0x8BAB8EEFB6409C1A},
{0xA184AC2473B529B1, 0xAE9672ABA3D0C320},
{0xC9E5D72D90A2741E, 0xDA3C0F568CC4F3E8},
{0x7E2FA67C7A658892, 0x8865899617FB1871},
{0xDDBB901B98FEEAB7, 0xAA7EEBFB9DF9DE8D},
{0x552A74227F3EA565, 0xD51EA6FA85785631},
{0xD53A88958F87275F, 0x8533285C936B35DE},
{0x8A892ABAF368F137, 0xA67FF273B8460356},
{0x2D2B7569B0432D85, 0xD01FEF10A657842C},
{0x9C3B29620E29FC73, 0x8213F56A67F6B29B},
{0x8349F3BA91B47B8F, 0xA298F2C501F45F42},
{0x241C70A936219A73, 0xCB3F2F7642717713},
{0xED238CD383AA0110, 0xFE0EFB53D30DD4D7},
{0xF4363804324A40AA, 0x9EC95D1463E8A506},
{0xB143C6053EDCD0D5, 0xC67BB4597CE2CE48},
{0xDD94B7868E94050A, 0xF81AA16FDC1B81DA},
{0xCA7CF2B4191C8326, 0x9B10A4E5E9913128},
{0xFD1C2F611F63A3F0, 0xC1D4CE1F63F57D72},
{0xBC633B39673C8CEC, 0xF24A01A73CF2DCCF},
{0xD5BE0503E085D813, 0x976E41088617CA01},
{0x4B2D8644D8A74E18, 0xBD49D14AA79DBC82},
{0xDDF8E7D60ED1219E, 0xEC9C459D51852BA2},
{0xCABB90E5C942B503, 0x93E1AB8252F33B45},
{0x3D6A751F3B936243, 0xB8DA1662E7B00A17},
{0x0CC512670A783AD4, 0xE7109BFBA19C0C9D},
{0x27FB2B80668B24C5, 0x906A617D450187E2},
{0xB1F9F660802DEDF6, 0xB484F9DC9641E9DA},
{0x5E7873F8A0396973, 0xE1A63853BBD26451},
{0xDB0B487B6423E1E8, 0x8D07E33455637EB2},
{0x91CE1A9A3D2CDA62, 0xB049DC016ABC5E5F},
{0x7641A140CC7810FB, 0xDC5C5301C56B75F7},
{0xA9E904C87FCB0A9D, 0x89B9B3E11B6329BA},
{0x546345FA9FBDCD44, 0xAC2820D9623BF429},
{0xA97C177947AD4095, 0xD732290FBACAF133},
{0x49ED8EABCCCC485D, 0x867F59A9D4BED6C0},
{0x5C68F256BFFF5A74, 0xA81F301449EE8C70},
{0x73832EEC6FFF3111, 0xD226FC195C6A2F8C},
};
static const double wuffs_base__private_implementation__f64_powers_of_10[23] = {
1e0, 1e1, 1e2, 1e3, 1e4, 1e5, 1e6, 1e7, 1e8, 1e9, 1e10, 1e11,
1e12, 1e13, 1e14, 1e15, 1e16, 1e17, 1e18, 1e19, 1e20, 1e21, 1e22,
};
WUFFS_BASE__MAYBE_STATIC wuffs_base__lossy_value_u16
wuffs_base__ieee_754_bit_representation__from_f64_to_u16_truncate(double f) {
uint64_t u = 0;
if (sizeof(uint64_t) == sizeof(double)) {
memcpy(&u, &f, sizeof(uint64_t));
}
uint16_t neg = ((uint16_t)((u >> 63) << 15));
u &= 0x7FFFFFFFFFFFFFFF;
uint64_t exp = u >> 52;
uint64_t man = u & 0x000FFFFFFFFFFFFF;
if (exp == 0x7FF) {
if (man == 0) {
wuffs_base__lossy_value_u16 ret;
ret.value = neg | 0x7C00;
ret.lossy = false;
return ret;
}
wuffs_base__lossy_value_u16 ret;
ret.value = neg | 0x7DFF | ((uint16_t)(man >> 42));
ret.lossy = false;
return ret;
} else if (exp > 0x40E) {
wuffs_base__lossy_value_u16 ret;
ret.value = neg | 0x7BFF;
ret.lossy = true;
return ret;
} else if (exp <= 0x3E6) {
wuffs_base__lossy_value_u16 ret;
ret.value = neg;
ret.lossy = (u != 0);
return ret;
} else if (exp <= 0x3F0) {
man |= 0x0010000000000000;
uint32_t shift = ((uint32_t)(1051 - exp));
uint64_t shifted_man = man >> shift;
wuffs_base__lossy_value_u16 ret;
ret.value = neg | ((uint16_t)shifted_man);
ret.lossy = (shifted_man << shift) != man;
return ret;
}
exp = (exp - 1008) << 10;
wuffs_base__lossy_value_u16 ret;
ret.value = neg | ((uint16_t)exp) | ((uint16_t)(man >> 42));
ret.lossy = (man << 22) != 0;
return ret;
}
WUFFS_BASE__MAYBE_STATIC wuffs_base__lossy_value_u32
wuffs_base__ieee_754_bit_representation__from_f64_to_u32_truncate(double f) {
uint64_t u = 0;
if (sizeof(uint64_t) == sizeof(double)) {
memcpy(&u, &f, sizeof(uint64_t));
}
uint32_t neg = ((uint32_t)(u >> 63)) << 31;
u &= 0x7FFFFFFFFFFFFFFF;
uint64_t exp = u >> 52;
uint64_t man = u & 0x000FFFFFFFFFFFFF;
if (exp == 0x7FF) {
if (man == 0) {
wuffs_base__lossy_value_u32 ret;
ret.value = neg | 0x7F800000;
ret.lossy = false;
return ret;
}
wuffs_base__lossy_value_u32 ret;
ret.value = neg | 0x7FBFFFFF | ((uint32_t)(man >> 29));
ret.lossy = false;
return ret;
} else if (exp > 0x47E) {
wuffs_base__lossy_value_u32 ret;
ret.value = neg | 0x7F7FFFFF;
ret.lossy = true;
return ret;
} else if (exp <= 0x369) {
wuffs_base__lossy_value_u32 ret;
ret.value = neg;
ret.lossy = (u != 0);
return ret;
} else if (exp <= 0x380) {
man |= 0x0010000000000000;
uint32_t shift = ((uint32_t)(926 - exp));
uint64_t shifted_man = man >> shift;
wuffs_base__lossy_value_u32 ret;
ret.value = neg | ((uint32_t)shifted_man);
ret.lossy = (shifted_man << shift) != man;
return ret;
}
exp = (exp - 896) << 23;
wuffs_base__lossy_value_u32 ret;
ret.value = neg | ((uint32_t)exp) | ((uint32_t)(man >> 29));
ret.lossy = (man << 35) != 0;
return ret;
}
#define WUFFS_BASE__PRIVATE_IMPLEMENTATION__HPD__DECIMAL_POINT__RANGE …
#define WUFFS_BASE__PRIVATE_IMPLEMENTATION__HPD__DIGITS_PRECISION …
#define WUFFS_BASE__PRIVATE_IMPLEMENTATION__HPD__SHIFT__MAX_INCL …
typedef struct wuffs_base__private_implementation__high_prec_dec__struct {
uint32_t num_digits;
int32_t decimal_point;
bool negative;
bool truncated;
uint8_t digits[WUFFS_BASE__PRIVATE_IMPLEMENTATION__HPD__DIGITS_PRECISION];
} wuffs_base__private_implementation__high_prec_dec;
static inline void
wuffs_base__private_implementation__high_prec_dec__trim(
wuffs_base__private_implementation__high_prec_dec* h) {
while ((h->num_digits > 0) && (h->digits[h->num_digits - 1] == 0)) {
h->num_digits--;
}
}
static void
wuffs_base__private_implementation__high_prec_dec__assign(
wuffs_base__private_implementation__high_prec_dec* h,
uint64_t x,
bool negative) {
uint32_t n = 0;
if (x > 0) {
uint8_t buf[40] = {0};
uint8_t* ptr = &buf[20];
do {
uint64_t remaining = x / 10;
x -= remaining * 10;
ptr--;
*ptr = (uint8_t)x;
n++;
x = remaining;
} while (x > 0);
memcpy(h->digits, ptr, 20);
}
h->num_digits = n;
h->decimal_point = (int32_t)n;
h->negative = negative;
h->truncated = false;
wuffs_base__private_implementation__high_prec_dec__trim(h);
}
static wuffs_base__status
wuffs_base__private_implementation__high_prec_dec__parse(
wuffs_base__private_implementation__high_prec_dec* h,
wuffs_base__slice_u8 s,
uint32_t options) {
if (!h) {
return wuffs_base__make_status(wuffs_base__error__bad_receiver);
}
h->num_digits = 0;
h->decimal_point = 0;
h->negative = false;
h->truncated = false;
uint8_t* p = s.ptr;
uint8_t* q = s.ptr + s.len;
if (options & WUFFS_BASE__PARSE_NUMBER_XXX__ALLOW_UNDERSCORES) {
for (;; p++) {
if (p >= q) {
return wuffs_base__make_status(wuffs_base__error__bad_argument);
} else if (*p != '_') {
break;
}
}
}
do {
if (*p == '+') {
p++;
} else if (*p == '-') {
h->negative = true;
p++;
} else {
break;
}
if (options & WUFFS_BASE__PARSE_NUMBER_XXX__ALLOW_UNDERSCORES) {
for (;; p++) {
if (p >= q) {
return wuffs_base__make_status(wuffs_base__error__bad_argument);
} else if (*p != '_') {
break;
}
}
}
} while (0);
uint32_t nd = 0;
int32_t dp = 0;
bool no_digits_before_separator = false;
if (('0' == *p) &&
!(options &
WUFFS_BASE__PARSE_NUMBER_XXX__ALLOW_MULTIPLE_LEADING_ZEROES)) {
p++;
for (;; p++) {
if (p >= q) {
goto after_all;
} else if (*p ==
((options &
WUFFS_BASE__PARSE_NUMBER_FXX__DECIMAL_SEPARATOR_IS_A_COMMA)
? ','
: '.')) {
p++;
goto after_sep;
} else if ((*p == 'E') || (*p == 'e')) {
p++;
goto after_exp;
} else if ((*p != '_') ||
!(options & WUFFS_BASE__PARSE_NUMBER_XXX__ALLOW_UNDERSCORES)) {
return wuffs_base__make_status(wuffs_base__error__bad_argument);
}
}
} else if (('0' <= *p) && (*p <= '9')) {
if (*p == '0') {
for (; (p < q) && (*p == '0'); p++) {
}
} else {
h->digits[nd++] = (uint8_t)(*p - '0');
dp = (int32_t)nd;
p++;
}
for (;; p++) {
if (p >= q) {
goto after_all;
} else if (('0' <= *p) && (*p <= '9')) {
if (nd < WUFFS_BASE__PRIVATE_IMPLEMENTATION__HPD__DIGITS_PRECISION) {
h->digits[nd++] = (uint8_t)(*p - '0');
dp = (int32_t)nd;
} else if ('0' != *p) {
h->truncated = true;
}
} else if (*p ==
((options &
WUFFS_BASE__PARSE_NUMBER_FXX__DECIMAL_SEPARATOR_IS_A_COMMA)
? ','
: '.')) {
p++;
goto after_sep;
} else if ((*p == 'E') || (*p == 'e')) {
p++;
goto after_exp;
} else if ((*p != '_') ||
!(options & WUFFS_BASE__PARSE_NUMBER_XXX__ALLOW_UNDERSCORES)) {
return wuffs_base__make_status(wuffs_base__error__bad_argument);
}
}
} else if (*p == ((options &
WUFFS_BASE__PARSE_NUMBER_FXX__DECIMAL_SEPARATOR_IS_A_COMMA)
? ','
: '.')) {
p++;
no_digits_before_separator = true;
} else {
return wuffs_base__make_status(wuffs_base__error__bad_argument);
}
after_sep:
for (;; p++) {
if (p >= q) {
goto after_all;
} else if ('0' == *p) {
if (nd == 0) {
dp--;
} else if (nd <
WUFFS_BASE__PRIVATE_IMPLEMENTATION__HPD__DIGITS_PRECISION) {
h->digits[nd++] = (uint8_t)(*p - '0');
}
} else if (('0' < *p) && (*p <= '9')) {
if (nd < WUFFS_BASE__PRIVATE_IMPLEMENTATION__HPD__DIGITS_PRECISION) {
h->digits[nd++] = (uint8_t)(*p - '0');
} else {
h->truncated = true;
}
} else if ((*p == 'E') || (*p == 'e')) {
p++;
goto after_exp;
} else if ((*p != '_') ||
!(options & WUFFS_BASE__PARSE_NUMBER_XXX__ALLOW_UNDERSCORES)) {
return wuffs_base__make_status(wuffs_base__error__bad_argument);
}
}
after_exp:
do {
if (options & WUFFS_BASE__PARSE_NUMBER_XXX__ALLOW_UNDERSCORES) {
for (;; p++) {
if (p >= q) {
return wuffs_base__make_status(wuffs_base__error__bad_argument);
} else if (*p != '_') {
break;
}
}
}
int32_t exp_sign = +1;
if (*p == '+') {
p++;
} else if (*p == '-') {
exp_sign = -1;
p++;
}
int32_t exp = 0;
const int32_t exp_large =
WUFFS_BASE__PRIVATE_IMPLEMENTATION__HPD__DECIMAL_POINT__RANGE +
WUFFS_BASE__PRIVATE_IMPLEMENTATION__HPD__DIGITS_PRECISION;
bool saw_exp_digits = false;
for (; p < q; p++) {
if ((*p == '_') &&
(options & WUFFS_BASE__PARSE_NUMBER_XXX__ALLOW_UNDERSCORES)) {
} else if (('0' <= *p) && (*p <= '9')) {
saw_exp_digits = true;
if (exp < exp_large) {
exp = (10 * exp) + ((int32_t)(*p - '0'));
}
} else {
break;
}
}
if (!saw_exp_digits) {
return wuffs_base__make_status(wuffs_base__error__bad_argument);
}
dp += exp_sign * exp;
} while (0);
after_all:
if (p != q) {
return wuffs_base__make_status(wuffs_base__error__bad_argument);
}
h->num_digits = nd;
if (nd == 0) {
if (no_digits_before_separator) {
return wuffs_base__make_status(wuffs_base__error__bad_argument);
}
h->decimal_point = 0;
} else if (dp <
-WUFFS_BASE__PRIVATE_IMPLEMENTATION__HPD__DECIMAL_POINT__RANGE) {
h->decimal_point =
-WUFFS_BASE__PRIVATE_IMPLEMENTATION__HPD__DECIMAL_POINT__RANGE - 1;
} else if (dp >
+WUFFS_BASE__PRIVATE_IMPLEMENTATION__HPD__DECIMAL_POINT__RANGE) {
h->decimal_point =
+WUFFS_BASE__PRIVATE_IMPLEMENTATION__HPD__DECIMAL_POINT__RANGE + 1;
} else {
h->decimal_point = dp;
}
wuffs_base__private_implementation__high_prec_dec__trim(h);
return wuffs_base__make_status(NULL);
}
static uint32_t
wuffs_base__private_implementation__high_prec_dec__lshift_num_new_digits(
wuffs_base__private_implementation__high_prec_dec* h,
uint32_t shift) {
shift &= 63;
uint32_t x_a = wuffs_base__private_implementation__hpd_left_shift[shift];
uint32_t x_b = wuffs_base__private_implementation__hpd_left_shift[shift + 1];
uint32_t num_new_digits = x_a >> 11;
uint32_t pow5_a = 0x7FF & x_a;
uint32_t pow5_b = 0x7FF & x_b;
const uint8_t* pow5 =
&wuffs_base__private_implementation__powers_of_5[pow5_a];
uint32_t i = 0;
uint32_t n = pow5_b - pow5_a;
for (; i < n; i++) {
if (i >= h->num_digits) {
return num_new_digits - 1;
} else if (h->digits[i] == pow5[i]) {
continue;
} else if (h->digits[i] < pow5[i]) {
return num_new_digits - 1;
} else {
return num_new_digits;
}
}
return num_new_digits;
}
static uint64_t
wuffs_base__private_implementation__high_prec_dec__rounded_integer(
wuffs_base__private_implementation__high_prec_dec* h) {
if ((h->num_digits == 0) || (h->decimal_point < 0)) {
return 0;
} else if (h->decimal_point > 18) {
return UINT64_MAX;
}
uint32_t dp = (uint32_t)(h->decimal_point);
uint64_t n = 0;
uint32_t i = 0;
for (; i < dp; i++) {
n = (10 * n) + ((i < h->num_digits) ? h->digits[i] : 0);
}
bool round_up = false;
if (dp < h->num_digits) {
round_up = h->digits[dp] >= 5;
if ((h->digits[dp] == 5) && (dp + 1 == h->num_digits)) {
round_up = h->truncated ||
((dp > 0) && (1 & h->digits[dp - 1]));
}
}
if (round_up) {
n++;
}
return n;
}
static void
wuffs_base__private_implementation__high_prec_dec__small_lshift(
wuffs_base__private_implementation__high_prec_dec* h,
uint32_t shift) {
if (h->num_digits == 0) {
return;
}
uint32_t num_new_digits =
wuffs_base__private_implementation__high_prec_dec__lshift_num_new_digits(
h, shift);
uint32_t rx = h->num_digits - 1;
uint32_t wx = h->num_digits - 1 + num_new_digits;
uint64_t n = 0;
while (((int32_t)rx) >= 0) {
n += ((uint64_t)(h->digits[rx])) << shift;
uint64_t quo = n / 10;
uint64_t rem = n - (10 * quo);
if (wx < WUFFS_BASE__PRIVATE_IMPLEMENTATION__HPD__DIGITS_PRECISION) {
h->digits[wx] = (uint8_t)rem;
} else if (rem > 0) {
h->truncated = true;
}
n = quo;
wx--;
rx--;
}
while (n > 0) {
uint64_t quo = n / 10;
uint64_t rem = n - (10 * quo);
if (wx < WUFFS_BASE__PRIVATE_IMPLEMENTATION__HPD__DIGITS_PRECISION) {
h->digits[wx] = (uint8_t)rem;
} else if (rem > 0) {
h->truncated = true;
}
n = quo;
wx--;
}
h->num_digits += num_new_digits;
if (h->num_digits >
WUFFS_BASE__PRIVATE_IMPLEMENTATION__HPD__DIGITS_PRECISION) {
h->num_digits = WUFFS_BASE__PRIVATE_IMPLEMENTATION__HPD__DIGITS_PRECISION;
}
h->decimal_point += (int32_t)num_new_digits;
wuffs_base__private_implementation__high_prec_dec__trim(h);
}
static void
wuffs_base__private_implementation__high_prec_dec__small_rshift(
wuffs_base__private_implementation__high_prec_dec* h,
uint32_t shift) {
uint32_t rx = 0;
uint32_t wx = 0;
uint64_t n = 0;
while ((n >> shift) == 0) {
if (rx < h->num_digits) {
n = (10 * n) + h->digits[rx++];
} else if (n == 0) {
return;
} else {
while ((n >> shift) == 0) {
n = 10 * n;
rx++;
}
break;
}
}
h->decimal_point -= ((int32_t)(rx - 1));
if (h->decimal_point <
-WUFFS_BASE__PRIVATE_IMPLEMENTATION__HPD__DECIMAL_POINT__RANGE) {
h->num_digits = 0;
h->decimal_point = 0;
h->truncated = false;
return;
}
uint64_t mask = (((uint64_t)(1)) << shift) - 1;
while (rx < h->num_digits) {
uint8_t new_digit = ((uint8_t)(n >> shift));
n = (10 * (n & mask)) + h->digits[rx++];
h->digits[wx++] = new_digit;
}
while (n > 0) {
uint8_t new_digit = ((uint8_t)(n >> shift));
n = 10 * (n & mask);
if (wx < WUFFS_BASE__PRIVATE_IMPLEMENTATION__HPD__DIGITS_PRECISION) {
h->digits[wx++] = new_digit;
} else if (new_digit > 0) {
h->truncated = true;
}
}
h->num_digits = wx;
wuffs_base__private_implementation__high_prec_dec__trim(h);
}
static void
wuffs_base__private_implementation__high_prec_dec__lshift(
wuffs_base__private_implementation__high_prec_dec* h,
int32_t shift) {
if (shift > 0) {
while (shift > +WUFFS_BASE__PRIVATE_IMPLEMENTATION__HPD__SHIFT__MAX_INCL) {
wuffs_base__private_implementation__high_prec_dec__small_lshift(
h, WUFFS_BASE__PRIVATE_IMPLEMENTATION__HPD__SHIFT__MAX_INCL);
shift -= WUFFS_BASE__PRIVATE_IMPLEMENTATION__HPD__SHIFT__MAX_INCL;
}
wuffs_base__private_implementation__high_prec_dec__small_lshift(
h, ((uint32_t)(+shift)));
} else if (shift < 0) {
while (shift < -WUFFS_BASE__PRIVATE_IMPLEMENTATION__HPD__SHIFT__MAX_INCL) {
wuffs_base__private_implementation__high_prec_dec__small_rshift(
h, WUFFS_BASE__PRIVATE_IMPLEMENTATION__HPD__SHIFT__MAX_INCL);
shift += WUFFS_BASE__PRIVATE_IMPLEMENTATION__HPD__SHIFT__MAX_INCL;
}
wuffs_base__private_implementation__high_prec_dec__small_rshift(
h, ((uint32_t)(-shift)));
}
}
static void
wuffs_base__private_implementation__high_prec_dec__round_down(
wuffs_base__private_implementation__high_prec_dec* h,
int32_t n) {
if ((n < 0) || (h->num_digits <= (uint32_t)n)) {
return;
}
h->num_digits = (uint32_t)(n);
wuffs_base__private_implementation__high_prec_dec__trim(h);
}
static void
wuffs_base__private_implementation__high_prec_dec__round_up(
wuffs_base__private_implementation__high_prec_dec* h,
int32_t n) {
if ((n < 0) || (h->num_digits <= (uint32_t)n)) {
return;
}
for (n--; n >= 0; n--) {
if (h->digits[n] < 9) {
h->digits[n]++;
h->num_digits = (uint32_t)(n + 1);
return;
}
}
h->digits[0] = 1;
h->num_digits = 1;
h->decimal_point++;
}
static void
wuffs_base__private_implementation__high_prec_dec__round_nearest(
wuffs_base__private_implementation__high_prec_dec* h,
int32_t n) {
if ((n < 0) || (h->num_digits <= (uint32_t)n)) {
return;
}
bool up = h->digits[n] >= 5;
if ((h->digits[n] == 5) && ((n + 1) == ((int32_t)(h->num_digits)))) {
up = h->truncated ||
((n > 0) && ((h->digits[n - 1] & 1) != 0));
}
if (up) {
wuffs_base__private_implementation__high_prec_dec__round_up(h, n);
} else {
wuffs_base__private_implementation__high_prec_dec__round_down(h, n);
}
}
static void
wuffs_base__private_implementation__high_prec_dec__round_just_enough(
wuffs_base__private_implementation__high_prec_dec* h,
int32_t exp2,
uint64_t mantissa) {
if ((mantissa == 0) ||
((exp2 < 53) && (h->decimal_point >= ((int32_t)(h->num_digits))))) {
return;
}
static const int32_t min_incl_normal_exp2 = -1022;
static const uint64_t min_incl_normal_mantissa = 0x0010000000000000ul;
int32_t l_exp2 = exp2;
uint64_t l_mantissa = mantissa - 1;
if ((exp2 > min_incl_normal_exp2) && (mantissa <= min_incl_normal_mantissa)) {
l_exp2 = exp2 - 1;
l_mantissa = (2 * mantissa) - 1;
}
wuffs_base__private_implementation__high_prec_dec lower;
wuffs_base__private_implementation__high_prec_dec__assign(
&lower, (2 * l_mantissa) + 1, false);
wuffs_base__private_implementation__high_prec_dec__lshift(&lower,
l_exp2 - 53);
wuffs_base__private_implementation__high_prec_dec upper;
wuffs_base__private_implementation__high_prec_dec__assign(
&upper, (2 * mantissa) + 1, false);
wuffs_base__private_implementation__high_prec_dec__lshift(&upper, exp2 - 53);
bool inclusive = (mantissa & 1) == 0;
int upper_delta = -1;
int32_t ui = 0;
for (;; ui++) {
int32_t hi = ui - upper.decimal_point + h->decimal_point;
if (hi >= ((int32_t)(h->num_digits))) {
break;
}
uint8_t hd = (((uint32_t)hi) < h->num_digits) ? h->digits[hi] : 0;
int32_t li = ui - upper.decimal_point + lower.decimal_point;
uint8_t ld = (((uint32_t)li) < lower.num_digits) ? lower.digits[li] : 0;
bool can_round_down =
(ld != hd) ||
(inclusive && ((li + 1) == ((int32_t)(lower.num_digits))));
uint8_t ud = (((uint32_t)ui) < upper.num_digits) ? upper.digits[ui] : 0;
if (upper_delta < 0) {
if ((hd + 1) < ud) {
upper_delta = +1;
} else if (hd != ud) {
upper_delta = +0;
}
} else if (upper_delta == 0) {
if ((hd != 9) || (ud != 0)) {
upper_delta = +1;
}
}
bool can_round_up =
(upper_delta > 0) ||
((upper_delta == 0) &&
(inclusive || ((ui + 1) < ((int32_t)(upper.num_digits)))));
if (can_round_down) {
if (can_round_up) {
wuffs_base__private_implementation__high_prec_dec__round_nearest(
h, hi + 1);
return;
} else {
wuffs_base__private_implementation__high_prec_dec__round_down(h,
hi + 1);
return;
}
} else {
if (can_round_up) {
wuffs_base__private_implementation__high_prec_dec__round_up(h, hi + 1);
return;
}
}
}
}
static int64_t
wuffs_base__private_implementation__parse_number_f64_eisel_lemire(
uint64_t man,
int32_t exp10) {
const uint64_t* po10 =
&wuffs_base__private_implementation__powers_of_10[exp10 + 307][0];
uint32_t clz = wuffs_base__count_leading_zeroes_u64(man);
man <<= clz;
uint64_t ret_exp2 =
((uint64_t)(((217706 * exp10) >> 16) + 1087)) - ((uint64_t)clz);
wuffs_base__multiply_u64__output x = wuffs_base__multiply_u64(man, po10[1]);
uint64_t x_hi = x.hi;
uint64_t x_lo = x.lo;
if (((x_hi & 0x1FF) == 0x1FF) && ((x_lo + man) < man)) {
wuffs_base__multiply_u64__output y = wuffs_base__multiply_u64(man, po10[0]);
uint64_t y_hi = y.hi;
uint64_t y_lo = y.lo;
uint64_t merged_hi = x_hi;
uint64_t merged_lo = x_lo + y_hi;
if (merged_lo < x_lo) {
merged_hi++;
}
if (((merged_hi & 0x1FF) == 0x1FF) && ((merged_lo + 1) == 0) &&
(y_lo + man < man)) {
return -1;
}
x_hi = merged_hi;
x_lo = merged_lo;
}
uint64_t msb = x_hi >> 63;
uint64_t ret_mantissa = x_hi >> (msb + 9);
ret_exp2 -= 1 ^ msb;
if ((x_lo == 0) && ((x_hi & 0x1FF) == 0) && ((ret_mantissa & 3) == 1)) {
return -1;
}
ret_mantissa += ret_mantissa & 1;
ret_mantissa >>= 1;
if ((ret_mantissa >> 53) > 0) {
ret_mantissa >>= 1;
ret_exp2++;
}
ret_mantissa &= 0x000FFFFFFFFFFFFF;
return ((int64_t)(ret_mantissa | (ret_exp2 << 52)));
}
static wuffs_base__result_f64
wuffs_base__private_implementation__parse_number_f64_special(
wuffs_base__slice_u8 s,
uint32_t options) {
do {
if (options & WUFFS_BASE__PARSE_NUMBER_FXX__REJECT_INF_AND_NAN) {
goto fail;
}
uint8_t* p = s.ptr;
uint8_t* q = s.ptr + s.len;
for (; (p < q) && (*p == '_'); p++) {
}
if (p >= q) {
goto fail;
}
bool negative = false;
do {
if (*p == '+') {
p++;
} else if (*p == '-') {
negative = true;
p++;
} else {
break;
}
for (; (p < q) && (*p == '_'); p++) {
}
} while (0);
if (p >= q) {
goto fail;
}
bool nan = false;
switch (p[0]) {
case 'I':
case 'i':
if (((q - p) < 3) ||
((p[1] != 'N') && (p[1] != 'n')) ||
((p[2] != 'F') && (p[2] != 'f'))) {
goto fail;
}
p += 3;
if ((p >= q) || (*p == '_')) {
break;
} else if (((q - p) < 5) ||
((p[0] != 'I') && (p[0] != 'i')) ||
((p[1] != 'N') && (p[1] != 'n')) ||
((p[2] != 'I') && (p[2] != 'i')) ||
((p[3] != 'T') && (p[3] != 't')) ||
((p[4] != 'Y') && (p[4] != 'y'))) {
goto fail;
}
p += 5;
if ((p >= q) || (*p == '_')) {
break;
}
goto fail;
case 'N':
case 'n':
if (((q - p) < 3) ||
((p[1] != 'A') && (p[1] != 'a')) ||
((p[2] != 'N') && (p[2] != 'n'))) {
goto fail;
}
p += 3;
if ((p >= q) || (*p == '_')) {
nan = true;
break;
}
goto fail;
default:
goto fail;
}
for (; (p < q) && (*p == '_'); p++) {
}
if (p != q) {
goto fail;
}
wuffs_base__result_f64 ret;
ret.status.repr = NULL;
ret.value = wuffs_base__ieee_754_bit_representation__from_u64_to_f64(
(nan ? 0x7FFFFFFFFFFFFFFF : 0x7FF0000000000000) |
(negative ? 0x8000000000000000 : 0));
return ret;
} while (0);
fail:
do {
wuffs_base__result_f64 ret;
ret.status.repr = wuffs_base__error__bad_argument;
ret.value = 0;
return ret;
} while (0);
}
WUFFS_BASE__MAYBE_STATIC wuffs_base__result_f64
wuffs_base__private_implementation__high_prec_dec__to_f64(
wuffs_base__private_implementation__high_prec_dec* h,
uint32_t options) {
do {
static const uint32_t num_powers = 19;
static const uint8_t powers[19] = {
0, 3, 6, 9, 13, 16, 19, 23, 26, 29,
33, 36, 39, 43, 46, 49, 53, 56, 59,
};
if ((h->num_digits == 0) || (h->decimal_point < -326)) {
goto zero;
} else if (h->decimal_point > 310) {
goto infinity;
}
uint32_t i_max = h->num_digits;
if (i_max > 19) {
i_max = 19;
}
int32_t exp10 = h->decimal_point - ((int32_t)i_max);
if ((-307 <= exp10) && (exp10 <= 288)) {
uint64_t man = 0;
uint32_t i;
for (i = 0; i < i_max; i++) {
man = (10 * man) + h->digits[i];
}
while (man != 0) {
int64_t r0 =
wuffs_base__private_implementation__parse_number_f64_eisel_lemire(
man + 0, exp10);
if (r0 < 0) {
break;
} else if (h->num_digits > 19) {
int64_t r1 =
wuffs_base__private_implementation__parse_number_f64_eisel_lemire(
man + 1, exp10);
if (r1 != r0) {
break;
}
}
wuffs_base__result_f64 ret;
ret.status.repr = NULL;
ret.value = wuffs_base__ieee_754_bit_representation__from_u64_to_f64(
((uint64_t)r0) | (((uint64_t)(h->negative)) << 63));
return ret;
}
}
const int32_t f64_bias = -1023;
int32_t exp2 = 0;
while (h->decimal_point > 1) {
uint32_t n = (uint32_t)(+h->decimal_point);
uint32_t shift =
(n < num_powers)
? powers[n]
: WUFFS_BASE__PRIVATE_IMPLEMENTATION__HPD__SHIFT__MAX_INCL;
wuffs_base__private_implementation__high_prec_dec__small_rshift(h, shift);
if (h->decimal_point <
-WUFFS_BASE__PRIVATE_IMPLEMENTATION__HPD__DECIMAL_POINT__RANGE) {
goto zero;
}
exp2 += (int32_t)shift;
}
while (h->decimal_point < 0) {
uint32_t shift;
uint32_t n = (uint32_t)(-h->decimal_point);
shift = (n < num_powers)
? (powers[n] + 1)
: WUFFS_BASE__PRIVATE_IMPLEMENTATION__HPD__SHIFT__MAX_INCL;
wuffs_base__private_implementation__high_prec_dec__small_lshift(h, shift);
if (h->decimal_point >
+WUFFS_BASE__PRIVATE_IMPLEMENTATION__HPD__DECIMAL_POINT__RANGE) {
goto infinity;
}
exp2 -= (int32_t)shift;
}
int man3 = (100 * h->digits[0]) +
((h->num_digits > 1) ? (10 * h->digits[1]) : 0) +
((h->num_digits > 2) ? h->digits[2] : 0);
int32_t additional_lshift = 0;
if (h->decimal_point == 0) {
if (man3 < 125) {
additional_lshift = +4;
} else if (man3 < 250) {
additional_lshift = +3;
} else if (man3 < 500) {
additional_lshift = +2;
} else {
additional_lshift = +1;
}
} else {
if (man3 < 200) {
additional_lshift = -0;
} else if (man3 < 400) {
additional_lshift = -1;
} else if (man3 < 800) {
additional_lshift = -2;
} else {
additional_lshift = -3;
}
}
exp2 -= additional_lshift;
uint32_t final_lshift = (uint32_t)(52 + additional_lshift);
while ((f64_bias + 1) > exp2) {
uint32_t n = (uint32_t)((f64_bias + 1) - exp2);
if (n > WUFFS_BASE__PRIVATE_IMPLEMENTATION__HPD__SHIFT__MAX_INCL) {
n = WUFFS_BASE__PRIVATE_IMPLEMENTATION__HPD__SHIFT__MAX_INCL;
}
wuffs_base__private_implementation__high_prec_dec__small_rshift(h, n);
exp2 += (int32_t)n;
}
if ((exp2 - f64_bias) >= 0x07FF) {
goto infinity;
}
wuffs_base__private_implementation__high_prec_dec__small_lshift(
h, final_lshift);
uint64_t man2 =
wuffs_base__private_implementation__high_prec_dec__rounded_integer(h);
if ((man2 >> 53) != 0) {
man2 >>= 1;
exp2++;
if ((exp2 - f64_bias) >= 0x07FF) {
goto infinity;
}
}
if ((man2 >> 52) == 0) {
exp2 = f64_bias;
}
uint64_t exp2_bits =
(uint64_t)((exp2 - f64_bias) & 0x07FF);
uint64_t bits = (man2 & 0x000FFFFFFFFFFFFF) |
(exp2_bits << 52) |
(h->negative ? 0x8000000000000000 : 0);
wuffs_base__result_f64 ret;
ret.status.repr = NULL;
ret.value = wuffs_base__ieee_754_bit_representation__from_u64_to_f64(bits);
return ret;
} while (0);
zero:
do {
uint64_t bits = h->negative ? 0x8000000000000000 : 0;
wuffs_base__result_f64 ret;
ret.status.repr = NULL;
ret.value = wuffs_base__ieee_754_bit_representation__from_u64_to_f64(bits);
return ret;
} while (0);
infinity:
do {
if (options & WUFFS_BASE__PARSE_NUMBER_FXX__REJECT_INF_AND_NAN) {
wuffs_base__result_f64 ret;
ret.status.repr = wuffs_base__error__bad_argument;
ret.value = 0;
return ret;
}
uint64_t bits = h->negative ? 0xFFF0000000000000 : 0x7FF0000000000000;
wuffs_base__result_f64 ret;
ret.status.repr = NULL;
ret.value = wuffs_base__ieee_754_bit_representation__from_u64_to_f64(bits);
return ret;
} while (0);
}
static inline bool
wuffs_base__private_implementation__is_decimal_digit(uint8_t c) {
return ('0' <= c) && (c <= '9');
}
WUFFS_BASE__MAYBE_STATIC wuffs_base__result_f64
wuffs_base__parse_number_f64(wuffs_base__slice_u8 s, uint32_t options) {
do {
if (s.len >= 256) {
goto fallback;
}
uint8_t z[256];
memcpy(&z[0], s.ptr, s.len);
z[s.len] = 0;
const uint8_t* p = &z[0];
bool negative = (*p == '-');
if (negative) {
p++;
}
const uint8_t* const start_of_digits_ptr = p;
uint64_t man;
if (*p == '0') {
man = 0;
p++;
if (wuffs_base__private_implementation__is_decimal_digit(*p)) {
goto fallback;
}
} else if (wuffs_base__private_implementation__is_decimal_digit(*p)) {
man = ((uint8_t)(*p - '0'));
p++;
for (; wuffs_base__private_implementation__is_decimal_digit(*p); p++) {
man = (10 * man) + ((uint8_t)(*p - '0'));
}
} else {
goto fallback;
}
int32_t exp10 = 0;
if (*p ==
((options & WUFFS_BASE__PARSE_NUMBER_FXX__DECIMAL_SEPARATOR_IS_A_COMMA)
? ','
: '.')) {
p++;
const uint8_t* first_after_separator_ptr = p;
if (!wuffs_base__private_implementation__is_decimal_digit(*p)) {
goto fallback;
}
man = (10 * man) + ((uint8_t)(*p - '0'));
p++;
for (; wuffs_base__private_implementation__is_decimal_digit(*p); p++) {
man = (10 * man) + ((uint8_t)(*p - '0'));
}
exp10 = ((int32_t)(first_after_separator_ptr - p));
}
uint32_t digit_count = (uint32_t)(p - start_of_digits_ptr);
if ((*p | 0x20) == 'e') {
p++;
int32_t exp_sign = +1;
if (*p == '-') {
p++;
exp_sign = -1;
} else if (*p == '+') {
p++;
}
if (!wuffs_base__private_implementation__is_decimal_digit(*p)) {
goto fallback;
}
int32_t exp_num = ((uint8_t)(*p - '0'));
p++;
if (wuffs_base__private_implementation__is_decimal_digit(*p)) {
exp_num = (10 * exp_num) + ((uint8_t)(*p - '0'));
p++;
}
if (wuffs_base__private_implementation__is_decimal_digit(*p)) {
exp_num = (10 * exp_num) + ((uint8_t)(*p - '0'));
p++;
}
while (wuffs_base__private_implementation__is_decimal_digit(*p)) {
if (exp_num > 0x1000000) {
goto fallback;
}
exp_num = (10 * exp_num) + ((uint8_t)(*p - '0'));
p++;
}
exp10 += exp_sign * exp_num;
}
if (p != &z[s.len]) {
goto fallback;
}
if (digit_count > 19) {
const uint8_t* q = start_of_digits_ptr;
for (; (*q == '0') || (*q == '.'); q++) {
}
digit_count -= (uint32_t)(q - start_of_digits_ptr);
if (digit_count > 19) {
goto fallback;
}
}
if ((exp10 < -307) || (288 < exp10)) {
goto fallback;
}
if ((-22 <= exp10) && (exp10 <= 22) && ((man >> 53) == 0)) {
double d = (double)man;
if (exp10 >= 0) {
d *= wuffs_base__private_implementation__f64_powers_of_10[+exp10];
} else {
d /= wuffs_base__private_implementation__f64_powers_of_10[-exp10];
}
wuffs_base__result_f64 ret;
ret.status.repr = NULL;
ret.value = negative ? -d : +d;
return ret;
}
if (man == 0) {
goto fallback;
}
int64_t r =
wuffs_base__private_implementation__parse_number_f64_eisel_lemire(
man, exp10);
if (r < 0) {
goto fallback;
}
wuffs_base__result_f64 ret;
ret.status.repr = NULL;
ret.value = wuffs_base__ieee_754_bit_representation__from_u64_to_f64(
((uint64_t)r) | (((uint64_t)negative) << 63));
return ret;
} while (0);
fallback:
do {
wuffs_base__private_implementation__high_prec_dec h;
wuffs_base__status status =
wuffs_base__private_implementation__high_prec_dec__parse(&h, s,
options);
if (status.repr) {
return wuffs_base__private_implementation__parse_number_f64_special(
s, options);
}
return wuffs_base__private_implementation__high_prec_dec__to_f64(&h,
options);
} while (0);
}
static inline size_t
wuffs_base__private_implementation__render_inf(wuffs_base__slice_u8 dst,
bool neg,
uint32_t options) {
if (neg) {
if (dst.len < 4) {
return 0;
}
wuffs_base__poke_u32le__no_bounds_check(dst.ptr, 0x666E492D);
return 4;
}
if (options & WUFFS_BASE__RENDER_NUMBER_XXX__LEADING_PLUS_SIGN) {
if (dst.len < 4) {
return 0;
}
wuffs_base__poke_u32le__no_bounds_check(dst.ptr, 0x666E492B);
return 4;
}
if (dst.len < 3) {
return 0;
}
wuffs_base__poke_u24le__no_bounds_check(dst.ptr, 0x666E49);
return 3;
}
static inline size_t
wuffs_base__private_implementation__render_nan(wuffs_base__slice_u8 dst) {
if (dst.len < 3) {
return 0;
}
wuffs_base__poke_u24le__no_bounds_check(dst.ptr, 0x4E614E);
return 3;
}
static size_t
wuffs_base__private_implementation__high_prec_dec__render_exponent_absent(
wuffs_base__slice_u8 dst,
wuffs_base__private_implementation__high_prec_dec* h,
uint32_t precision,
uint32_t options) {
size_t n = (h->negative ||
(options & WUFFS_BASE__RENDER_NUMBER_XXX__LEADING_PLUS_SIGN))
? 1
: 0;
if (h->decimal_point <= 0) {
n += 1;
} else {
n += (size_t)(h->decimal_point);
}
if (precision > 0) {
n += precision + 1;
}
if (n > dst.len) {
return 0;
}
uint8_t* ptr = (options & WUFFS_BASE__RENDER_NUMBER_XXX__ALIGN_RIGHT)
? &dst.ptr[dst.len - n]
: &dst.ptr[0];
if (h->negative) {
*ptr++ = '-';
} else if (options & WUFFS_BASE__RENDER_NUMBER_XXX__LEADING_PLUS_SIGN) {
*ptr++ = '+';
}
if (h->decimal_point <= 0) {
*ptr++ = '0';
} else {
uint32_t m =
wuffs_base__u32__min(h->num_digits, (uint32_t)(h->decimal_point));
uint32_t i = 0;
for (; i < m; i++) {
*ptr++ = (uint8_t)('0' | h->digits[i]);
}
for (; i < (uint32_t)(h->decimal_point); i++) {
*ptr++ = '0';
}
}
if (precision > 0) {
*ptr++ =
(options & WUFFS_BASE__RENDER_NUMBER_FXX__DECIMAL_SEPARATOR_IS_A_COMMA)
? ','
: '.';
uint32_t i = 0;
for (; i < precision; i++) {
uint32_t j = ((uint32_t)(h->decimal_point)) + i;
*ptr++ = (uint8_t)('0' | ((j < h->num_digits) ? h->digits[j] : 0));
}
}
return n;
}
static size_t
wuffs_base__private_implementation__high_prec_dec__render_exponent_present(
wuffs_base__slice_u8 dst,
wuffs_base__private_implementation__high_prec_dec* h,
uint32_t precision,
uint32_t options) {
int32_t exp = 0;
if (h->num_digits > 0) {
exp = h->decimal_point - 1;
}
bool negative_exp = exp < 0;
if (negative_exp) {
exp = -exp;
}
size_t n = (h->negative ||
(options & WUFFS_BASE__RENDER_NUMBER_XXX__LEADING_PLUS_SIGN))
? 4
: 3;
if (precision > 0) {
n += precision + 1;
}
n += (exp < 100) ? 2 : 3;
if (n > dst.len) {
return 0;
}
uint8_t* ptr = (options & WUFFS_BASE__RENDER_NUMBER_XXX__ALIGN_RIGHT)
? &dst.ptr[dst.len - n]
: &dst.ptr[0];
if (h->negative) {
*ptr++ = '-';
} else if (options & WUFFS_BASE__RENDER_NUMBER_XXX__LEADING_PLUS_SIGN) {
*ptr++ = '+';
}
if (h->num_digits > 0) {
*ptr++ = (uint8_t)('0' | h->digits[0]);
} else {
*ptr++ = '0';
}
if (precision > 0) {
*ptr++ =
(options & WUFFS_BASE__RENDER_NUMBER_FXX__DECIMAL_SEPARATOR_IS_A_COMMA)
? ','
: '.';
uint32_t i = 1;
uint32_t j = wuffs_base__u32__min(h->num_digits, precision + 1);
for (; i < j; i++) {
*ptr++ = (uint8_t)('0' | h->digits[i]);
}
for (; i <= precision; i++) {
*ptr++ = '0';
}
}
*ptr++ = 'e';
*ptr++ = negative_exp ? '-' : '+';
if (exp < 10) {
*ptr++ = '0';
*ptr++ = (uint8_t)('0' | exp);
} else if (exp < 100) {
*ptr++ = (uint8_t)('0' | (exp / 10));
*ptr++ = (uint8_t)('0' | (exp % 10));
} else {
int32_t e = exp / 100;
exp -= e * 100;
*ptr++ = (uint8_t)('0' | e);
*ptr++ = (uint8_t)('0' | (exp / 10));
*ptr++ = (uint8_t)('0' | (exp % 10));
}
return n;
}
WUFFS_BASE__MAYBE_STATIC size_t
wuffs_base__render_number_f64(wuffs_base__slice_u8 dst,
double x,
uint32_t precision,
uint32_t options) {
uint64_t bits = wuffs_base__ieee_754_bit_representation__from_f64_to_u64(x);
bool neg = (bits >> 63) != 0;
int32_t exp2 = ((int32_t)(bits >> 52)) & 0x7FF;
uint64_t man = bits & 0x000FFFFFFFFFFFFFul;
if (exp2 == 0x7FF) {
if (man != 0) {
return wuffs_base__private_implementation__render_nan(dst);
}
return wuffs_base__private_implementation__render_inf(dst, neg, options);
} else if (exp2 == 0) {
exp2 = -1022;
} else {
exp2 -= 1023;
man |= 0x0010000000000000ul;
}
if (precision > 4095) {
precision = 4095;
}
wuffs_base__private_implementation__high_prec_dec h;
wuffs_base__private_implementation__high_prec_dec__assign(&h, man, neg);
if (h.num_digits > 0) {
wuffs_base__private_implementation__high_prec_dec__lshift(
&h, exp2 - 52);
}
switch (options & (WUFFS_BASE__RENDER_NUMBER_FXX__EXPONENT_ABSENT |
WUFFS_BASE__RENDER_NUMBER_FXX__EXPONENT_PRESENT)) {
case WUFFS_BASE__RENDER_NUMBER_FXX__EXPONENT_ABSENT:
if (options & WUFFS_BASE__RENDER_NUMBER_FXX__JUST_ENOUGH_PRECISION) {
wuffs_base__private_implementation__high_prec_dec__round_just_enough(
&h, exp2, man);
int32_t p = ((int32_t)(h.num_digits)) - h.decimal_point;
precision = ((uint32_t)(wuffs_base__i32__max(0, p)));
} else {
wuffs_base__private_implementation__high_prec_dec__round_nearest(
&h, ((int32_t)precision) + h.decimal_point);
}
return wuffs_base__private_implementation__high_prec_dec__render_exponent_absent(
dst, &h, precision, options);
case WUFFS_BASE__RENDER_NUMBER_FXX__EXPONENT_PRESENT:
if (options & WUFFS_BASE__RENDER_NUMBER_FXX__JUST_ENOUGH_PRECISION) {
wuffs_base__private_implementation__high_prec_dec__round_just_enough(
&h, exp2, man);
precision = (h.num_digits > 0) ? (h.num_digits - 1) : 0;
} else {
wuffs_base__private_implementation__high_prec_dec__round_nearest(
&h, ((int32_t)precision) + 1);
}
return wuffs_base__private_implementation__high_prec_dec__render_exponent_present(
dst, &h, precision, options);
}
int32_t e_threshold = 0;
if (options & WUFFS_BASE__RENDER_NUMBER_FXX__JUST_ENOUGH_PRECISION) {
wuffs_base__private_implementation__high_prec_dec__round_just_enough(
&h, exp2, man);
precision = h.num_digits;
e_threshold = 6;
} else {
if (precision == 0) {
precision = 1;
}
wuffs_base__private_implementation__high_prec_dec__round_nearest(
&h, ((int32_t)precision));
e_threshold = ((int32_t)precision);
int32_t nd = ((int32_t)(h.num_digits));
if ((e_threshold > nd) && (nd >= h.decimal_point)) {
e_threshold = nd;
}
}
int32_t e = h.decimal_point - 1;
if ((e < -4) || (e_threshold <= e)) {
uint32_t p = wuffs_base__u32__min(precision, h.num_digits);
return wuffs_base__private_implementation__high_prec_dec__render_exponent_present(
dst, &h, (p > 0) ? (p - 1) : 0, options);
}
int32_t p = ((int32_t)precision);
if (p > h.decimal_point) {
p = ((int32_t)(h.num_digits));
}
precision = ((uint32_t)(wuffs_base__i32__max(0, p - h.decimal_point)));
return wuffs_base__private_implementation__high_prec_dec__render_exponent_absent(
dst, &h, precision, options);
}
#endif
#if !defined(WUFFS_CONFIG__MODULES) || defined(WUFFS_CONFIG__MODULE__BASE) || \
defined(WUFFS_CONFIG__MODULE__BASE__INTCONV)
static const uint8_t wuffs_base__parse_number__decimal_digits[256] = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
0x88, 0x89, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
};
static const uint8_t wuffs_base__parse_number__hexadecimal_digits[256] = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
0x88, 0x89, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x8A, 0x8B, 0x8C, 0x8D, 0x8E, 0x8F, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x8A, 0x8B, 0x8C, 0x8D, 0x8E, 0x8F, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
};
static const uint8_t wuffs_base__private_implementation__encode_base16[16] = {
0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37,
0x38, 0x39, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46,
};
WUFFS_BASE__MAYBE_STATIC wuffs_base__result_i64
wuffs_base__parse_number_i64(wuffs_base__slice_u8 s, uint32_t options) {
uint8_t* p = s.ptr;
uint8_t* q = s.ptr + s.len;
if (options & WUFFS_BASE__PARSE_NUMBER_XXX__ALLOW_UNDERSCORES) {
for (; (p < q) && (*p == '_'); p++) {
}
}
bool negative = false;
if (p >= q) {
goto fail_bad_argument;
} else if (*p == '-') {
p++;
negative = true;
} else if (*p == '+') {
p++;
}
do {
wuffs_base__result_u64 r = wuffs_base__parse_number_u64(
wuffs_base__make_slice_u8(p, (size_t)(q - p)), options);
if (r.status.repr != NULL) {
wuffs_base__result_i64 ret;
ret.status.repr = r.status.repr;
ret.value = 0;
return ret;
} else if (negative) {
if (r.value < 0x8000000000000000) {
wuffs_base__result_i64 ret;
ret.status.repr = NULL;
ret.value = -(int64_t)(r.value);
return ret;
} else if (r.value == 0x8000000000000000) {
wuffs_base__result_i64 ret;
ret.status.repr = NULL;
ret.value = INT64_MIN;
return ret;
}
goto fail_out_of_bounds;
} else if (r.value > 0x7FFFFFFFFFFFFFFF) {
goto fail_out_of_bounds;
} else {
wuffs_base__result_i64 ret;
ret.status.repr = NULL;
ret.value = +(int64_t)(r.value);
return ret;
}
} while (0);
fail_bad_argument:
do {
wuffs_base__result_i64 ret;
ret.status.repr = wuffs_base__error__bad_argument;
ret.value = 0;
return ret;
} while (0);
fail_out_of_bounds:
do {
wuffs_base__result_i64 ret;
ret.status.repr = wuffs_base__error__out_of_bounds;
ret.value = 0;
return ret;
} while (0);
}
WUFFS_BASE__MAYBE_STATIC wuffs_base__result_u64
wuffs_base__parse_number_u64(wuffs_base__slice_u8 s, uint32_t options) {
uint8_t* p = s.ptr;
uint8_t* q = s.ptr + s.len;
if (options & WUFFS_BASE__PARSE_NUMBER_XXX__ALLOW_UNDERSCORES) {
for (; (p < q) && (*p == '_'); p++) {
}
}
if (p >= q) {
goto fail_bad_argument;
} else if (*p == '0') {
p++;
if (p >= q) {
goto ok_zero;
}
if (options & WUFFS_BASE__PARSE_NUMBER_XXX__ALLOW_UNDERSCORES) {
if (*p == '_') {
p++;
for (; p < q; p++) {
if (*p != '_') {
if (options &
WUFFS_BASE__PARSE_NUMBER_XXX__ALLOW_MULTIPLE_LEADING_ZEROES) {
goto decimal;
}
goto fail_bad_argument;
}
}
goto ok_zero;
}
}
if ((*p == 'x') || (*p == 'X')) {
p++;
if (options & WUFFS_BASE__PARSE_NUMBER_XXX__ALLOW_UNDERSCORES) {
for (; (p < q) && (*p == '_'); p++) {
}
}
if (p < q) {
goto hexadecimal;
}
} else if ((*p == 'd') || (*p == 'D')) {
p++;
if (options & WUFFS_BASE__PARSE_NUMBER_XXX__ALLOW_UNDERSCORES) {
for (; (p < q) && (*p == '_'); p++) {
}
}
if (p < q) {
goto decimal;
}
}
if (options & WUFFS_BASE__PARSE_NUMBER_XXX__ALLOW_MULTIPLE_LEADING_ZEROES) {
goto decimal;
}
goto fail_bad_argument;
}
decimal:
do {
uint64_t v = wuffs_base__parse_number__decimal_digits[*p++];
if (v == 0) {
goto fail_bad_argument;
}
v &= 0x0F;
const uint64_t max10 = 1844674407370955161u;
const uint8_t max1 = 5;
for (; p < q; p++) {
if ((*p == '_') &&
(options & WUFFS_BASE__PARSE_NUMBER_XXX__ALLOW_UNDERSCORES)) {
continue;
}
uint8_t digit = wuffs_base__parse_number__decimal_digits[*p];
if (digit == 0) {
goto fail_bad_argument;
}
digit &= 0x0F;
if ((v > max10) || ((v == max10) && (digit > max1))) {
goto fail_out_of_bounds;
}
v = (10 * v) + ((uint64_t)(digit));
}
wuffs_base__result_u64 ret;
ret.status.repr = NULL;
ret.value = v;
return ret;
} while (0);
hexadecimal:
do {
uint64_t v = wuffs_base__parse_number__hexadecimal_digits[*p++];
if (v == 0) {
goto fail_bad_argument;
}
v &= 0x0F;
for (; p < q; p++) {
if ((*p == '_') &&
(options & WUFFS_BASE__PARSE_NUMBER_XXX__ALLOW_UNDERSCORES)) {
continue;
}
uint8_t digit = wuffs_base__parse_number__hexadecimal_digits[*p];
if (digit == 0) {
goto fail_bad_argument;
}
digit &= 0x0F;
if ((v >> 60) != 0) {
goto fail_out_of_bounds;
}
v = (v << 4) | ((uint64_t)(digit));
}
wuffs_base__result_u64 ret;
ret.status.repr = NULL;
ret.value = v;
return ret;
} while (0);
ok_zero:
do {
wuffs_base__result_u64 ret;
ret.status.repr = NULL;
ret.value = 0;
return ret;
} while (0);
fail_bad_argument:
do {
wuffs_base__result_u64 ret;
ret.status.repr = wuffs_base__error__bad_argument;
ret.value = 0;
return ret;
} while (0);
fail_out_of_bounds:
do {
wuffs_base__result_u64 ret;
ret.status.repr = wuffs_base__error__out_of_bounds;
ret.value = 0;
return ret;
} while (0);
}
static const uint8_t wuffs_base__render_number__first_hundred[200] = {
'0', '0', '0', '1', '0', '2', '0', '3', '0', '4',
'0', '5', '0', '6', '0', '7', '0', '8', '0', '9',
'1', '0', '1', '1', '1', '2', '1', '3', '1', '4',
'1', '5', '1', '6', '1', '7', '1', '8', '1', '9',
'2', '0', '2', '1', '2', '2', '2', '3', '2', '4',
'2', '5', '2', '6', '2', '7', '2', '8', '2', '9',
'3', '0', '3', '1', '3', '2', '3', '3', '3', '4',
'3', '5', '3', '6', '3', '7', '3', '8', '3', '9',
'4', '0', '4', '1', '4', '2', '4', '3', '4', '4',
'4', '5', '4', '6', '4', '7', '4', '8', '4', '9',
'5', '0', '5', '1', '5', '2', '5', '3', '5', '4',
'5', '5', '5', '6', '5', '7', '5', '8', '5', '9',
'6', '0', '6', '1', '6', '2', '6', '3', '6', '4',
'6', '5', '6', '6', '6', '7', '6', '8', '6', '9',
'7', '0', '7', '1', '7', '2', '7', '3', '7', '4',
'7', '5', '7', '6', '7', '7', '7', '8', '7', '9',
'8', '0', '8', '1', '8', '2', '8', '3', '8', '4',
'8', '5', '8', '6', '8', '7', '8', '8', '8', '9',
'9', '0', '9', '1', '9', '2', '9', '3', '9', '4',
'9', '5', '9', '6', '9', '7', '9', '8', '9', '9',
};
static size_t
wuffs_base__private_implementation__render_number_u64(wuffs_base__slice_u8 dst,
uint64_t x,
uint32_t options,
bool neg) {
uint8_t buf[WUFFS_BASE__U64__BYTE_LENGTH__MAX_INCL];
uint8_t* ptr = &buf[0] + sizeof(buf);
while (x >= 100) {
size_t index = ((size_t)((x % 100) * 2));
x /= 100;
uint8_t s0 = wuffs_base__render_number__first_hundred[index + 0];
uint8_t s1 = wuffs_base__render_number__first_hundred[index + 1];
ptr -= 2;
ptr[0] = s0;
ptr[1] = s1;
}
if (x < 10) {
ptr -= 1;
ptr[0] = (uint8_t)('0' + x);
} else {
size_t index = ((size_t)(x * 2));
uint8_t s0 = wuffs_base__render_number__first_hundred[index + 0];
uint8_t s1 = wuffs_base__render_number__first_hundred[index + 1];
ptr -= 2;
ptr[0] = s0;
ptr[1] = s1;
}
if (neg) {
ptr -= 1;
ptr[0] = '-';
} else if (options & WUFFS_BASE__RENDER_NUMBER_XXX__LEADING_PLUS_SIGN) {
ptr -= 1;
ptr[0] = '+';
}
size_t n = sizeof(buf) - ((size_t)(ptr - &buf[0]));
if (n > dst.len) {
return 0;
}
memcpy(dst.ptr + ((options & WUFFS_BASE__RENDER_NUMBER_XXX__ALIGN_RIGHT)
? (dst.len - n)
: 0),
ptr, n);
return n;
}
WUFFS_BASE__MAYBE_STATIC size_t
wuffs_base__render_number_i64(wuffs_base__slice_u8 dst,
int64_t x,
uint32_t options) {
uint64_t u = (uint64_t)x;
bool neg = x < 0;
if (neg) {
u = 1 + ~u;
}
return wuffs_base__private_implementation__render_number_u64(dst, u, options,
neg);
}
WUFFS_BASE__MAYBE_STATIC size_t
wuffs_base__render_number_u64(wuffs_base__slice_u8 dst,
uint64_t x,
uint32_t options) {
return wuffs_base__private_implementation__render_number_u64(dst, x, options,
false);
}
WUFFS_BASE__MAYBE_STATIC wuffs_base__transform__output
wuffs_base__base_16__decode2(wuffs_base__slice_u8 dst,
wuffs_base__slice_u8 src,
bool src_closed,
uint32_t options) {
wuffs_base__transform__output o;
size_t src_len2 = src.len / 2;
size_t len;
if (dst.len < src_len2) {
len = dst.len;
o.status.repr = wuffs_base__suspension__short_write;
} else {
len = src_len2;
if (!src_closed) {
o.status.repr = wuffs_base__suspension__short_read;
} else if (src.len & 1) {
o.status.repr = wuffs_base__error__bad_data;
} else {
o.status.repr = NULL;
}
}
uint8_t* d = dst.ptr;
uint8_t* s = src.ptr;
size_t n = len;
while (n--) {
*d = (uint8_t)((wuffs_base__parse_number__hexadecimal_digits[s[0]] << 4) |
(wuffs_base__parse_number__hexadecimal_digits[s[1]] & 0x0F));
d += 1;
s += 2;
}
o.num_dst = len;
o.num_src = len * 2;
return o;
}
WUFFS_BASE__MAYBE_STATIC wuffs_base__transform__output
wuffs_base__base_16__decode4(wuffs_base__slice_u8 dst,
wuffs_base__slice_u8 src,
bool src_closed,
uint32_t options) {
wuffs_base__transform__output o;
size_t src_len4 = src.len / 4;
size_t len = dst.len < src_len4 ? dst.len : src_len4;
if (dst.len < src_len4) {
len = dst.len;
o.status.repr = wuffs_base__suspension__short_write;
} else {
len = src_len4;
if (!src_closed) {
o.status.repr = wuffs_base__suspension__short_read;
} else if (src.len & 1) {
o.status.repr = wuffs_base__error__bad_data;
} else {
o.status.repr = NULL;
}
}
uint8_t* d = dst.ptr;
uint8_t* s = src.ptr;
size_t n = len;
while (n--) {
*d = (uint8_t)((wuffs_base__parse_number__hexadecimal_digits[s[2]] << 4) |
(wuffs_base__parse_number__hexadecimal_digits[s[3]] & 0x0F));
d += 1;
s += 4;
}
o.num_dst = len;
o.num_src = len * 4;
return o;
}
WUFFS_BASE__MAYBE_STATIC wuffs_base__transform__output
wuffs_base__base_16__encode2(wuffs_base__slice_u8 dst,
wuffs_base__slice_u8 src,
bool src_closed,
uint32_t options) {
wuffs_base__transform__output o;
size_t dst_len2 = dst.len / 2;
size_t len;
if (dst_len2 < src.len) {
len = dst_len2;
o.status.repr = wuffs_base__suspension__short_write;
} else {
len = src.len;
if (!src_closed) {
o.status.repr = wuffs_base__suspension__short_read;
} else {
o.status.repr = NULL;
}
}
uint8_t* d = dst.ptr;
uint8_t* s = src.ptr;
size_t n = len;
while (n--) {
uint8_t c = *s;
d[0] = wuffs_base__private_implementation__encode_base16[c >> 4];
d[1] = wuffs_base__private_implementation__encode_base16[c & 0x0F];
d += 2;
s += 1;
}
o.num_dst = len * 2;
o.num_src = len;
return o;
}
WUFFS_BASE__MAYBE_STATIC wuffs_base__transform__output
wuffs_base__base_16__encode4(wuffs_base__slice_u8 dst,
wuffs_base__slice_u8 src,
bool src_closed,
uint32_t options) {
wuffs_base__transform__output o;
size_t dst_len4 = dst.len / 4;
size_t len;
if (dst_len4 < src.len) {
len = dst_len4;
o.status.repr = wuffs_base__suspension__short_write;
} else {
len = src.len;
if (!src_closed) {
o.status.repr = wuffs_base__suspension__short_read;
} else {
o.status.repr = NULL;
}
}
uint8_t* d = dst.ptr;
uint8_t* s = src.ptr;
size_t n = len;
while (n--) {
uint8_t c = *s;
d[0] = '\\';
d[1] = 'x';
d[2] = wuffs_base__private_implementation__encode_base16[c >> 4];
d[3] = wuffs_base__private_implementation__encode_base16[c & 0x0F];
d += 4;
s += 1;
}
o.num_dst = len * 4;
o.num_src = len;
return o;
}
static const uint8_t wuffs_base__base_64__decode_std[256] = {
0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
0x80, 0x80, 0x80, 0x3E, 0x80, 0x80, 0x80, 0x3F,
0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3A, 0x3B,
0x3C, 0x3D, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
0x80, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06,
0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E,
0x0F, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16,
0x17, 0x18, 0x19, 0x80, 0x80, 0x80, 0x80, 0x80,
0x80, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F, 0x20,
0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28,
0x29, 0x2A, 0x2B, 0x2C, 0x2D, 0x2E, 0x2F, 0x30,
0x31, 0x32, 0x33, 0x80, 0x80, 0x80, 0x80, 0x80,
0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
};
static const uint8_t wuffs_base__base_64__decode_url[256] = {
0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
0x80, 0x80, 0x80, 0x80, 0x80, 0x3E, 0x80, 0x80,
0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3A, 0x3B,
0x3C, 0x3D, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
0x80, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06,
0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E,
0x0F, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16,
0x17, 0x18, 0x19, 0x80, 0x80, 0x80, 0x80, 0x3F,
0x80, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F, 0x20,
0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28,
0x29, 0x2A, 0x2B, 0x2C, 0x2D, 0x2E, 0x2F, 0x30,
0x31, 0x32, 0x33, 0x80, 0x80, 0x80, 0x80, 0x80,
0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
};
static const uint8_t wuffs_base__base_64__encode_std[64] = {
0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48,
0x49, 0x4A, 0x4B, 0x4C, 0x4D, 0x4E, 0x4F, 0x50,
0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58,
0x59, 0x5A, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66,
0x67, 0x68, 0x69, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E,
0x6F, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76,
0x77, 0x78, 0x79, 0x7A, 0x30, 0x31, 0x32, 0x33,
0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x2B, 0x2F,
};
static const uint8_t wuffs_base__base_64__encode_url[64] = {
0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48,
0x49, 0x4A, 0x4B, 0x4C, 0x4D, 0x4E, 0x4F, 0x50,
0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58,
0x59, 0x5A, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66,
0x67, 0x68, 0x69, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E,
0x6F, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76,
0x77, 0x78, 0x79, 0x7A, 0x30, 0x31, 0x32, 0x33,
0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x2D, 0x5F,
};
WUFFS_BASE__MAYBE_STATIC wuffs_base__transform__output
wuffs_base__base_64__decode(wuffs_base__slice_u8 dst,
wuffs_base__slice_u8 src,
bool src_closed,
uint32_t options) {
const uint8_t* alphabet = (options & WUFFS_BASE__BASE_64__URL_ALPHABET)
? wuffs_base__base_64__decode_url
: wuffs_base__base_64__decode_std;
wuffs_base__transform__output o;
uint8_t* d_ptr = dst.ptr;
size_t d_len = dst.len;
const uint8_t* s_ptr = src.ptr;
size_t s_len = src.len;
bool pad = false;
while (s_len >= 4) {
uint32_t s = wuffs_base__peek_u32le__no_bounds_check(s_ptr);
uint32_t s0 = alphabet[0xFF & (s >> 0)];
uint32_t s1 = alphabet[0xFF & (s >> 8)];
uint32_t s2 = alphabet[0xFF & (s >> 16)];
uint32_t s3 = alphabet[0xFF & (s >> 24)];
if (((s0 | s1 | s2 | s3) & 0xC0) != 0) {
if (s_len > 4) {
o.status.repr = wuffs_base__error__bad_data;
goto done;
} else if (!src_closed) {
o.status.repr = wuffs_base__suspension__short_read;
goto done;
} else if ((options & WUFFS_BASE__BASE_64__DECODE_ALLOW_PADDING) &&
(s_ptr[3] == '=')) {
pad = true;
if (s_ptr[2] == '=') {
goto src2;
}
goto src3;
}
o.status.repr = wuffs_base__error__bad_data;
goto done;
}
if (d_len < 3) {
o.status.repr = wuffs_base__suspension__short_write;
goto done;
}
s_ptr += 4;
s_len -= 4;
s = (s0 << 18) | (s1 << 12) | (s2 << 6) | (s3 << 0);
*d_ptr++ = (uint8_t)(s >> 16);
*d_ptr++ = (uint8_t)(s >> 8);
*d_ptr++ = (uint8_t)(s >> 0);
d_len -= 3;
}
if (!src_closed) {
o.status.repr = wuffs_base__suspension__short_read;
goto done;
}
if (s_len == 0) {
o.status.repr = NULL;
goto done;
} else if (s_len == 1) {
o.status.repr = wuffs_base__error__bad_data;
goto done;
} else if (s_len == 2) {
goto src2;
}
src3:
do {
uint32_t s = wuffs_base__peek_u24le__no_bounds_check(s_ptr);
uint32_t s0 = alphabet[0xFF & (s >> 0)];
uint32_t s1 = alphabet[0xFF & (s >> 8)];
uint32_t s2 = alphabet[0xFF & (s >> 16)];
if ((s0 & 0xC0) || (s1 & 0xC0) || (s2 & 0xC3)) {
o.status.repr = wuffs_base__error__bad_data;
goto done;
}
if (d_len < 2) {
o.status.repr = wuffs_base__suspension__short_write;
goto done;
}
s_ptr += pad ? 4 : 3;
s = (s0 << 18) | (s1 << 12) | (s2 << 6);
*d_ptr++ = (uint8_t)(s >> 16);
*d_ptr++ = (uint8_t)(s >> 8);
o.status.repr = NULL;
goto done;
} while (0);
src2:
do {
uint32_t s = wuffs_base__peek_u16le__no_bounds_check(s_ptr);
uint32_t s0 = alphabet[0xFF & (s >> 0)];
uint32_t s1 = alphabet[0xFF & (s >> 8)];
if ((s0 & 0xC0) || (s1 & 0xCF)) {
o.status.repr = wuffs_base__error__bad_data;
goto done;
}
if (d_len < 1) {
o.status.repr = wuffs_base__suspension__short_write;
goto done;
}
s_ptr += pad ? 4 : 2;
s = (s0 << 18) | (s1 << 12);
*d_ptr++ = (uint8_t)(s >> 16);
o.status.repr = NULL;
goto done;
} while (0);
done:
o.num_dst = (size_t)(d_ptr - dst.ptr);
o.num_src = (size_t)(s_ptr - src.ptr);
return o;
}
WUFFS_BASE__MAYBE_STATIC wuffs_base__transform__output
wuffs_base__base_64__encode(wuffs_base__slice_u8 dst,
wuffs_base__slice_u8 src,
bool src_closed,
uint32_t options) {
const uint8_t* alphabet = (options & WUFFS_BASE__BASE_64__URL_ALPHABET)
? wuffs_base__base_64__encode_url
: wuffs_base__base_64__encode_std;
wuffs_base__transform__output o;
uint8_t* d_ptr = dst.ptr;
size_t d_len = dst.len;
const uint8_t* s_ptr = src.ptr;
size_t s_len = src.len;
do {
while (s_len >= 3) {
if (d_len < 4) {
o.status.repr = wuffs_base__suspension__short_write;
goto done;
}
uint32_t s = wuffs_base__peek_u24be__no_bounds_check(s_ptr);
s_ptr += 3;
s_len -= 3;
*d_ptr++ = alphabet[0x3F & (s >> 18)];
*d_ptr++ = alphabet[0x3F & (s >> 12)];
*d_ptr++ = alphabet[0x3F & (s >> 6)];
*d_ptr++ = alphabet[0x3F & (s >> 0)];
d_len -= 4;
}
if (!src_closed) {
o.status.repr = wuffs_base__suspension__short_read;
goto done;
}
if (s_len == 2) {
if (d_len <
((options & WUFFS_BASE__BASE_64__ENCODE_EMIT_PADDING) ? 4 : 3)) {
o.status.repr = wuffs_base__suspension__short_write;
goto done;
}
uint32_t s = ((uint32_t)(wuffs_base__peek_u16be__no_bounds_check(s_ptr)))
<< 8;
s_ptr += 2;
*d_ptr++ = alphabet[0x3F & (s >> 18)];
*d_ptr++ = alphabet[0x3F & (s >> 12)];
*d_ptr++ = alphabet[0x3F & (s >> 6)];
if (options & WUFFS_BASE__BASE_64__ENCODE_EMIT_PADDING) {
*d_ptr++ = '=';
}
o.status.repr = NULL;
goto done;
} else if (s_len == 1) {
if (d_len <
((options & WUFFS_BASE__BASE_64__ENCODE_EMIT_PADDING) ? 4 : 2)) {
o.status.repr = wuffs_base__suspension__short_write;
goto done;
}
uint32_t s = ((uint32_t)(wuffs_base__peek_u8__no_bounds_check(s_ptr)))
<< 16;
s_ptr += 1;
*d_ptr++ = alphabet[0x3F & (s >> 18)];
*d_ptr++ = alphabet[0x3F & (s >> 12)];
if (options & WUFFS_BASE__BASE_64__ENCODE_EMIT_PADDING) {
*d_ptr++ = '=';
*d_ptr++ = '=';
}
o.status.repr = NULL;
goto done;
} else {
o.status.repr = NULL;
goto done;
}
} while (0);
done:
o.num_dst = (size_t)(d_ptr - dst.ptr);
o.num_src = (size_t)(s_ptr - src.ptr);
return o;
}
#endif
#if !defined(WUFFS_CONFIG__MODULES) || defined(WUFFS_CONFIG__MODULE__BASE) || \
defined(WUFFS_CONFIG__MODULE__BASE__MAGIC)
static int32_t
wuffs_base__magic_number_guess_fourcc__maybe_ico(
wuffs_base__slice_u8 prefix_data,
bool prefix_closed) {
if (prefix_data.len < 4) {
return prefix_closed ? 0 : -1;
} else if (prefix_data.ptr[3] != 0) {
return 0;
}
switch (prefix_data.ptr[2]) {
case 0x01:
case 0x02:
break;
default:
return 0;
}
if (prefix_data.len < 6) {
return prefix_closed ? 0 : -1;
} else if ((prefix_data.ptr[4] == 0) && (prefix_data.ptr[5] == 0)) {
return 0;
}
if (prefix_data.len < 10) {
return prefix_closed ? 0 : -1;
} else if (prefix_data.ptr[9] != 0) {
return 0;
}
return 0x49434F20;
}
static int32_t
wuffs_base__magic_number_guess_fourcc__maybe_tga(
wuffs_base__slice_u8 prefix_data,
bool prefix_closed) {
if (prefix_data.len < 3) {
return prefix_closed ? 0 : -1;
}
switch (prefix_data.ptr[2]) {
case 0x01:
case 0x02:
case 0x03:
case 0x09:
case 0x0A:
case 0x0B:
break;
default:
return 0;
}
if (prefix_data.len < 8) {
return prefix_closed ? 0 : -1;
} else if (prefix_data.ptr[1] != 0x00) {
switch (prefix_data.ptr[7]) {
case 0x0F:
case 0x10:
case 0x18:
case 0x20:
break;
default:
return 0;
}
} else if ((prefix_data.ptr[3] | prefix_data.ptr[4] | prefix_data.ptr[5] |
prefix_data.ptr[6] | prefix_data.ptr[7]) != 0x00) {
return 0;
}
if (prefix_data.len < 17) {
return prefix_closed ? 0 : -1;
}
switch (prefix_data.ptr[16]) {
case 0x01:
case 0x08:
case 0x0F:
case 0x10:
case 0x18:
case 0x20:
break;
default:
return 0;
}
return 0x54474120;
}
WUFFS_BASE__MAYBE_STATIC int32_t
wuffs_base__magic_number_guess_fourcc(wuffs_base__slice_u8 prefix_data,
bool prefix_closed) {
static struct {
int32_t fourcc;
const char* magic;
} table[] = {
{-0x30302020, "\x01\x00\x00"},
{+0x475A2020, "\x02\x1F\x8B\x08"},
{+0x5A535444, "\x03\x28\xB5\x2F\xFD"},
{+0x425A3220, "\x02\x42\x5A\x68"},
{+0x424D5020, "\x01\x42\x4D"},
{+0x47494620, "\x03\x47\x49\x46\x38"},
{+0x54494646, "\x03\x49\x49\x2A\x00"},
{+0x54494646, "\x03\x4D\x4D\x00\x2A"},
{-0x52494646, "\x03\x52\x49\x46\x46"},
{+0x4E494520, "\x02\x6E\xC3\xAF"},
{+0x514F4920, "\x03\x71\x6F\x69\x66"},
{+0x5A4C4942, "\x01\x78\x9C"},
{+0x504E4720, "\x03\x89\x50\x4E\x47"},
{+0x4A504547, "\x01\xFF\xD8"},
};
static const size_t table_len = sizeof(table) / sizeof(table[0]);
if (prefix_data.len == 0) {
return prefix_closed ? 0 : -1;
}
uint8_t pre_first_byte = prefix_data.ptr[0];
int32_t fourcc = 0;
size_t i;
for (i = 0; i < table_len; i++) {
uint8_t mag_first_byte = ((uint8_t)(table[i].magic[1]));
if (pre_first_byte < mag_first_byte) {
break;
} else if (pre_first_byte > mag_first_byte) {
continue;
}
fourcc = table[i].fourcc;
uint8_t mag_remaining_len = ((uint8_t)(table[i].magic[0]));
if (mag_remaining_len == 0) {
goto match;
}
const char* mag_remaining_ptr = table[i].magic + 2;
uint8_t* pre_remaining_ptr = prefix_data.ptr + 1;
size_t pre_remaining_len = prefix_data.len - 1;
if (pre_remaining_len < mag_remaining_len) {
if (!memcmp(pre_remaining_ptr, mag_remaining_ptr, pre_remaining_len)) {
return prefix_closed ? 0 : -1;
}
} else {
if (!memcmp(pre_remaining_ptr, mag_remaining_ptr, mag_remaining_len)) {
goto match;
}
}
}
if (prefix_data.len < 2) {
return prefix_closed ? 0 : -1;
} else if ((prefix_data.ptr[1] == 0x00) || (prefix_data.ptr[1] == 0x01)) {
return wuffs_base__magic_number_guess_fourcc__maybe_tga(prefix_data,
prefix_closed);
}
return 0;
match:
if (fourcc < 0) {
fourcc = -fourcc;
if (fourcc == 0x52494646) {
if (prefix_data.len < 12) {
return prefix_closed ? 0 : -1;
}
uint32_t x = wuffs_base__peek_u32be__no_bounds_check(prefix_data.ptr + 8);
if (x == 0x57454250) {
return 0x57454250;
}
} else if (fourcc == 0x30302020) {
int32_t tga = wuffs_base__magic_number_guess_fourcc__maybe_tga(
prefix_data, prefix_closed);
if (tga != 0) {
return tga;
}
int32_t ico = wuffs_base__magic_number_guess_fourcc__maybe_ico(
prefix_data, prefix_closed);
if (ico != 0) {
return ico;
}
if (prefix_data.len < 4) {
return prefix_closed ? 0 : -1;
} else if ((prefix_data.ptr[2] != 0x00) &&
((prefix_data.ptr[2] >= 0x80) ||
(prefix_data.ptr[3] != 0x00))) {
return 0x57424D50;
}
return 0;
}
}
return fourcc;
}
#endif
#if !defined(WUFFS_CONFIG__MODULES) || defined(WUFFS_CONFIG__MODULE__BASE) || \
defined(WUFFS_CONFIG__MODULE__BASE__PIXCONV)
static inline uint32_t
wuffs_base__swap_u32_argb_abgr(uint32_t u) {
uint32_t o = u & 0xFF00FF00ul;
uint32_t r = u & 0x00FF0000ul;
uint32_t b = u & 0x000000FFul;
return o | (r >> 16) | (b << 16);
}
static inline uint64_t
wuffs_base__swap_u64_argb_abgr(uint64_t u) {
uint64_t o = u & 0xFFFF0000FFFF0000ull;
uint64_t r = u & 0x0000FFFF00000000ull;
uint64_t b = u & 0x000000000000FFFFull;
return o | (r >> 32) | (b << 32);
}
static inline uint32_t
wuffs_base__color_u64__as__color_u32__swap_u32_argb_abgr(uint64_t c) {
uint32_t a = ((uint32_t)(0xFF & (c >> 56)));
uint32_t r = ((uint32_t)(0xFF & (c >> 40)));
uint32_t g = ((uint32_t)(0xFF & (c >> 24)));
uint32_t b = ((uint32_t)(0xFF & (c >> 8)));
return (a << 24) | (b << 16) | (g << 8) | (r << 0);
}
WUFFS_BASE__MAYBE_STATIC wuffs_base__color_u32_argb_premul
wuffs_base__pixel_buffer__color_u32_at(const wuffs_base__pixel_buffer* pb,
uint32_t x,
uint32_t y) {
if (!pb || (x >= pb->pixcfg.private_impl.width) ||
(y >= pb->pixcfg.private_impl.height)) {
return 0;
}
if (wuffs_base__pixel_format__is_planar(&pb->pixcfg.private_impl.pixfmt)) {
return 0;
}
size_t stride = pb->private_impl.planes[0].stride;
const uint8_t* row = pb->private_impl.planes[0].ptr + (stride * ((size_t)y));
switch (pb->pixcfg.private_impl.pixfmt.repr) {
case WUFFS_BASE__PIXEL_FORMAT__BGRA_PREMUL:
case WUFFS_BASE__PIXEL_FORMAT__BGRA_BINARY:
return wuffs_base__peek_u32le__no_bounds_check(row + (4 * ((size_t)x)));
case WUFFS_BASE__PIXEL_FORMAT__INDEXED__BGRA_PREMUL:
case WUFFS_BASE__PIXEL_FORMAT__INDEXED__BGRA_BINARY: {
uint8_t* palette = pb->private_impl.planes[3].ptr;
return wuffs_base__peek_u32le__no_bounds_check(palette +
(4 * ((size_t)row[x])));
}
case WUFFS_BASE__PIXEL_FORMAT__Y:
return 0xFF000000 | (0x00010101 * ((uint32_t)(row[x])));
case WUFFS_BASE__PIXEL_FORMAT__Y_16LE:
return 0xFF000000 | (0x00010101 * ((uint32_t)(row[(2 * x) + 1])));
case WUFFS_BASE__PIXEL_FORMAT__Y_16BE:
return 0xFF000000 | (0x00010101 * ((uint32_t)(row[(2 * x) + 0])));
case WUFFS_BASE__PIXEL_FORMAT__INDEXED__BGRA_NONPREMUL: {
uint8_t* palette = pb->private_impl.planes[3].ptr;
return wuffs_base__color_u32_argb_nonpremul__as__color_u32_argb_premul(
wuffs_base__peek_u32le__no_bounds_check(palette +
(4 * ((size_t)row[x]))));
}
case WUFFS_BASE__PIXEL_FORMAT__BGR_565:
return wuffs_base__color_u16_rgb_565__as__color_u32_argb_premul(
wuffs_base__peek_u16le__no_bounds_check(row + (2 * ((size_t)x))));
case WUFFS_BASE__PIXEL_FORMAT__BGR:
return 0xFF000000 |
wuffs_base__peek_u24le__no_bounds_check(row + (3 * ((size_t)x)));
case WUFFS_BASE__PIXEL_FORMAT__BGRA_NONPREMUL:
return wuffs_base__color_u32_argb_nonpremul__as__color_u32_argb_premul(
wuffs_base__peek_u32le__no_bounds_check(row + (4 * ((size_t)x))));
case WUFFS_BASE__PIXEL_FORMAT__BGRA_NONPREMUL_4X16LE:
return wuffs_base__color_u64_argb_nonpremul__as__color_u32_argb_premul(
wuffs_base__peek_u64le__no_bounds_check(row + (8 * ((size_t)x))));
case WUFFS_BASE__PIXEL_FORMAT__BGRX:
return 0xFF000000 |
wuffs_base__peek_u32le__no_bounds_check(row + (4 * ((size_t)x)));
case WUFFS_BASE__PIXEL_FORMAT__RGB:
return wuffs_base__swap_u32_argb_abgr(
0xFF000000 |
wuffs_base__peek_u24le__no_bounds_check(row + (3 * ((size_t)x))));
case WUFFS_BASE__PIXEL_FORMAT__RGBA_NONPREMUL:
return wuffs_base__swap_u32_argb_abgr(
wuffs_base__color_u32_argb_nonpremul__as__color_u32_argb_premul(
wuffs_base__peek_u32le__no_bounds_check(row +
(4 * ((size_t)x)))));
case WUFFS_BASE__PIXEL_FORMAT__RGBA_PREMUL:
case WUFFS_BASE__PIXEL_FORMAT__RGBA_BINARY:
return wuffs_base__swap_u32_argb_abgr(
wuffs_base__peek_u32le__no_bounds_check(row + (4 * ((size_t)x))));
case WUFFS_BASE__PIXEL_FORMAT__RGBX:
return wuffs_base__swap_u32_argb_abgr(
0xFF000000 |
wuffs_base__peek_u32le__no_bounds_check(row + (4 * ((size_t)x))));
default:
break;
}
return 0;
}
WUFFS_BASE__MAYBE_STATIC wuffs_base__status
wuffs_base__pixel_buffer__set_color_u32_at(
wuffs_base__pixel_buffer* pb,
uint32_t x,
uint32_t y,
wuffs_base__color_u32_argb_premul color) {
if (!pb) {
return wuffs_base__make_status(wuffs_base__error__bad_receiver);
}
if ((x >= pb->pixcfg.private_impl.width) ||
(y >= pb->pixcfg.private_impl.height)) {
return wuffs_base__make_status(wuffs_base__error__bad_argument);
}
if (wuffs_base__pixel_format__is_planar(&pb->pixcfg.private_impl.pixfmt)) {
return wuffs_base__make_status(wuffs_base__error__unsupported_option);
}
size_t stride = pb->private_impl.planes[0].stride;
uint8_t* row = pb->private_impl.planes[0].ptr + (stride * ((size_t)y));
switch (pb->pixcfg.private_impl.pixfmt.repr) {
case WUFFS_BASE__PIXEL_FORMAT__BGRA_PREMUL:
case WUFFS_BASE__PIXEL_FORMAT__BGRX:
wuffs_base__poke_u32le__no_bounds_check(row + (4 * ((size_t)x)), color);
break;
case WUFFS_BASE__PIXEL_FORMAT__Y:
wuffs_base__poke_u8__no_bounds_check(
row + ((size_t)x),
wuffs_base__color_u32_argb_premul__as__color_u8_gray(color));
break;
case WUFFS_BASE__PIXEL_FORMAT__Y_16LE:
wuffs_base__poke_u16le__no_bounds_check(
row + (2 * ((size_t)x)),
wuffs_base__color_u32_argb_premul__as__color_u16_gray(color));
break;
case WUFFS_BASE__PIXEL_FORMAT__Y_16BE:
wuffs_base__poke_u16be__no_bounds_check(
row + (2 * ((size_t)x)),
wuffs_base__color_u32_argb_premul__as__color_u16_gray(color));
break;
case WUFFS_BASE__PIXEL_FORMAT__INDEXED__BGRA_NONPREMUL:
case WUFFS_BASE__PIXEL_FORMAT__INDEXED__BGRA_PREMUL:
case WUFFS_BASE__PIXEL_FORMAT__INDEXED__BGRA_BINARY:
wuffs_base__poke_u8__no_bounds_check(
row + ((size_t)x), wuffs_base__pixel_palette__closest_element(
wuffs_base__pixel_buffer__palette(pb),
pb->pixcfg.private_impl.pixfmt, color));
break;
case WUFFS_BASE__PIXEL_FORMAT__BGR_565:
wuffs_base__poke_u16le__no_bounds_check(
row + (2 * ((size_t)x)),
wuffs_base__color_u32_argb_premul__as__color_u16_rgb_565(color));
break;
case WUFFS_BASE__PIXEL_FORMAT__BGR:
wuffs_base__poke_u24le__no_bounds_check(row + (3 * ((size_t)x)), color);
break;
case WUFFS_BASE__PIXEL_FORMAT__BGRA_NONPREMUL:
wuffs_base__poke_u32le__no_bounds_check(
row + (4 * ((size_t)x)),
wuffs_base__color_u32_argb_premul__as__color_u32_argb_nonpremul(
color));
break;
case WUFFS_BASE__PIXEL_FORMAT__BGRA_NONPREMUL_4X16LE:
wuffs_base__poke_u64le__no_bounds_check(
row + (8 * ((size_t)x)),
wuffs_base__color_u32_argb_premul__as__color_u64_argb_nonpremul(
color));
break;
case WUFFS_BASE__PIXEL_FORMAT__RGB:
wuffs_base__poke_u24le__no_bounds_check(
row + (3 * ((size_t)x)), wuffs_base__swap_u32_argb_abgr(color));
break;
case WUFFS_BASE__PIXEL_FORMAT__RGBA_NONPREMUL:
wuffs_base__poke_u32le__no_bounds_check(
row + (4 * ((size_t)x)),
wuffs_base__color_u32_argb_premul__as__color_u32_argb_nonpremul(
wuffs_base__swap_u32_argb_abgr(color)));
break;
case WUFFS_BASE__PIXEL_FORMAT__RGBA_PREMUL:
case WUFFS_BASE__PIXEL_FORMAT__RGBX:
wuffs_base__poke_u32le__no_bounds_check(
row + (4 * ((size_t)x)), wuffs_base__swap_u32_argb_abgr(color));
break;
default:
return wuffs_base__make_status(wuffs_base__error__unsupported_option);
}
return wuffs_base__make_status(NULL);
}
static inline void
wuffs_base__pixel_buffer__set_color_u32_fill_rect__xx(
wuffs_base__pixel_buffer* pb,
wuffs_base__rect_ie_u32 rect,
uint16_t color) {
size_t stride = pb->private_impl.planes[0].stride;
uint32_t width = wuffs_base__rect_ie_u32__width(&rect);
if ((stride == (2 * ((uint64_t)width))) && (rect.min_incl_x == 0)) {
uint8_t* ptr =
pb->private_impl.planes[0].ptr + (stride * ((size_t)rect.min_incl_y));
uint32_t height = wuffs_base__rect_ie_u32__height(&rect);
size_t n;
for (n = ((size_t)width) * ((size_t)height); n > 0; n--) {
wuffs_base__poke_u16le__no_bounds_check(ptr, color);
ptr += 2;
}
return;
}
uint32_t y;
for (y = rect.min_incl_y; y < rect.max_excl_y; y++) {
uint8_t* ptr = pb->private_impl.planes[0].ptr + (stride * ((size_t)y)) +
(2 * ((size_t)rect.min_incl_x));
uint32_t n;
for (n = width; n > 0; n--) {
wuffs_base__poke_u16le__no_bounds_check(ptr, color);
ptr += 2;
}
}
}
static inline void
wuffs_base__pixel_buffer__set_color_u32_fill_rect__xxx(
wuffs_base__pixel_buffer* pb,
wuffs_base__rect_ie_u32 rect,
uint32_t color) {
size_t stride = pb->private_impl.planes[0].stride;
uint32_t width = wuffs_base__rect_ie_u32__width(&rect);
if ((stride == (3 * ((uint64_t)width))) && (rect.min_incl_x == 0)) {
uint8_t* ptr =
pb->private_impl.planes[0].ptr + (stride * ((size_t)rect.min_incl_y));
uint32_t height = wuffs_base__rect_ie_u32__height(&rect);
size_t n;
for (n = ((size_t)width) * ((size_t)height); n > 0; n--) {
wuffs_base__poke_u24le__no_bounds_check(ptr, color);
ptr += 3;
}
return;
}
uint32_t y;
for (y = rect.min_incl_y; y < rect.max_excl_y; y++) {
uint8_t* ptr = pb->private_impl.planes[0].ptr + (stride * ((size_t)y)) +
(3 * ((size_t)rect.min_incl_x));
uint32_t n;
for (n = width; n > 0; n--) {
wuffs_base__poke_u24le__no_bounds_check(ptr, color);
ptr += 3;
}
}
}
static inline void
wuffs_base__pixel_buffer__set_color_u32_fill_rect__xxxx(
wuffs_base__pixel_buffer* pb,
wuffs_base__rect_ie_u32 rect,
uint32_t color) {
size_t stride = pb->private_impl.planes[0].stride;
uint32_t width = wuffs_base__rect_ie_u32__width(&rect);
if ((stride == (4 * ((uint64_t)width))) && (rect.min_incl_x == 0)) {
uint8_t* ptr =
pb->private_impl.planes[0].ptr + (stride * ((size_t)rect.min_incl_y));
uint32_t height = wuffs_base__rect_ie_u32__height(&rect);
size_t n;
for (n = ((size_t)width) * ((size_t)height); n > 0; n--) {
wuffs_base__poke_u32le__no_bounds_check(ptr, color);
ptr += 4;
}
return;
}
uint32_t y;
for (y = rect.min_incl_y; y < rect.max_excl_y; y++) {
uint8_t* ptr = pb->private_impl.planes[0].ptr + (stride * ((size_t)y)) +
(4 * ((size_t)rect.min_incl_x));
uint32_t n;
for (n = width; n > 0; n--) {
wuffs_base__poke_u32le__no_bounds_check(ptr, color);
ptr += 4;
}
}
}
static inline void
wuffs_base__pixel_buffer__set_color_u32_fill_rect__xxxxxxxx(
wuffs_base__pixel_buffer* pb,
wuffs_base__rect_ie_u32 rect,
uint64_t color) {
size_t stride = pb->private_impl.planes[0].stride;
uint32_t width = wuffs_base__rect_ie_u32__width(&rect);
if ((stride == (8 * ((uint64_t)width))) && (rect.min_incl_x == 0)) {
uint8_t* ptr =
pb->private_impl.planes[0].ptr + (stride * ((size_t)rect.min_incl_y));
uint32_t height = wuffs_base__rect_ie_u32__height(&rect);
size_t n;
for (n = ((size_t)width) * ((size_t)height); n > 0; n--) {
wuffs_base__poke_u64le__no_bounds_check(ptr, color);
ptr += 8;
}
return;
}
uint32_t y;
for (y = rect.min_incl_y; y < rect.max_excl_y; y++) {
uint8_t* ptr = pb->private_impl.planes[0].ptr + (stride * ((size_t)y)) +
(8 * ((size_t)rect.min_incl_x));
uint32_t n;
for (n = width; n > 0; n--) {
wuffs_base__poke_u64le__no_bounds_check(ptr, color);
ptr += 8;
}
}
}
WUFFS_BASE__MAYBE_STATIC wuffs_base__status
wuffs_base__pixel_buffer__set_color_u32_fill_rect(
wuffs_base__pixel_buffer* pb,
wuffs_base__rect_ie_u32 rect,
wuffs_base__color_u32_argb_premul color) {
if (!pb) {
return wuffs_base__make_status(wuffs_base__error__bad_receiver);
} else if (wuffs_base__rect_ie_u32__is_empty(&rect)) {
return wuffs_base__make_status(NULL);
}
wuffs_base__rect_ie_u32 bounds =
wuffs_base__pixel_config__bounds(&pb->pixcfg);
if (!wuffs_base__rect_ie_u32__contains_rect(&bounds, rect)) {
return wuffs_base__make_status(wuffs_base__error__bad_argument);
}
if (wuffs_base__pixel_format__is_planar(&pb->pixcfg.private_impl.pixfmt)) {
return wuffs_base__make_status(wuffs_base__error__unsupported_option);
}
switch (pb->pixcfg.private_impl.pixfmt.repr) {
case WUFFS_BASE__PIXEL_FORMAT__BGRA_PREMUL:
case WUFFS_BASE__PIXEL_FORMAT__BGRX:
wuffs_base__pixel_buffer__set_color_u32_fill_rect__xxxx(pb, rect, color);
return wuffs_base__make_status(NULL);
case WUFFS_BASE__PIXEL_FORMAT__BGR_565:
wuffs_base__pixel_buffer__set_color_u32_fill_rect__xx(
pb, rect,
wuffs_base__color_u32_argb_premul__as__color_u16_rgb_565(color));
return wuffs_base__make_status(NULL);
case WUFFS_BASE__PIXEL_FORMAT__BGR:
wuffs_base__pixel_buffer__set_color_u32_fill_rect__xxx(pb, rect, color);
return wuffs_base__make_status(NULL);
case WUFFS_BASE__PIXEL_FORMAT__BGRA_NONPREMUL:
wuffs_base__pixel_buffer__set_color_u32_fill_rect__xxxx(
pb, rect,
wuffs_base__color_u32_argb_premul__as__color_u32_argb_nonpremul(
color));
return wuffs_base__make_status(NULL);
case WUFFS_BASE__PIXEL_FORMAT__BGRA_NONPREMUL_4X16LE:
wuffs_base__pixel_buffer__set_color_u32_fill_rect__xxxxxxxx(
pb, rect,
wuffs_base__color_u32_argb_premul__as__color_u64_argb_nonpremul(
color));
return wuffs_base__make_status(NULL);
case WUFFS_BASE__PIXEL_FORMAT__RGBA_NONPREMUL:
wuffs_base__pixel_buffer__set_color_u32_fill_rect__xxxx(
pb, rect,
wuffs_base__color_u32_argb_premul__as__color_u32_argb_nonpremul(
wuffs_base__swap_u32_argb_abgr(color)));
return wuffs_base__make_status(NULL);
case WUFFS_BASE__PIXEL_FORMAT__RGBA_PREMUL:
case WUFFS_BASE__PIXEL_FORMAT__RGBX:
wuffs_base__pixel_buffer__set_color_u32_fill_rect__xxxx(
pb, rect, wuffs_base__swap_u32_argb_abgr(color));
return wuffs_base__make_status(NULL);
}
uint32_t y;
for (y = rect.min_incl_y; y < rect.max_excl_y; y++) {
uint32_t x;
for (x = rect.min_incl_x; x < rect.max_excl_x; x++) {
wuffs_base__pixel_buffer__set_color_u32_at(pb, x, y, color);
}
}
return wuffs_base__make_status(NULL);
}
WUFFS_BASE__MAYBE_STATIC uint8_t
wuffs_base__pixel_palette__closest_element(
wuffs_base__slice_u8 palette_slice,
wuffs_base__pixel_format palette_format,
wuffs_base__color_u32_argb_premul c) {
size_t n = palette_slice.len / 4;
if (n > (WUFFS_BASE__PIXEL_FORMAT__INDEXED__PALETTE_BYTE_LENGTH / 4)) {
n = (WUFFS_BASE__PIXEL_FORMAT__INDEXED__PALETTE_BYTE_LENGTH / 4);
}
size_t best_index = 0;
uint64_t best_score = 0xFFFFFFFFFFFFFFFF;
uint32_t ca = 0x101 * (0xFF & (c >> 24));
uint32_t cr = 0x101 * (0xFF & (c >> 16));
uint32_t cg = 0x101 * (0xFF & (c >> 8));
uint32_t cb = 0x101 * (0xFF & (c >> 0));
switch (palette_format.repr) {
case WUFFS_BASE__PIXEL_FORMAT__INDEXED__BGRA_NONPREMUL:
case WUFFS_BASE__PIXEL_FORMAT__INDEXED__BGRA_PREMUL:
case WUFFS_BASE__PIXEL_FORMAT__INDEXED__BGRA_BINARY: {
bool nonpremul = palette_format.repr ==
WUFFS_BASE__PIXEL_FORMAT__INDEXED__BGRA_NONPREMUL;
size_t i;
for (i = 0; i < n; i++) {
uint32_t pb = 0x101 * ((uint32_t)(palette_slice.ptr[(4 * i) + 0]));
uint32_t pg = 0x101 * ((uint32_t)(palette_slice.ptr[(4 * i) + 1]));
uint32_t pr = 0x101 * ((uint32_t)(palette_slice.ptr[(4 * i) + 2]));
uint32_t pa = 0x101 * ((uint32_t)(palette_slice.ptr[(4 * i) + 3]));
if (nonpremul && (pa != 0xFFFF)) {
pb = (pb * pa) / 0xFFFF;
pg = (pg * pa) / 0xFFFF;
pr = (pr * pa) / 0xFFFF;
}
pb -= cb;
pg -= cg;
pr -= cr;
pa -= ca;
uint64_t score = ((uint64_t)(pb * pb)) + ((uint64_t)(pg * pg)) +
((uint64_t)(pr * pr)) + ((uint64_t)(pa * pa));
if (best_score > score) {
best_score = score;
best_index = i;
}
}
break;
}
}
return (uint8_t)best_index;
}
static inline uint32_t
wuffs_base__composite_nonpremul_nonpremul_u32_axxx(uint32_t dst_nonpremul,
uint32_t src_nonpremul) {
uint32_t da = 0x101 * (0xFF & (dst_nonpremul >> 24));
if (da == 0) {
return src_nonpremul;
}
uint32_t dr = 0x101 * (0xFF & (dst_nonpremul >> 16));
uint32_t dg = 0x101 * (0xFF & (dst_nonpremul >> 8));
uint32_t db = 0x101 * (0xFF & (dst_nonpremul >> 0));
uint32_t sa = 0x101 * (0xFF & (src_nonpremul >> 24));
uint32_t sr = 0x101 * (0xFF & (src_nonpremul >> 16));
uint32_t sg = 0x101 * (0xFF & (src_nonpremul >> 8));
uint32_t sb = 0x101 * (0xFF & (src_nonpremul >> 0));
dr = (dr * da) / 0xFFFF;
dg = (dg * da) / 0xFFFF;
db = (db * da) / 0xFFFF;
uint32_t ia = 0xFFFF - sa;
da = sa + ((da * ia) / 0xFFFF);
dr = ((sr * sa) + (dr * ia)) / 0xFFFF;
dg = ((sg * sa) + (dg * ia)) / 0xFFFF;
db = ((sb * sa) + (db * ia)) / 0xFFFF;
if (da != 0) {
dr = (dr * 0xFFFF) / da;
dg = (dg * 0xFFFF) / da;
db = (db * 0xFFFF) / da;
}
da >>= 8;
dr >>= 8;
dg >>= 8;
db >>= 8;
return (db << 0) | (dg << 8) | (dr << 16) | (da << 24);
}
static inline uint64_t
wuffs_base__composite_nonpremul_nonpremul_u64_axxx(uint64_t dst_nonpremul,
uint64_t src_nonpremul) {
uint64_t da = 0xFFFF & (dst_nonpremul >> 48);
if (da == 0) {
return src_nonpremul;
}
uint64_t dr = 0xFFFF & (dst_nonpremul >> 32);
uint64_t dg = 0xFFFF & (dst_nonpremul >> 16);
uint64_t db = 0xFFFF & (dst_nonpremul >> 0);
uint64_t sa = 0xFFFF & (src_nonpremul >> 48);
uint64_t sr = 0xFFFF & (src_nonpremul >> 32);
uint64_t sg = 0xFFFF & (src_nonpremul >> 16);
uint64_t sb = 0xFFFF & (src_nonpremul >> 0);
dr = (dr * da) / 0xFFFF;
dg = (dg * da) / 0xFFFF;
db = (db * da) / 0xFFFF;
uint64_t ia = 0xFFFF - sa;
da = sa + ((da * ia) / 0xFFFF);
dr = ((sr * sa) + (dr * ia)) / 0xFFFF;
dg = ((sg * sa) + (dg * ia)) / 0xFFFF;
db = ((sb * sa) + (db * ia)) / 0xFFFF;
if (da != 0) {
dr = (dr * 0xFFFF) / da;
dg = (dg * 0xFFFF) / da;
db = (db * 0xFFFF) / da;
}
return (db << 0) | (dg << 16) | (dr << 32) | (da << 48);
}
static inline uint32_t
wuffs_base__composite_nonpremul_premul_u32_axxx(uint32_t dst_nonpremul,
uint32_t src_premul) {
uint32_t da = 0x101 * (0xFF & (dst_nonpremul >> 24));
uint32_t dr = 0x101 * (0xFF & (dst_nonpremul >> 16));
uint32_t dg = 0x101 * (0xFF & (dst_nonpremul >> 8));
uint32_t db = 0x101 * (0xFF & (dst_nonpremul >> 0));
uint32_t sa = 0x101 * (0xFF & (src_premul >> 24));
uint32_t sr = 0x101 * (0xFF & (src_premul >> 16));
uint32_t sg = 0x101 * (0xFF & (src_premul >> 8));
uint32_t sb = 0x101 * (0xFF & (src_premul >> 0));
dr = (dr * da) / 0xFFFF;
dg = (dg * da) / 0xFFFF;
db = (db * da) / 0xFFFF;
uint32_t ia = 0xFFFF - sa;
da = sa + ((da * ia) / 0xFFFF);
dr = sr + ((dr * ia) / 0xFFFF);
dg = sg + ((dg * ia) / 0xFFFF);
db = sb + ((db * ia) / 0xFFFF);
if (da != 0) {
dr = (dr * 0xFFFF) / da;
dg = (dg * 0xFFFF) / da;
db = (db * 0xFFFF) / da;
}
da >>= 8;
dr >>= 8;
dg >>= 8;
db >>= 8;
return (db << 0) | (dg << 8) | (dr << 16) | (da << 24);
}
static inline uint64_t
wuffs_base__composite_nonpremul_premul_u64_axxx(uint64_t dst_nonpremul,
uint64_t src_premul) {
uint64_t da = 0xFFFF & (dst_nonpremul >> 48);
uint64_t dr = 0xFFFF & (dst_nonpremul >> 32);
uint64_t dg = 0xFFFF & (dst_nonpremul >> 16);
uint64_t db = 0xFFFF & (dst_nonpremul >> 0);
uint64_t sa = 0xFFFF & (src_premul >> 48);
uint64_t sr = 0xFFFF & (src_premul >> 32);
uint64_t sg = 0xFFFF & (src_premul >> 16);
uint64_t sb = 0xFFFF & (src_premul >> 0);
dr = (dr * da) / 0xFFFF;
dg = (dg * da) / 0xFFFF;
db = (db * da) / 0xFFFF;
uint64_t ia = 0xFFFF - sa;
da = sa + ((da * ia) / 0xFFFF);
dr = sr + ((dr * ia) / 0xFFFF);
dg = sg + ((dg * ia) / 0xFFFF);
db = sb + ((db * ia) / 0xFFFF);
if (da != 0) {
dr = (dr * 0xFFFF) / da;
dg = (dg * 0xFFFF) / da;
db = (db * 0xFFFF) / da;
}
return (db << 0) | (dg << 16) | (dr << 32) | (da << 48);
}
static inline uint32_t
wuffs_base__composite_premul_nonpremul_u32_axxx(uint32_t dst_premul,
uint32_t src_nonpremul) {
uint32_t da = 0x101 * (0xFF & (dst_premul >> 24));
uint32_t dr = 0x101 * (0xFF & (dst_premul >> 16));
uint32_t dg = 0x101 * (0xFF & (dst_premul >> 8));
uint32_t db = 0x101 * (0xFF & (dst_premul >> 0));
uint32_t sa = 0x101 * (0xFF & (src_nonpremul >> 24));
uint32_t sr = 0x101 * (0xFF & (src_nonpremul >> 16));
uint32_t sg = 0x101 * (0xFF & (src_nonpremul >> 8));
uint32_t sb = 0x101 * (0xFF & (src_nonpremul >> 0));
uint32_t ia = 0xFFFF - sa;
da = sa + ((da * ia) / 0xFFFF);
dr = ((sr * sa) + (dr * ia)) / 0xFFFF;
dg = ((sg * sa) + (dg * ia)) / 0xFFFF;
db = ((sb * sa) + (db * ia)) / 0xFFFF;
da >>= 8;
dr >>= 8;
dg >>= 8;
db >>= 8;
return (db << 0) | (dg << 8) | (dr << 16) | (da << 24);
}
static inline uint64_t
wuffs_base__composite_premul_nonpremul_u64_axxx(uint64_t dst_premul,
uint64_t src_nonpremul) {
uint64_t da = 0xFFFF & (dst_premul >> 48);
uint64_t dr = 0xFFFF & (dst_premul >> 32);
uint64_t dg = 0xFFFF & (dst_premul >> 16);
uint64_t db = 0xFFFF & (dst_premul >> 0);
uint64_t sa = 0xFFFF & (src_nonpremul >> 48);
uint64_t sr = 0xFFFF & (src_nonpremul >> 32);
uint64_t sg = 0xFFFF & (src_nonpremul >> 16);
uint64_t sb = 0xFFFF & (src_nonpremul >> 0);
uint64_t ia = 0xFFFF - sa;
da = sa + ((da * ia) / 0xFFFF);
dr = ((sr * sa) + (dr * ia)) / 0xFFFF;
dg = ((sg * sa) + (dg * ia)) / 0xFFFF;
db = ((sb * sa) + (db * ia)) / 0xFFFF;
return (db << 0) | (dg << 16) | (dr << 32) | (da << 48);
}
static inline uint32_t
wuffs_base__composite_premul_premul_u32_axxx(uint32_t dst_premul,
uint32_t src_premul) {
uint32_t da = 0x101 * (0xFF & (dst_premul >> 24));
uint32_t dr = 0x101 * (0xFF & (dst_premul >> 16));
uint32_t dg = 0x101 * (0xFF & (dst_premul >> 8));
uint32_t db = 0x101 * (0xFF & (dst_premul >> 0));
uint32_t sa = 0x101 * (0xFF & (src_premul >> 24));
uint32_t sr = 0x101 * (0xFF & (src_premul >> 16));
uint32_t sg = 0x101 * (0xFF & (src_premul >> 8));
uint32_t sb = 0x101 * (0xFF & (src_premul >> 0));
uint32_t ia = 0xFFFF - sa;
da = sa + ((da * ia) / 0xFFFF);
dr = sr + ((dr * ia) / 0xFFFF);
dg = sg + ((dg * ia) / 0xFFFF);
db = sb + ((db * ia) / 0xFFFF);
da >>= 8;
dr >>= 8;
dg >>= 8;
db >>= 8;
return (db << 0) | (dg << 8) | (dr << 16) | (da << 24);
}
static uint64_t
wuffs_base__pixel_swizzler__squash_align4_bgr_565_8888(uint8_t* dst_ptr,
size_t dst_len,
const uint8_t* src_ptr,
size_t src_len,
bool nonpremul) {
size_t len = (dst_len < src_len ? dst_len : src_len) / 4;
uint8_t* d = dst_ptr;
const uint8_t* s = src_ptr;
size_t n = len;
while (n--) {
uint32_t argb = wuffs_base__peek_u32le__no_bounds_check(s);
if (nonpremul) {
argb =
wuffs_base__color_u32_argb_nonpremul__as__color_u32_argb_premul(argb);
}
uint32_t b5 = 0x1F & (argb >> (8 - 5));
uint32_t g6 = 0x3F & (argb >> (16 - 6));
uint32_t r5 = 0x1F & (argb >> (24 - 5));
uint32_t alpha = argb & 0xFF000000;
wuffs_base__poke_u32le__no_bounds_check(
d, alpha | (r5 << 11) | (g6 << 5) | (b5 << 0));
s += 4;
d += 4;
}
return len;
}
static uint64_t
wuffs_base__pixel_swizzler__swap_rgb_bgr(uint8_t* dst_ptr,
size_t dst_len,
uint8_t* dst_palette_ptr,
size_t dst_palette_len,
const uint8_t* src_ptr,
size_t src_len) {
size_t len = (dst_len < src_len ? dst_len : src_len) / 3;
uint8_t* d = dst_ptr;
const uint8_t* s = src_ptr;
size_t n = len;
while (n--) {
uint8_t s0 = s[0];
uint8_t s1 = s[1];
uint8_t s2 = s[2];
d[0] = s2;
d[1] = s1;
d[2] = s0;
s += 3;
d += 3;
}
return len;
}
#if defined(WUFFS_BASE__CPU_ARCH__X86_FAMILY)
WUFFS_BASE__MAYBE_ATTRIBUTE_TARGET("pclmul,popcnt,sse4.2")
static uint64_t
wuffs_base__pixel_swizzler__swap_rgbx_bgrx__sse42(uint8_t* dst_ptr,
size_t dst_len,
uint8_t* dst_palette_ptr,
size_t dst_palette_len,
const uint8_t* src_ptr,
size_t src_len) {
size_t len = (dst_len < src_len ? dst_len : src_len) / 4;
uint8_t* d = dst_ptr;
const uint8_t* s = src_ptr;
size_t n = len;
__m128i shuffle = _mm_set_epi8(+0x0F, +0x0C, +0x0D, +0x0E,
+0x0B, +0x08, +0x09, +0x0A,
+0x07, +0x04, +0x05, +0x06,
+0x03, +0x00, +0x01, +0x02);
while (n >= 4) {
__m128i x;
x = _mm_lddqu_si128((const __m128i*)(const void*)s);
x = _mm_shuffle_epi8(x, shuffle);
_mm_storeu_si128((__m128i*)(void*)d, x);
s += 4 * 4;
d += 4 * 4;
n -= 4;
}
while (n--) {
uint8_t s0 = s[0];
uint8_t s1 = s[1];
uint8_t s2 = s[2];
uint8_t s3 = s[3];
d[0] = s2;
d[1] = s1;
d[2] = s0;
d[3] = s3;
s += 4;
d += 4;
}
return len;
}
#endif
static uint64_t
wuffs_base__pixel_swizzler__swap_rgbx_bgrx(uint8_t* dst_ptr,
size_t dst_len,
uint8_t* dst_palette_ptr,
size_t dst_palette_len,
const uint8_t* src_ptr,
size_t src_len) {
size_t len = (dst_len < src_len ? dst_len : src_len) / 4;
uint8_t* d = dst_ptr;
const uint8_t* s = src_ptr;
size_t n = len;
while (n--) {
uint8_t s0 = s[0];
uint8_t s1 = s[1];
uint8_t s2 = s[2];
uint8_t s3 = s[3];
d[0] = s2;
d[1] = s1;
d[2] = s0;
d[3] = s3;
s += 4;
d += 4;
}
return len;
}
static uint64_t
wuffs_base__pixel_swizzler__copy_1_1(uint8_t* dst_ptr,
size_t dst_len,
uint8_t* dst_palette_ptr,
size_t dst_palette_len,
const uint8_t* src_ptr,
size_t src_len) {
size_t len = (dst_len < src_len) ? dst_len : src_len;
if (len > 0) {
memmove(dst_ptr, src_ptr, len);
}
return len;
}
static uint64_t
wuffs_base__pixel_swizzler__copy_2_2(uint8_t* dst_ptr,
size_t dst_len,
uint8_t* dst_palette_ptr,
size_t dst_palette_len,
const uint8_t* src_ptr,
size_t src_len) {
size_t dst_len2 = dst_len / 2;
size_t src_len2 = src_len / 2;
size_t len = (dst_len2 < src_len2) ? dst_len2 : src_len2;
if (len > 0) {
memmove(dst_ptr, src_ptr, len * 2);
}
return len;
}
static uint64_t
wuffs_base__pixel_swizzler__copy_3_3(uint8_t* dst_ptr,
size_t dst_len,
uint8_t* dst_palette_ptr,
size_t dst_palette_len,
const uint8_t* src_ptr,
size_t src_len) {
size_t dst_len3 = dst_len / 3;
size_t src_len3 = src_len / 3;
size_t len = (dst_len3 < src_len3) ? dst_len3 : src_len3;
if (len > 0) {
memmove(dst_ptr, src_ptr, len * 3);
}
return len;
}
static uint64_t
wuffs_base__pixel_swizzler__copy_4_4(uint8_t* dst_ptr,
size_t dst_len,
uint8_t* dst_palette_ptr,
size_t dst_palette_len,
const uint8_t* src_ptr,
size_t src_len) {
size_t dst_len4 = dst_len / 4;
size_t src_len4 = src_len / 4;
size_t len = (dst_len4 < src_len4) ? dst_len4 : src_len4;
if (len > 0) {
memmove(dst_ptr, src_ptr, len * 4);
}
return len;
}
static uint64_t
wuffs_base__pixel_swizzler__copy_8_8(uint8_t* dst_ptr,
size_t dst_len,
uint8_t* dst_palette_ptr,
size_t dst_palette_len,
const uint8_t* src_ptr,
size_t src_len) {
size_t dst_len8 = dst_len / 8;
size_t src_len8 = src_len / 8;
size_t len = (dst_len8 < src_len8) ? dst_len8 : src_len8;
if (len > 0) {
memmove(dst_ptr, src_ptr, len * 8);
}
return len;
}
static uint64_t
wuffs_base__pixel_swizzler__bgr_565__bgr(uint8_t* dst_ptr,
size_t dst_len,
uint8_t* dst_palette_ptr,
size_t dst_palette_len,
const uint8_t* src_ptr,
size_t src_len) {
size_t dst_len2 = dst_len / 2;
size_t src_len3 = src_len / 3;
size_t len = (dst_len2 < src_len3) ? dst_len2 : src_len3;
uint8_t* d = dst_ptr;
const uint8_t* s = src_ptr;
size_t n = len;
while (n >= 1) {
uint32_t b5 = s[0] >> 3;
uint32_t g6 = s[1] >> 2;
uint32_t r5 = s[2] >> 3;
uint32_t rgb_565 = (r5 << 11) | (g6 << 5) | (b5 << 0);
wuffs_base__poke_u16le__no_bounds_check(d + (0 * 2), (uint16_t)rgb_565);
s += 1 * 3;
d += 1 * 2;
n -= 1;
}
return len;
}
static uint64_t
wuffs_base__pixel_swizzler__bgr_565__bgrx(uint8_t* dst_ptr,
size_t dst_len,
uint8_t* dst_palette_ptr,
size_t dst_palette_len,
const uint8_t* src_ptr,
size_t src_len) {
size_t dst_len2 = dst_len / 2;
size_t src_len4 = src_len / 4;
size_t len = (dst_len2 < src_len4) ? dst_len2 : src_len4;
uint8_t* d = dst_ptr;
const uint8_t* s = src_ptr;
size_t n = len;
while (n >= 1) {
uint32_t b5 = s[0] >> 3;
uint32_t g6 = s[1] >> 2;
uint32_t r5 = s[2] >> 3;
uint32_t rgb_565 = (r5 << 11) | (g6 << 5) | (b5 << 0);
wuffs_base__poke_u16le__no_bounds_check(d + (0 * 2), (uint16_t)rgb_565);
s += 1 * 4;
d += 1 * 2;
n -= 1;
}
return len;
}
static uint64_t
wuffs_base__pixel_swizzler__bgr_565__bgra_nonpremul__src(
uint8_t* dst_ptr,
size_t dst_len,
uint8_t* dst_palette_ptr,
size_t dst_palette_len,
const uint8_t* src_ptr,
size_t src_len) {
size_t dst_len2 = dst_len / 2;
size_t src_len4 = src_len / 4;
size_t len = (dst_len2 < src_len4) ? dst_len2 : src_len4;
uint8_t* d = dst_ptr;
const uint8_t* s = src_ptr;
size_t n = len;
while (n >= 1) {
wuffs_base__poke_u16le__no_bounds_check(
d + (0 * 2),
wuffs_base__color_u32_argb_premul__as__color_u16_rgb_565(
wuffs_base__color_u32_argb_nonpremul__as__color_u32_argb_premul(
wuffs_base__peek_u32le__no_bounds_check(s + (0 * 4)))));
s += 1 * 4;
d += 1 * 2;
n -= 1;
}
return len;
}
static uint64_t
wuffs_base__pixel_swizzler__bgr_565__bgra_nonpremul_4x16le__src(
uint8_t* dst_ptr,
size_t dst_len,
uint8_t* dst_palette_ptr,
size_t dst_palette_len,
const uint8_t* src_ptr,
size_t src_len) {
size_t dst_len2 = dst_len / 2;
size_t src_len8 = src_len / 8;
size_t len = (dst_len2 < src_len8) ? dst_len2 : src_len8;
uint8_t* d = dst_ptr;
const uint8_t* s = src_ptr;
size_t n = len;
while (n >= 1) {
wuffs_base__poke_u16le__no_bounds_check(
d + (0 * 2),
wuffs_base__color_u32_argb_premul__as__color_u16_rgb_565(
wuffs_base__color_u64_argb_nonpremul__as__color_u32_argb_premul(
wuffs_base__peek_u64le__no_bounds_check(s + (0 * 8)))));
s += 1 * 8;
d += 1 * 2;
n -= 1;
}
return len;
}
static uint64_t
wuffs_base__pixel_swizzler__bgr_565__bgra_nonpremul__src_over(
uint8_t* dst_ptr,
size_t dst_len,
uint8_t* dst_palette_ptr,
size_t dst_palette_len,
const uint8_t* src_ptr,
size_t src_len) {
size_t dst_len2 = dst_len / 2;
size_t src_len4 = src_len / 4;
size_t len = (dst_len2 < src_len4) ? dst_len2 : src_len4;
uint8_t* d = dst_ptr;
const uint8_t* s = src_ptr;
size_t n = len;
while (n >= 1) {
uint32_t sa = 0x101 * ((uint32_t)s[3]);
uint32_t sr = 0x101 * ((uint32_t)s[2]);
uint32_t sg = 0x101 * ((uint32_t)s[1]);
uint32_t sb = 0x101 * ((uint32_t)s[0]);
uint32_t old_rgb_565 = wuffs_base__peek_u16le__no_bounds_check(d + (0 * 2));
uint32_t old_r5 = 0x1F & (old_rgb_565 >> 11);
uint32_t dr = (0x8421 * old_r5) >> 4;
uint32_t old_g6 = 0x3F & (old_rgb_565 >> 5);
uint32_t dg = (0x1041 * old_g6) >> 2;
uint32_t old_b5 = 0x1F & (old_rgb_565 >> 0);
uint32_t db = (0x8421 * old_b5) >> 4;
uint32_t ia = 0xFFFF - sa;
dr = ((sr * sa) + (dr * ia)) / 0xFFFF;
dg = ((sg * sa) + (dg * ia)) / 0xFFFF;
db = ((sb * sa) + (db * ia)) / 0xFFFF;
uint32_t new_r5 = 0x1F & (dr >> 11);
uint32_t new_g6 = 0x3F & (dg >> 10);
uint32_t new_b5 = 0x1F & (db >> 11);
uint32_t new_rgb_565 = (new_r5 << 11) | (new_g6 << 5) | (new_b5 << 0);
wuffs_base__poke_u16le__no_bounds_check(d + (0 * 2), (uint16_t)new_rgb_565);
s += 1 * 4;
d += 1 * 2;
n -= 1;
}
return len;
}
static uint64_t
wuffs_base__pixel_swizzler__bgr_565__bgra_nonpremul_4x16le__src_over(
uint8_t* dst_ptr,
size_t dst_len,
uint8_t* dst_palette_ptr,
size_t dst_palette_len,
const uint8_t* src_ptr,
size_t src_len) {
size_t dst_len2 = dst_len / 2;
size_t src_len8 = src_len / 8;
size_t len = (dst_len2 < src_len8) ? dst_len2 : src_len8;
uint8_t* d = dst_ptr;
const uint8_t* s = src_ptr;
size_t n = len;
while (n >= 1) {
uint32_t sa = ((uint32_t)wuffs_base__peek_u16le__no_bounds_check(s + 6));
uint32_t sr = ((uint32_t)wuffs_base__peek_u16le__no_bounds_check(s + 4));
uint32_t sg = ((uint32_t)wuffs_base__peek_u16le__no_bounds_check(s + 2));
uint32_t sb = ((uint32_t)wuffs_base__peek_u16le__no_bounds_check(s + 0));
uint32_t old_rgb_565 = wuffs_base__peek_u16le__no_bounds_check(d + (0 * 2));
uint32_t old_r5 = 0x1F & (old_rgb_565 >> 11);
uint32_t dr = (0x8421 * old_r5) >> 4;
uint32_t old_g6 = 0x3F & (old_rgb_565 >> 5);
uint32_t dg = (0x1041 * old_g6) >> 2;
uint32_t old_b5 = 0x1F & (old_rgb_565 >> 0);
uint32_t db = (0x8421 * old_b5) >> 4;
uint32_t ia = 0xFFFF - sa;
dr = ((sr * sa) + (dr * ia)) / 0xFFFF;
dg = ((sg * sa) + (dg * ia)) / 0xFFFF;
db = ((sb * sa) + (db * ia)) / 0xFFFF;
uint32_t new_r5 = 0x1F & (dr >> 11);
uint32_t new_g6 = 0x3F & (dg >> 10);
uint32_t new_b5 = 0x1F & (db >> 11);
uint32_t new_rgb_565 = (new_r5 << 11) | (new_g6 << 5) | (new_b5 << 0);
wuffs_base__poke_u16le__no_bounds_check(d + (0 * 2), (uint16_t)new_rgb_565);
s += 1 * 8;
d += 1 * 2;
n -= 1;
}
return len;
}
static uint64_t
wuffs_base__pixel_swizzler__bgr_565__bgra_premul__src(uint8_t* dst_ptr,
size_t dst_len,
uint8_t* dst_palette_ptr,
size_t dst_palette_len,
const uint8_t* src_ptr,
size_t src_len) {
size_t dst_len2 = dst_len / 2;
size_t src_len4 = src_len / 4;
size_t len = (dst_len2 < src_len4) ? dst_len2 : src_len4;
uint8_t* d = dst_ptr;
const uint8_t* s = src_ptr;
size_t n = len;
while (n >= 1) {
wuffs_base__poke_u16le__no_bounds_check(
d + (0 * 2), wuffs_base__color_u32_argb_premul__as__color_u16_rgb_565(
wuffs_base__peek_u32le__no_bounds_check(s + (0 * 4))));
s += 1 * 4;
d += 1 * 2;
n -= 1;
}
return len;
}
static uint64_t
wuffs_base__pixel_swizzler__bgr_565__bgra_premul__src_over(
uint8_t* dst_ptr,
size_t dst_len,
uint8_t* dst_palette_ptr,
size_t dst_palette_len,
const uint8_t* src_ptr,
size_t src_len) {
size_t dst_len2 = dst_len / 2;
size_t src_len4 = src_len / 4;
size_t len = (dst_len2 < src_len4) ? dst_len2 : src_len4;
uint8_t* d = dst_ptr;
const uint8_t* s = src_ptr;
size_t n = len;
while (n >= 1) {
uint32_t sa = 0x101 * ((uint32_t)s[3]);
uint32_t sr = 0x101 * ((uint32_t)s[2]);
uint32_t sg = 0x101 * ((uint32_t)s[1]);
uint32_t sb = 0x101 * ((uint32_t)s[0]);
uint32_t old_rgb_565 = wuffs_base__peek_u16le__no_bounds_check(d + (0 * 2));
uint32_t old_r5 = 0x1F & (old_rgb_565 >> 11);
uint32_t dr = (0x8421 * old_r5) >> 4;
uint32_t old_g6 = 0x3F & (old_rgb_565 >> 5);
uint32_t dg = (0x1041 * old_g6) >> 2;
uint32_t old_b5 = 0x1F & (old_rgb_565 >> 0);
uint32_t db = (0x8421 * old_b5) >> 4;
uint32_t ia = 0xFFFF - sa;
dr = sr + ((dr * ia) / 0xFFFF);
dg = sg + ((dg * ia) / 0xFFFF);
db = sb + ((db * ia) / 0xFFFF);
uint32_t new_r5 = 0x1F & (dr >> 11);
uint32_t new_g6 = 0x3F & (dg >> 10);
uint32_t new_b5 = 0x1F & (db >> 11);
uint32_t new_rgb_565 = (new_r5 << 11) | (new_g6 << 5) | (new_b5 << 0);
wuffs_base__poke_u16le__no_bounds_check(d + (0 * 2), (uint16_t)new_rgb_565);
s += 1 * 4;
d += 1 * 2;
n -= 1;
}
return len;
}
static uint64_t
wuffs_base__pixel_swizzler__bgr_565__rgb(uint8_t* dst_ptr,
size_t dst_len,
uint8_t* dst_palette_ptr,
size_t dst_palette_len,
const uint8_t* src_ptr,
size_t src_len) {
size_t dst_len2 = dst_len / 2;
size_t src_len3 = src_len / 3;
size_t len = (dst_len2 < src_len3) ? dst_len2 : src_len3;
uint8_t* d = dst_ptr;
const uint8_t* s = src_ptr;
size_t n = len;
while (n >= 1) {
uint32_t r5 = s[0] >> 3;
uint32_t g6 = s[1] >> 2;
uint32_t b5 = s[2] >> 3;
uint32_t rgb_565 = (r5 << 11) | (g6 << 5) | (b5 << 0);
wuffs_base__poke_u16le__no_bounds_check(d + (0 * 2), (uint16_t)rgb_565);
s += 1 * 3;
d += 1 * 2;
n -= 1;
}
return len;
}
static uint64_t
wuffs_base__pixel_swizzler__bgr_565__rgba_nonpremul__src(
uint8_t* dst_ptr,
size_t dst_len,
uint8_t* dst_palette_ptr,
size_t dst_palette_len,
const uint8_t* src_ptr,
size_t src_len) {
size_t dst_len2 = dst_len / 2;
size_t src_len4 = src_len / 4;
size_t len = (dst_len2 < src_len4) ? dst_len2 : src_len4;
uint8_t* d = dst_ptr;
const uint8_t* s = src_ptr;
size_t n = len;
while (n >= 1) {
wuffs_base__poke_u16le__no_bounds_check(
d + (0 * 2),
wuffs_base__color_u32_argb_premul__as__color_u16_rgb_565(
wuffs_base__swap_u32_argb_abgr(
wuffs_base__color_u32_argb_nonpremul__as__color_u32_argb_premul(
wuffs_base__peek_u32le__no_bounds_check(s + (0 * 4))))));
s += 1 * 4;
d += 1 * 2;
n -= 1;
}
return len;
}
static uint64_t
wuffs_base__pixel_swizzler__bgr_565__rgba_nonpremul__src_over(
uint8_t* dst_ptr,
size_t dst_len,
uint8_t* dst_palette_ptr,
size_t dst_palette_len,
const uint8_t* src_ptr,
size_t src_len) {
size_t dst_len2 = dst_len / 2;
size_t src_len4 = src_len / 4;
size_t len = (dst_len2 < src_len4) ? dst_len2 : src_len4;
uint8_t* d = dst_ptr;
const uint8_t* s = src_ptr;
size_t n = len;
while (n >= 1) {
uint32_t sa = 0x101 * ((uint32_t)s[3]);
uint32_t sb = 0x101 * ((uint32_t)s[2]);
uint32_t sg = 0x101 * ((uint32_t)s[1]);
uint32_t sr = 0x101 * ((uint32_t)s[0]);
uint32_t old_rgb_565 = wuffs_base__peek_u16le__no_bounds_check(d + (0 * 2));
uint32_t old_r5 = 0x1F & (old_rgb_565 >> 11);
uint32_t dr = (0x8421 * old_r5) >> 4;
uint32_t old_g6 = 0x3F & (old_rgb_565 >> 5);
uint32_t dg = (0x1041 * old_g6) >> 2;
uint32_t old_b5 = 0x1F & (old_rgb_565 >> 0);
uint32_t db = (0x8421 * old_b5) >> 4;
uint32_t ia = 0xFFFF - sa;
dr = ((sr * sa) + (dr * ia)) / 0xFFFF;
dg = ((sg * sa) + (dg * ia)) / 0xFFFF;
db = ((sb * sa) + (db * ia)) / 0xFFFF;
uint32_t new_r5 = 0x1F & (dr >> 11);
uint32_t new_g6 = 0x3F & (dg >> 10);
uint32_t new_b5 = 0x1F & (db >> 11);
uint32_t new_rgb_565 = (new_r5 << 11) | (new_g6 << 5) | (new_b5 << 0);
wuffs_base__poke_u16le__no_bounds_check(d + (0 * 2), (uint16_t)new_rgb_565);
s += 1 * 4;
d += 1 * 2;
n -= 1;
}
return len;
}
static uint64_t
wuffs_base__pixel_swizzler__bgr_565__rgba_premul__src(uint8_t* dst_ptr,
size_t dst_len,
uint8_t* dst_palette_ptr,
size_t dst_palette_len,
const uint8_t* src_ptr,
size_t src_len) {
size_t dst_len2 = dst_len / 2;
size_t src_len4 = src_len / 4;
size_t len = (dst_len2 < src_len4) ? dst_len2 : src_len4;
uint8_t* d = dst_ptr;
const uint8_t* s = src_ptr;
size_t n = len;
while (n >= 1) {
wuffs_base__poke_u16le__no_bounds_check(
d + (0 * 2),
wuffs_base__color_u32_argb_premul__as__color_u16_rgb_565(
wuffs_base__swap_u32_argb_abgr(
wuffs_base__peek_u32le__no_bounds_check(s + (0 * 4)))));
s += 1 * 4;
d += 1 * 2;
n -= 1;
}
return len;
}
static uint64_t
wuffs_base__pixel_swizzler__bgr_565__rgba_premul__src_over(
uint8_t* dst_ptr,
size_t dst_len,
uint8_t* dst_palette_ptr,
size_t dst_palette_len,
const uint8_t* src_ptr,
size_t src_len) {
size_t dst_len2 = dst_len / 2;
size_t src_len4 = src_len / 4;
size_t len = (dst_len2 < src_len4) ? dst_len2 : src_len4;
uint8_t* d = dst_ptr;
const uint8_t* s = src_ptr;
size_t n = len;
while (n >= 1) {
uint32_t sa = 0x101 * ((uint32_t)s[3]);
uint32_t sb = 0x101 * ((uint32_t)s[2]);
uint32_t sg = 0x101 * ((uint32_t)s[1]);
uint32_t sr = 0x101 * ((uint32_t)s[0]);
uint32_t old_rgb_565 = wuffs_base__peek_u16le__no_bounds_check(d + (0 * 2));
uint32_t old_r5 = 0x1F & (old_rgb_565 >> 11);
uint32_t dr = (0x8421 * old_r5) >> 4;
uint32_t old_g6 = 0x3F & (old_rgb_565 >> 5);
uint32_t dg = (0x1041 * old_g6) >> 2;
uint32_t old_b5 = 0x1F & (old_rgb_565 >> 0);
uint32_t db = (0x8421 * old_b5) >> 4;
uint32_t ia = 0xFFFF - sa;
dr = sr + ((dr * ia) / 0xFFFF);
dg = sg + ((dg * ia) / 0xFFFF);
db = sb + ((db * ia) / 0xFFFF);
uint32_t new_r5 = 0x1F & (dr >> 11);
uint32_t new_g6 = 0x3F & (dg >> 10);
uint32_t new_b5 = 0x1F & (db >> 11);
uint32_t new_rgb_565 = (new_r5 << 11) | (new_g6 << 5) | (new_b5 << 0);
wuffs_base__poke_u16le__no_bounds_check(d + (0 * 2), (uint16_t)new_rgb_565);
s += 1 * 4;
d += 1 * 2;
n -= 1;
}
return len;
}
static uint64_t
wuffs_base__pixel_swizzler__bgr_565__y(uint8_t* dst_ptr,
size_t dst_len,
uint8_t* dst_palette_ptr,
size_t dst_palette_len,
const uint8_t* src_ptr,
size_t src_len) {
size_t dst_len2 = dst_len / 2;
size_t len = (dst_len2 < src_len) ? dst_len2 : src_len;
uint8_t* d = dst_ptr;
const uint8_t* s = src_ptr;
size_t n = len;
while (n >= 1) {
uint32_t y5 = s[0] >> 3;
uint32_t y6 = s[0] >> 2;
uint32_t rgb_565 = (y5 << 11) | (y6 << 5) | (y5 << 0);
wuffs_base__poke_u16le__no_bounds_check(d + (0 * 2), (uint16_t)rgb_565);
s += 1 * 1;
d += 1 * 2;
n -= 1;
}
return len;
}
static uint64_t
wuffs_base__pixel_swizzler__bgr_565__y_16be(uint8_t* dst_ptr,
size_t dst_len,
uint8_t* dst_palette_ptr,
size_t dst_palette_len,
const uint8_t* src_ptr,
size_t src_len) {
size_t dst_len2 = dst_len / 2;
size_t src_len2 = src_len / 2;
size_t len = (dst_len2 < src_len2) ? dst_len2 : src_len2;
uint8_t* d = dst_ptr;
const uint8_t* s = src_ptr;
size_t n = len;
while (n >= 1) {
uint32_t y5 = s[0] >> 3;
uint32_t y6 = s[0] >> 2;
uint32_t rgb_565 = (y5 << 11) | (y6 << 5) | (y5 << 0);
wuffs_base__poke_u16le__no_bounds_check(d + (0 * 2), (uint16_t)rgb_565);
s += 1 * 2;
d += 1 * 2;
n -= 1;
}
return len;
}
static uint64_t
wuffs_base__pixel_swizzler__bgr_565__index__src(uint8_t* dst_ptr,
size_t dst_len,
uint8_t* dst_palette_ptr,
size_t dst_palette_len,
const uint8_t* src_ptr,
size_t src_len) {
if (dst_palette_len !=
WUFFS_BASE__PIXEL_FORMAT__INDEXED__PALETTE_BYTE_LENGTH) {
return 0;
}
size_t dst_len2 = dst_len / 2;
size_t len = (dst_len2 < src_len) ? dst_len2 : src_len;
uint8_t* d = dst_ptr;
const uint8_t* s = src_ptr;
size_t n = len;
const size_t loop_unroll_count = 4;
while (n >= loop_unroll_count) {
wuffs_base__poke_u16le__no_bounds_check(
d + (0 * 2), wuffs_base__peek_u16le__no_bounds_check(
dst_palette_ptr + ((size_t)s[0] * 4)));
wuffs_base__poke_u16le__no_bounds_check(
d + (1 * 2), wuffs_base__peek_u16le__no_bounds_check(
dst_palette_ptr + ((size_t)s[1] * 4)));
wuffs_base__poke_u16le__no_bounds_check(
d + (2 * 2), wuffs_base__peek_u16le__no_bounds_check(
dst_palette_ptr + ((size_t)s[2] * 4)));
wuffs_base__poke_u16le__no_bounds_check(
d + (3 * 2), wuffs_base__peek_u16le__no_bounds_check(
dst_palette_ptr + ((size_t)s[3] * 4)));
s += loop_unroll_count * 1;
d += loop_unroll_count * 2;
n -= loop_unroll_count;
}
while (n >= 1) {
wuffs_base__poke_u16le__no_bounds_check(
d + (0 * 2), wuffs_base__peek_u16le__no_bounds_check(
dst_palette_ptr + ((size_t)s[0] * 4)));
s += 1 * 1;
d += 1 * 2;
n -= 1;
}
return len;
}
static uint64_t
wuffs_base__pixel_swizzler__bgr_565__index_bgra_nonpremul__src_over(
uint8_t* dst_ptr,
size_t dst_len,
uint8_t* dst_palette_ptr,
size_t dst_palette_len,
const uint8_t* src_ptr,
size_t src_len) {
if (dst_palette_len !=
WUFFS_BASE__PIXEL_FORMAT__INDEXED__PALETTE_BYTE_LENGTH) {
return 0;
}
size_t dst_len2 = dst_len / 2;
size_t len = (dst_len2 < src_len) ? dst_len2 : src_len;
uint8_t* d = dst_ptr;
const uint8_t* s = src_ptr;
size_t n = len;
while (n >= 1) {
uint32_t d0 = wuffs_base__color_u16_rgb_565__as__color_u32_argb_premul(
wuffs_base__peek_u16le__no_bounds_check(d + (0 * 2)));
uint32_t s0 = wuffs_base__peek_u32le__no_bounds_check(dst_palette_ptr +
((size_t)s[0] * 4));
wuffs_base__poke_u16le__no_bounds_check(
d + (0 * 2),
wuffs_base__color_u32_argb_premul__as__color_u16_rgb_565(
wuffs_base__composite_premul_nonpremul_u32_axxx(d0, s0)));
s += 1 * 1;
d += 1 * 2;
n -= 1;
}
return len;
}
static uint64_t
wuffs_base__pixel_swizzler__bgr_565__index_binary_alpha__src_over(
uint8_t* dst_ptr,
size_t dst_len,
uint8_t* dst_palette_ptr,
size_t dst_palette_len,
const uint8_t* src_ptr,
size_t src_len) {
if (dst_palette_len !=
WUFFS_BASE__PIXEL_FORMAT__INDEXED__PALETTE_BYTE_LENGTH) {
return 0;
}
size_t dst_len2 = dst_len / 2;
size_t len = (dst_len2 < src_len) ? dst_len2 : src_len;
uint8_t* d = dst_ptr;
const uint8_t* s = src_ptr;
size_t n = len;
while (n >= 1) {
uint32_t s0 = wuffs_base__peek_u32le__no_bounds_check(dst_palette_ptr +
((size_t)s[0] * 4));
if (s0) {
wuffs_base__poke_u16le__no_bounds_check(d + (0 * 2), (uint16_t)s0);
}
s += 1 * 1;
d += 1 * 2;
n -= 1;
}
return len;
}
static uint64_t
wuffs_base__pixel_swizzler__bgr__bgr_565(uint8_t* dst_ptr,
size_t dst_len,
uint8_t* dst_palette_ptr,
size_t dst_palette_len,
const uint8_t* src_ptr,
size_t src_len) {
size_t dst_len3 = dst_len / 3;
size_t src_len2 = src_len / 2;
size_t len = (dst_len3 < src_len2) ? dst_len3 : src_len2;
uint8_t* d = dst_ptr;
const uint8_t* s = src_ptr;
size_t n = len;
while (n >= 1) {
uint32_t s0 = wuffs_base__color_u16_rgb_565__as__color_u32_argb_premul(
wuffs_base__peek_u16le__no_bounds_check(s + (0 * 2)));
wuffs_base__poke_u24le__no_bounds_check(d + (0 * 3), s0);
s += 1 * 2;
d += 1 * 3;
n -= 1;
}
return len;
}
static uint64_t
wuffs_base__pixel_swizzler__bgr__bgra_nonpremul__src(uint8_t* dst_ptr,
size_t dst_len,
uint8_t* dst_palette_ptr,
size_t dst_palette_len,
const uint8_t* src_ptr,
size_t src_len) {
size_t dst_len3 = dst_len / 3;
size_t src_len4 = src_len / 4;
size_t len = (dst_len3 < src_len4) ? dst_len3 : src_len4;
uint8_t* d = dst_ptr;
const uint8_t* s = src_ptr;
size_t n = len;
while (n >= 1) {
uint32_t s0 =
wuffs_base__color_u32_argb_nonpremul__as__color_u32_argb_premul(
wuffs_base__peek_u32le__no_bounds_check(s + (0 * 4)));
wuffs_base__poke_u24le__no_bounds_check(d + (0 * 3), s0);
s += 1 * 4;
d += 1 * 3;
n -= 1;
}
return len;
}
static uint64_t
wuffs_base__pixel_swizzler__bgr__bgra_nonpremul_4x16le__src(
uint8_t* dst_ptr,
size_t dst_len,
uint8_t* dst_palette_ptr,
size_t dst_palette_len,
const uint8_t* src_ptr,
size_t src_len) {
size_t dst_len3 = dst_len / 3;
size_t src_len8 = src_len / 8;
size_t len = (dst_len3 < src_len8) ? dst_len3 : src_len8;
uint8_t* d = dst_ptr;
const uint8_t* s = src_ptr;
size_t n = len;
while (n >= 1) {
uint32_t s0 =
wuffs_base__color_u64_argb_nonpremul__as__color_u32_argb_premul(
wuffs_base__peek_u64le__no_bounds_check(s + (0 * 8)));
wuffs_base__poke_u24le__no_bounds_check(d + (0 * 3), s0);
s += 1 * 8;
d += 1 * 3;
n -= 1;
}
return len;
}
static uint64_t
wuffs_base__pixel_swizzler__bgr__bgra_nonpremul__src_over(
uint8_t* dst_ptr,
size_t dst_len,
uint8_t* dst_palette_ptr,
size_t dst_palette_len,
const uint8_t* src_ptr,
size_t src_len) {
size_t dst_len3 = dst_len / 3;
size_t src_len4 = src_len / 4;
size_t len = (dst_len3 < src_len4) ? dst_len3 : src_len4;
uint8_t* d = dst_ptr;
const uint8_t* s = src_ptr;
size_t n = len;
while (n >= 1) {
uint32_t dr = 0x101 * ((uint32_t)d[2]);
uint32_t dg = 0x101 * ((uint32_t)d[1]);
uint32_t db = 0x101 * ((uint32_t)d[0]);
uint32_t sa = 0x101 * ((uint32_t)s[3]);
uint32_t sr = 0x101 * ((uint32_t)s[2]);
uint32_t sg = 0x101 * ((uint32_t)s[1]);
uint32_t sb = 0x101 * ((uint32_t)s[0]);
uint32_t ia = 0xFFFF - sa;
dr = ((sr * sa) + (dr * ia)) / 0xFFFF;
dg = ((sg * sa) + (dg * ia)) / 0xFFFF;
db = ((sb * sa) + (db * ia)) / 0xFFFF;
d[0] = (uint8_t)(db >> 8);
d[1] = (uint8_t)(dg >> 8);
d[2] = (uint8_t)(dr >> 8);
s += 1 * 4;
d += 1 * 3;
n -= 1;
}
return len;
}
static uint64_t
wuffs_base__pixel_swizzler__bgr__bgra_nonpremul_4x16le__src_over(
uint8_t* dst_ptr,
size_t dst_len,
uint8_t* dst_palette_ptr,
size_t dst_palette_len,
const uint8_t* src_ptr,
size_t src_len) {
size_t dst_len3 = dst_len / 3;
size_t src_len8 = src_len / 8;
size_t len = (dst_len3 < src_len8) ? dst_len3 : src_len8;
uint8_t* d = dst_ptr;
const uint8_t* s = src_ptr;
size_t n = len;
while (n >= 1) {
uint32_t dr = 0x101 * ((uint32_t)d[2]);
uint32_t dg = 0x101 * ((uint32_t)d[1]);
uint32_t db = 0x101 * ((uint32_t)d[0]);
uint32_t sa = ((uint32_t)wuffs_base__peek_u16le__no_bounds_check(s + 6));
uint32_t sr = ((uint32_t)wuffs_base__peek_u16le__no_bounds_check(s + 4));
uint32_t sg = ((uint32_t)wuffs_base__peek_u16le__no_bounds_check(s + 2));
uint32_t sb = ((uint32_t)wuffs_base__peek_u16le__no_bounds_check(s + 0));
uint32_t ia = 0xFFFF - sa;
dr = ((sr * sa) + (dr * ia)) / 0xFFFF;
dg = ((sg * sa) + (dg * ia)) / 0xFFFF;
db = ((sb * sa) + (db * ia)) / 0xFFFF;
d[0] = (uint8_t)(db >> 8);
d[1] = (uint8_t)(dg >> 8);
d[2] = (uint8_t)(dr >> 8);
s += 1 * 8;
d += 1 * 3;
n -= 1;
}
return len;
}
static uint64_t
wuffs_base__pixel_swizzler__bgr__bgra_premul__src(uint8_t* dst_ptr,
size_t dst_len,
uint8_t* dst_palette_ptr,
size_t dst_palette_len,
const uint8_t* src_ptr,
size_t src_len) {
size_t dst_len3 = dst_len / 3;
size_t src_len4 = src_len / 4;
size_t len = (dst_len3 < src_len4) ? dst_len3 : src_len4;
uint8_t* d = dst_ptr;
const uint8_t* s = src_ptr;
size_t n = len;
while (n >= 1) {
uint8_t s0 = s[0];
uint8_t s1 = s[1];
uint8_t s2 = s[2];
d[0] = s0;
d[1] = s1;
d[2] = s2;
s += 1 * 4;
d += 1 * 3;
n -= 1;
}
return len;
}
static uint64_t
wuffs_base__pixel_swizzler__bgr__bgra_premul__src_over(uint8_t* dst_ptr,
size_t dst_len,
uint8_t* dst_palette_ptr,
size_t dst_palette_len,
const uint8_t* src_ptr,
size_t src_len) {
size_t dst_len3 = dst_len / 3;
size_t src_len4 = src_len / 4;
size_t len = (dst_len3 < src_len4) ? dst_len3 : src_len4;
uint8_t* d = dst_ptr;
const uint8_t* s = src_ptr;
size_t n = len;
while (n >= 1) {
uint32_t dr = 0x101 * ((uint32_t)d[2]);
uint32_t dg = 0x101 * ((uint32_t)d[1]);
uint32_t db = 0x101 * ((uint32_t)d[0]);
uint32_t sa = 0x101 * ((uint32_t)s[3]);
uint32_t sr = 0x101 * ((uint32_t)s[2]);
uint32_t sg = 0x101 * ((uint32_t)s[1]);
uint32_t sb = 0x101 * ((uint32_t)s[0]);
uint32_t ia = 0xFFFF - sa;
dr = sr + ((dr * ia) / 0xFFFF);
dg = sg + ((dg * ia) / 0xFFFF);
db = sb + ((db * ia) / 0xFFFF);
d[0] = (uint8_t)(db >> 8);
d[1] = (uint8_t)(dg >> 8);
d[2] = (uint8_t)(dr >> 8);
s += 1 * 4;
d += 1 * 3;
n -= 1;
}
return len;
}
static uint64_t
wuffs_base__pixel_swizzler__bgr__rgba_nonpremul__src(uint8_t* dst_ptr,
size_t dst_len,
uint8_t* dst_palette_ptr,
size_t dst_palette_len,
const uint8_t* src_ptr,
size_t src_len) {
size_t dst_len3 = dst_len / 3;
size_t src_len4 = src_len / 4;
size_t len = (dst_len3 < src_len4) ? dst_len3 : src_len4;
uint8_t* d = dst_ptr;
const uint8_t* s = src_ptr;
size_t n = len;
while (n >= 1) {
uint32_t s0 = wuffs_base__swap_u32_argb_abgr(
wuffs_base__color_u32_argb_nonpremul__as__color_u32_argb_premul(
wuffs_base__peek_u32le__no_bounds_check(s + (0 * 4))));
wuffs_base__poke_u24le__no_bounds_check(d + (0 * 3), s0);
s += 1 * 4;
d += 1 * 3;
n -= 1;
}
return len;
}
static uint64_t
wuffs_base__pixel_swizzler__bgr__rgba_nonpremul__src_over(
uint8_t* dst_ptr,
size_t dst_len,
uint8_t* dst_palette_ptr,
size_t dst_palette_len,
const uint8_t* src_ptr,
size_t src_len) {
size_t dst_len3 = dst_len / 3;
size_t src_len4 = src_len / 4;
size_t len = (dst_len3 < src_len4) ? dst_len3 : src_len4;
uint8_t* d = dst_ptr;
const uint8_t* s = src_ptr;
size_t n = len;
while (n >= 1) {
uint32_t dr = 0x101 * ((uint32_t)d[2]);
uint32_t dg = 0x101 * ((uint32_t)d[1]);
uint32_t db = 0x101 * ((uint32_t)d[0]);
uint32_t sa = 0x101 * ((uint32_t)s[3]);
uint32_t sb = 0x101 * ((uint32_t)s[2]);
uint32_t sg = 0x101 * ((uint32_t)s[1]);
uint32_t sr = 0x101 * ((uint32_t)s[0]);
uint32_t ia = 0xFFFF - sa;
dr = ((sr * sa) + (dr * ia)) / 0xFFFF;
dg = ((sg * sa) + (dg * ia)) / 0xFFFF;
db = ((sb * sa) + (db * ia)) / 0xFFFF;
d[0] = (uint8_t)(db >> 8);
d[1] = (uint8_t)(dg >> 8);
d[2] = (uint8_t)(dr >> 8);
s += 1 * 4;
d += 1 * 3;
n -= 1;
}
return len;
}
static uint64_t
wuffs_base__pixel_swizzler__bgr__rgba_premul__src(uint8_t* dst_ptr,
size_t dst_len,
uint8_t* dst_palette_ptr,
size_t dst_palette_len,
const uint8_t* src_ptr,
size_t src_len) {
size_t dst_len3 = dst_len / 3;
size_t src_len4 = src_len / 4;
size_t len = (dst_len3 < src_len4) ? dst_len3 : src_len4;
uint8_t* d = dst_ptr;
const uint8_t* s = src_ptr;
size_t n = len;
while (n >= 1) {
uint8_t s0 = s[0];
uint8_t s1 = s[1];
uint8_t s2 = s[2];
d[0] = s2;
d[1] = s1;
d[2] = s0;
s += 1 * 4;
d += 1 * 3;
n -= 1;
}
return len;
}
static uint64_t
wuffs_base__pixel_swizzler__bgr__rgba_premul__src_over(uint8_t* dst_ptr,
size_t dst_len,
uint8_t* dst_palette_ptr,
size_t dst_palette_len,
const uint8_t* src_ptr,
size_t src_len) {
size_t dst_len3 = dst_len / 3;
size_t src_len4 = src_len / 4;
size_t len = (dst_len3 < src_len4) ? dst_len3 : src_len4;
uint8_t* d = dst_ptr;
const uint8_t* s = src_ptr;
size_t n = len;
while (n >= 1) {
uint32_t dr = 0x101 * ((uint32_t)d[2]);
uint32_t dg = 0x101 * ((uint32_t)d[1]);
uint32_t db = 0x101 * ((uint32_t)d[0]);
uint32_t sa = 0x101 * ((uint32_t)s[3]);
uint32_t sb = 0x101 * ((uint32_t)s[2]);
uint32_t sg = 0x101 * ((uint32_t)s[1]);
uint32_t sr = 0x101 * ((uint32_t)s[0]);
uint32_t ia = 0xFFFF - sa;
dr = sr + ((dr * ia) / 0xFFFF);
dg = sg + ((dg * ia) / 0xFFFF);
db = sb + ((db * ia) / 0xFFFF);
d[0] = (uint8_t)(db >> 8);
d[1] = (uint8_t)(dg >> 8);
d[2] = (uint8_t)(dr >> 8);
s += 1 * 4;
d += 1 * 3;
n -= 1;
}
return len;
}
static uint64_t
wuffs_base__pixel_swizzler__bgra_nonpremul__bgra_nonpremul__src_over(
uint8_t* dst_ptr,
size_t dst_len,
uint8_t* dst_palette_ptr,
size_t dst_palette_len,
const uint8_t* src_ptr,
size_t src_len) {
size_t dst_len4 = dst_len / 4;
size_t src_len4 = src_len / 4;
size_t len = (dst_len4 < src_len4) ? dst_len4 : src_len4;
uint8_t* d = dst_ptr;
const uint8_t* s = src_ptr;
size_t n = len;
while (n >= 1) {
uint32_t d0 = wuffs_base__peek_u32le__no_bounds_check(d + (0 * 4));
uint32_t s0 = wuffs_base__peek_u32le__no_bounds_check(s + (0 * 4));
wuffs_base__poke_u32le__no_bounds_check(
d + (0 * 4),
wuffs_base__composite_nonpremul_nonpremul_u32_axxx(d0, s0));
s += 1 * 4;
d += 1 * 4;
n -= 1;
}
return len;
}
static uint64_t
wuffs_base__pixel_swizzler__bgra_nonpremul__bgra_nonpremul_4x16le__src(
uint8_t* dst_ptr,
size_t dst_len,
uint8_t* dst_palette_ptr,
size_t dst_palette_len,
const uint8_t* src_ptr,
size_t src_len) {
size_t dst_len4 = dst_len / 4;
size_t src_len8 = src_len / 8;
size_t len = (dst_len4 < src_len8) ? dst_len4 : src_len8;
uint8_t* d = dst_ptr;
const uint8_t* s = src_ptr;
size_t n = len;
while (n >= 1) {
wuffs_base__poke_u32le__no_bounds_check(
d + (0 * 4), wuffs_base__color_u64__as__color_u32(
wuffs_base__peek_u64le__no_bounds_check(s + (0 * 8))));
s += 1 * 8;
d += 1 * 4;
n -= 1;
}
return len;
}
static uint64_t
wuffs_base__pixel_swizzler__bgra_nonpremul__bgra_nonpremul_4x16le__src_over(
uint8_t* dst_ptr,
size_t dst_len,
uint8_t* dst_palette_ptr,
size_t dst_palette_len,
const uint8_t* src_ptr,
size_t src_len) {
size_t dst_len4 = dst_len / 4;
size_t src_len8 = src_len / 8;
size_t len = (dst_len4 < src_len8) ? dst_len4 : src_len8;
uint8_t* d = dst_ptr;
const uint8_t* s = src_ptr;
size_t n = len;
while (n >= 1) {
uint64_t d0 = wuffs_base__color_u32__as__color_u64(
wuffs_base__peek_u32le__no_bounds_check(d + (0 * 4)));
uint64_t s0 = wuffs_base__peek_u64le__no_bounds_check(s + (0 * 8));
wuffs_base__poke_u32le__no_bounds_check(
d + (0 * 4),
wuffs_base__color_u64__as__color_u32(
wuffs_base__composite_nonpremul_nonpremul_u64_axxx(d0, s0)));
s += 1 * 8;
d += 1 * 4;
n -= 1;
}
return len;
}
static uint64_t
wuffs_base__pixel_swizzler__bgra_nonpremul__bgra_premul__src(
uint8_t* dst_ptr,
size_t dst_len,
uint8_t* dst_palette_ptr,
size_t dst_palette_len,
const uint8_t* src_ptr,
size_t src_len) {
size_t dst_len4 = dst_len / 4;
size_t src_len4 = src_len / 4;
size_t len = (dst_len4 < src_len4) ? dst_len4 : src_len4;
uint8_t* d = dst_ptr;
const uint8_t* s = src_ptr;
size_t n = len;
while (n >= 1) {
uint32_t s0 = wuffs_base__peek_u32le__no_bounds_check(s + (0 * 4));
wuffs_base__poke_u32le__no_bounds_check(
d + (0 * 4),
wuffs_base__color_u32_argb_premul__as__color_u32_argb_nonpremul(s0));
s += 1 * 4;
d += 1 * 4;
n -= 1;
}
return len;
}
static uint64_t
wuffs_base__pixel_swizzler__bgra_nonpremul__bgra_premul__src_over(
uint8_t* dst_ptr,
size_t dst_len,
uint8_t* dst_palette_ptr,
size_t dst_palette_len,
const uint8_t* src_ptr,
size_t src_len) {
size_t dst_len4 = dst_len / 4;
size_t src_len4 = src_len / 4;
size_t len = (dst_len4 < src_len4) ? dst_len4 : src_len4;
uint8_t* d = dst_ptr;
const uint8_t* s = src_ptr;
size_t n = len;
while (n >= 1) {
uint32_t d0 = wuffs_base__peek_u32le__no_bounds_check(d + (0 * 4));
uint32_t s0 = wuffs_base__peek_u32le__no_bounds_check(s + (0 * 4));
wuffs_base__poke_u32le__no_bounds_check(
d + (0 * 4), wuffs_base__composite_nonpremul_premul_u32_axxx(d0, s0));
s += 1 * 4;
d += 1 * 4;
n -= 1;
}
return len;
}
static uint64_t
wuffs_base__pixel_swizzler__bgra_nonpremul__index_bgra_nonpremul__src_over(
uint8_t* dst_ptr,
size_t dst_len,
uint8_t* dst_palette_ptr,
size_t dst_palette_len,
const uint8_t* src_ptr,
size_t src_len) {
if (dst_palette_len !=
WUFFS_BASE__PIXEL_FORMAT__INDEXED__PALETTE_BYTE_LENGTH) {
return 0;
}
size_t dst_len4 = dst_len / 4;
size_t len = (dst_len4 < src_len) ? dst_len4 : src_len;
uint8_t* d = dst_ptr;
const uint8_t* s = src_ptr;
size_t n = len;
while (n >= 1) {
uint32_t d0 = wuffs_base__peek_u32le__no_bounds_check(d + (0 * 4));
uint32_t s0 = wuffs_base__peek_u32le__no_bounds_check(dst_palette_ptr +
((size_t)s[0] * 4));
wuffs_base__poke_u32le__no_bounds_check(
d + (0 * 4),
wuffs_base__composite_nonpremul_nonpremul_u32_axxx(d0, s0));
s += 1 * 1;
d += 1 * 4;
n -= 1;
}
return len;
}
static uint64_t
wuffs_base__pixel_swizzler__bgra_nonpremul__rgba_nonpremul__src_over(
uint8_t* dst_ptr,
size_t dst_len,
uint8_t* dst_palette_ptr,
size_t dst_palette_len,
const uint8_t* src_ptr,
size_t src_len) {
size_t dst_len4 = dst_len / 4;
size_t src_len4 = src_len / 4;
size_t len = (dst_len4 < src_len4) ? dst_len4 : src_len4;
uint8_t* d = dst_ptr;
const uint8_t* s = src_ptr;
size_t n = len;
while (n >= 1) {
uint32_t d0 = wuffs_base__peek_u32le__no_bounds_check(d + (0 * 4));
uint32_t s0 = wuffs_base__swap_u32_argb_abgr(
wuffs_base__peek_u32le__no_bounds_check(s + (0 * 4)));
wuffs_base__poke_u32le__no_bounds_check(
d + (0 * 4),
wuffs_base__composite_nonpremul_nonpremul_u32_axxx(d0, s0));
s += 1 * 4;
d += 1 * 4;
n -= 1;
}
return len;
}
static uint64_t
wuffs_base__pixel_swizzler__bgra_nonpremul__rgba_premul__src(
uint8_t* dst_ptr,
size_t dst_len,
uint8_t* dst_palette_ptr,
size_t dst_palette_len,
const uint8_t* src_ptr,
size_t src_len) {
size_t dst_len4 = dst_len / 4;
size_t src_len4 = src_len / 4;
size_t len = (dst_len4 < src_len4) ? dst_len4 : src_len4;
uint8_t* d = dst_ptr;
const uint8_t* s = src_ptr;
size_t n = len;
while (n >= 1) {
uint32_t s0 = wuffs_base__swap_u32_argb_abgr(
wuffs_base__peek_u32le__no_bounds_check(s + (0 * 4)));
wuffs_base__poke_u32le__no_bounds_check(
d + (0 * 4),
wuffs_base__color_u32_argb_premul__as__color_u32_argb_nonpremul(s0));
s += 1 * 4;
d += 1 * 4;
n -= 1;
}
return len;
}
static uint64_t
wuffs_base__pixel_swizzler__bgra_nonpremul__rgba_premul__src_over(
uint8_t* dst_ptr,
size_t dst_len,
uint8_t* dst_palette_ptr,
size_t dst_palette_len,
const uint8_t* src_ptr,
size_t src_len) {
size_t dst_len4 = dst_len / 4;
size_t src_len4 = src_len / 4;
size_t len = (dst_len4 < src_len4) ? dst_len4 : src_len4;
uint8_t* d = dst_ptr;
const uint8_t* s = src_ptr;
size_t n = len;
while (n >= 1) {
uint32_t d0 = wuffs_base__peek_u32le__no_bounds_check(d + (0 * 4));
uint32_t s0 = wuffs_base__swap_u32_argb_abgr(
wuffs_base__peek_u32le__no_bounds_check(s + (0 * 4)));
wuffs_base__poke_u32le__no_bounds_check(
d + (0 * 4), wuffs_base__composite_nonpremul_premul_u32_axxx(d0, s0));
s += 1 * 4;
d += 1 * 4;
n -= 1;
}
return len;
}
static uint64_t
wuffs_base__pixel_swizzler__bgra_nonpremul_4x16le__bgra_nonpremul__src(
uint8_t* dst_ptr,
size_t dst_len,
uint8_t* dst_palette_ptr,
size_t dst_palette_len,
const uint8_t* src_ptr,
size_t src_len) {
size_t dst_len8 = dst_len / 8;
size_t src_len4 = src_len / 4;
size_t len = (dst_len8 < src_len4) ? dst_len8 : src_len4;
uint8_t* d = dst_ptr;
const uint8_t* s = src_ptr;
size_t n = len;
while (n >= 1) {
uint8_t s0 = s[0];
uint8_t s1 = s[1];
uint8_t s2 = s[2];
uint8_t s3 = s[3];
d[0] = s0;
d[1] = s0;
d[2] = s1;
d[3] = s1;
d[4] = s2;
d[5] = s2;
d[6] = s3;
d[7] = s3;
s += 1 * 4;
d += 1 * 8;
n -= 1;
}
return len;
}
static uint64_t
wuffs_base__pixel_swizzler__bgra_nonpremul_4x16le__bgra_nonpremul__src_over(
uint8_t* dst_ptr,
size_t dst_len,
uint8_t* dst_palette_ptr,
size_t dst_palette_len,
const uint8_t* src_ptr,
size_t src_len) {
size_t dst_len8 = dst_len / 8;
size_t src_len4 = src_len / 4;
size_t len = (dst_len8 < src_len4) ? dst_len8 : src_len4;
uint8_t* d = dst_ptr;
const uint8_t* s = src_ptr;
size_t n = len;
while (n >= 1) {
uint64_t d0 = wuffs_base__peek_u64le__no_bounds_check(d + (0 * 8));
uint64_t s0 = wuffs_base__color_u32__as__color_u64(
wuffs_base__peek_u32le__no_bounds_check(s + (0 * 4)));
wuffs_base__poke_u64le__no_bounds_check(
d + (0 * 8),
wuffs_base__composite_nonpremul_nonpremul_u64_axxx(d0, s0));
s += 1 * 4;
d += 1 * 8;
n -= 1;
}
return len;
}
static uint64_t
wuffs_base__pixel_swizzler__bgra_nonpremul_4x16le__bgra_nonpremul_4x16le__src_over(
uint8_t* dst_ptr,
size_t dst_len,
uint8_t* dst_palette_ptr,
size_t dst_palette_len,
const uint8_t* src_ptr,
size_t src_len) {
size_t dst_len8 = dst_len / 8;
size_t src_len8 = src_len / 8;
size_t len = (dst_len8 < src_len8) ? dst_len8 : src_len8;
uint8_t* d = dst_ptr;
const uint8_t* s = src_ptr;
size_t n = len;
while (n >= 1) {
uint64_t d0 = wuffs_base__peek_u64le__no_bounds_check(d + (0 * 8));
uint64_t s0 = wuffs_base__peek_u64le__no_bounds_check(s + (0 * 8));
wuffs_base__poke_u64le__no_bounds_check(
d + (0 * 8),
wuffs_base__composite_nonpremul_nonpremul_u64_axxx(d0, s0));
s += 1 * 8;
d += 1 * 8;
n -= 1;
}
return len;
}
static uint64_t
wuffs_base__pixel_swizzler__bgra_nonpremul_4x16le__bgra_premul__src(
uint8_t* dst_ptr,
size_t dst_len,
uint8_t* dst_palette_ptr,
size_t dst_palette_len,
const uint8_t* src_ptr,
size_t src_len) {
size_t dst_len8 = dst_len / 8;
size_t src_len4 = src_len / 4;
size_t len = (dst_len8 < src_len4) ? dst_len8 : src_len4;
uint8_t* d = dst_ptr;
const uint8_t* s = src_ptr;
size_t n = len;
while (n >= 1) {
uint64_t s0 = wuffs_base__color_u32__as__color_u64(
wuffs_base__color_u32_argb_premul__as__color_u32_argb_nonpremul(
wuffs_base__peek_u32le__no_bounds_check(s + (0 * 4))));
wuffs_base__poke_u64le__no_bounds_check(d + (0 * 8), s0);
s += 1 * 4;
d += 1 * 8;
n -= 1;
}
return len;
}
static uint64_t
wuffs_base__pixel_swizzler__bgra_nonpremul_4x16le__bgra_premul__src_over(
uint8_t* dst_ptr,
size_t dst_len,
uint8_t* dst_palette_ptr,
size_t dst_palette_len,
const uint8_t* src_ptr,
size_t src_len) {
size_t dst_len8 = dst_len / 8;
size_t src_len4 = src_len / 4;
size_t len = (dst_len8 < src_len4) ? dst_len8 : src_len4;
uint8_t* d = dst_ptr;
const uint8_t* s = src_ptr;
size_t n = len;
while (n >= 1) {
uint64_t d0 = wuffs_base__peek_u64le__no_bounds_check(d + (0 * 8));
uint64_t s0 = wuffs_base__color_u32__as__color_u64(
wuffs_base__peek_u32le__no_bounds_check(s + (0 * 4)));
wuffs_base__poke_u64le__no_bounds_check(
d + (0 * 8), wuffs_base__composite_nonpremul_premul_u64_axxx(d0, s0));
s += 1 * 4;
d += 1 * 8;
n -= 1;
}
return len;
}
static uint64_t
wuffs_base__pixel_swizzler__bgra_nonpremul_4x16le__index_bgra_nonpremul__src_over(
uint8_t* dst_ptr,
size_t dst_len,
uint8_t* dst_palette_ptr,
size_t dst_palette_len,
const uint8_t* src_ptr,
size_t src_len) {
if (dst_palette_len !=
WUFFS_BASE__PIXEL_FORMAT__INDEXED__PALETTE_BYTE_LENGTH) {
return 0;
}
size_t dst_len8 = dst_len / 8;
size_t len = (dst_len8 < src_len) ? dst_len8 : src_len;
uint8_t* d = dst_ptr;
const uint8_t* s = src_ptr;
size_t n = len;
while (n >= 1) {
uint64_t d0 = wuffs_base__peek_u64le__no_bounds_check(d + (0 * 8));
uint64_t s0 = wuffs_base__color_u32__as__color_u64(
wuffs_base__peek_u32le__no_bounds_check(dst_palette_ptr +
((size_t)s[0] * 4)));
wuffs_base__poke_u64le__no_bounds_check(
d + (0 * 8),
wuffs_base__composite_nonpremul_nonpremul_u64_axxx(d0, s0));
s += 1 * 1;
d += 1 * 8;
n -= 1;
}
return len;
}
static uint64_t
wuffs_base__pixel_swizzler__bgra_nonpremul_4x16le__rgba_nonpremul__src(
uint8_t* dst_ptr,
size_t dst_len,
uint8_t* dst_palette_ptr,
size_t dst_palette_len,
const uint8_t* src_ptr,
size_t src_len) {
size_t dst_len8 = dst_len / 8;
size_t src_len4 = src_len / 4;
size_t len = (dst_len8 < src_len4) ? dst_len8 : src_len4;
uint8_t* d = dst_ptr;
const uint8_t* s = src_ptr;
size_t n = len;
while (n >= 1) {
uint8_t s0 = s[0];
uint8_t s1 = s[1];
uint8_t s2 = s[2];
uint8_t s3 = s[3];
d[0] = s2;
d[1] = s2;
d[2] = s1;
d[3] = s1;
d[4] = s0;
d[5] = s0;
d[6] = s3;
d[7] = s3;
s += 1 * 4;
d += 1 * 8;
n -= 1;
}
return len;
}
static uint64_t
wuffs_base__pixel_swizzler__bgra_nonpremul_4x16le__rgba_nonpremul__src_over(
uint8_t* dst_ptr,
size_t dst_len,
uint8_t* dst_palette_ptr,
size_t dst_palette_len,
const uint8_t* src_ptr,
size_t src_len) {
size_t dst_len8 = dst_len / 8;
size_t src_len4 = src_len / 4;
size_t len = (dst_len8 < src_len4) ? dst_len8 : src_len4;
uint8_t* d = dst_ptr;
const uint8_t* s = src_ptr;
size_t n = len;
while (n >= 1) {
uint64_t d0 = wuffs_base__peek_u64le__no_bounds_check(d + (0 * 8));
uint64_t s0 =
wuffs_base__color_u32__as__color_u64(wuffs_base__swap_u32_argb_abgr(
wuffs_base__peek_u32le__no_bounds_check(s + (0 * 4))));
wuffs_base__poke_u64le__no_bounds_check(
d + (0 * 8),
wuffs_base__composite_nonpremul_nonpremul_u64_axxx(d0, s0));
s += 1 * 4;
d += 1 * 8;
n -= 1;
}
return len;
}
static uint64_t
wuffs_base__pixel_swizzler__bgra_nonpremul_4x16le__rgba_premul__src(
uint8_t* dst_ptr,
size_t dst_len,
uint8_t* dst_palette_ptr,
size_t dst_palette_len,
const uint8_t* src_ptr,
size_t src_len) {
size_t dst_len8 = dst_len / 8;
size_t src_len4 = src_len / 4;
size_t len = (dst_len8 < src_len4) ? dst_len8 : src_len4;
uint8_t* d = dst_ptr;
const uint8_t* s = src_ptr;
size_t n = len;
while (n >= 1) {
uint64_t s0 = wuffs_base__color_u32__as__color_u64(
wuffs_base__color_u32_argb_premul__as__color_u32_argb_nonpremul(
wuffs_base__swap_u32_argb_abgr(
wuffs_base__peek_u32le__no_bounds_check(s + (0 * 4)))));
wuffs_base__poke_u64le__no_bounds_check(d + (0 * 8), s0);
s += 1 * 4;
d += 1 * 8;
n -= 1;
}
return len;
}
static uint64_t
wuffs_base__pixel_swizzler__bgra_nonpremul_4x16le__rgba_premul__src_over(
uint8_t* dst_ptr,
size_t dst_len,
uint8_t* dst_palette_ptr,
size_t dst_palette_len,
const uint8_t* src_ptr,
size_t src_len) {
size_t dst_len8 = dst_len / 8;
size_t src_len4 = src_len / 4;
size_t len = (dst_len8 < src_len4) ? dst_len8 : src_len4;
uint8_t* d = dst_ptr;
const uint8_t* s = src_ptr;
size_t n = len;
while (n >= 1) {
uint64_t d0 = wuffs_base__peek_u64le__no_bounds_check(d + (0 * 8));
uint64_t s0 =
wuffs_base__color_u32__as__color_u64(wuffs_base__swap_u32_argb_abgr(
wuffs_base__peek_u32le__no_bounds_check(s + (0 * 4))));
wuffs_base__poke_u64le__no_bounds_check(
d + (0 * 8), wuffs_base__composite_nonpremul_premul_u64_axxx(d0, s0));
s += 1 * 4;
d += 1 * 8;
n -= 1;
}
return len;
}
static uint64_t
wuffs_base__pixel_swizzler__bgra_premul__bgra_nonpremul__src(
uint8_t* dst_ptr,
size_t dst_len,
uint8_t* dst_palette_ptr,
size_t dst_palette_len,
const uint8_t* src_ptr,
size_t src_len) {
size_t dst_len4 = dst_len / 4;
size_t src_len4 = src_len / 4;
size_t len = (dst_len4 < src_len4) ? dst_len4 : src_len4;
uint8_t* d = dst_ptr;
const uint8_t* s = src_ptr;
size_t n = len;
while (n >= 1) {
uint32_t s0 = wuffs_base__peek_u32le__no_bounds_check(s + (0 * 4));
wuffs_base__poke_u32le__no_bounds_check(
d + (0 * 4),
wuffs_base__color_u32_argb_nonpremul__as__color_u32_argb_premul(s0));
s += 1 * 4;
d += 1 * 4;
n -= 1;
}
return len;
}
static uint64_t
wuffs_base__pixel_swizzler__bgra_premul__bgra_nonpremul_4x16le__src(
uint8_t* dst_ptr,
size_t dst_len,
uint8_t* dst_palette_ptr,
size_t dst_palette_len,
const uint8_t* src_ptr,
size_t src_len) {
size_t dst_len4 = dst_len / 4;
size_t src_len8 = src_len / 8;
size_t len = (dst_len4 < src_len8) ? dst_len4 : src_len8;
uint8_t* d = dst_ptr;
const uint8_t* s = src_ptr;
size_t n = len;
while (n >= 1) {
uint64_t s0 = wuffs_base__peek_u64le__no_bounds_check(s + (0 * 8));
wuffs_base__poke_u32le__no_bounds_check(
d + (0 * 4),
wuffs_base__color_u64_argb_nonpremul__as__color_u32_argb_premul(s0));
s += 1 * 8;
d += 1 * 4;
n -= 1;
}
return len;
}
static uint64_t
wuffs_base__pixel_swizzler__bgra_premul__bgra_nonpremul__src_over(
uint8_t* dst_ptr,
size_t dst_len,
uint8_t* dst_palette_ptr,
size_t dst_palette_len,
const uint8_t* src_ptr,
size_t src_len) {
size_t dst_len4 = dst_len / 4;
size_t src_len4 = src_len / 4;
size_t len = (dst_len4 < src_len4) ? dst_len4 : src_len4;
uint8_t* d = dst_ptr;
const uint8_t* s = src_ptr;
size_t n = len;
while (n >= 1) {
uint32_t d0 = wuffs_base__peek_u32le__no_bounds_check(d + (0 * 4));
uint32_t s0 = wuffs_base__peek_u32le__no_bounds_check(s + (0 * 4));
wuffs_base__poke_u32le__no_bounds_check(
d + (0 * 4), wuffs_base__composite_premul_nonpremul_u32_axxx(d0, s0));
s += 1 * 4;
d += 1 * 4;
n -= 1;
}
return len;
}
static uint64_t
wuffs_base__pixel_swizzler__bgra_premul__bgra_nonpremul_4x16le__src_over(
uint8_t* dst_ptr,
size_t dst_len,
uint8_t* dst_palette_ptr,
size_t dst_palette_len,
const uint8_t* src_ptr,
size_t src_len) {
size_t dst_len4 = dst_len / 4;
size_t src_len8 = src_len / 8;
size_t len = (dst_len4 < src_len8) ? dst_len4 : src_len8;
uint8_t* d = dst_ptr;
const uint8_t* s = src_ptr;
size_t n = len;
while (n >= 1) {
uint64_t d0 = wuffs_base__color_u32__as__color_u64(
wuffs_base__peek_u32le__no_bounds_check(d + (0 * 4)));
uint64_t s0 = wuffs_base__peek_u64le__no_bounds_check(s + (0 * 8));
wuffs_base__poke_u32le__no_bounds_check(
d + (0 * 4),
wuffs_base__color_u64__as__color_u32(
wuffs_base__composite_premul_nonpremul_u64_axxx(d0, s0)));
s += 1 * 8;
d += 1 * 4;
n -= 1;
}
return len;
}
static uint64_t
wuffs_base__pixel_swizzler__bgra_premul__bgra_premul__src_over(
uint8_t* dst_ptr,
size_t dst_len,
uint8_t* dst_palette_ptr,
size_t dst_palette_len,
const uint8_t* src_ptr,
size_t src_len) {
size_t dst_len4 = dst_len / 4;
size_t src_len4 = src_len / 4;
size_t len = (dst_len4 < src_len4) ? dst_len4 : src_len4;
uint8_t* d = dst_ptr;
const uint8_t* s = src_ptr;
size_t n = len;
while (n >= 1) {
uint32_t d0 = wuffs_base__peek_u32le__no_bounds_check(d + (0 * 4));
uint32_t s0 = wuffs_base__peek_u32le__no_bounds_check(s + (0 * 4));
wuffs_base__poke_u32le__no_bounds_check(
d + (0 * 4), wuffs_base__composite_premul_premul_u32_axxx(d0, s0));
s += 1 * 4;
d += 1 * 4;
n -= 1;
}
return len;
}
static uint64_t
wuffs_base__pixel_swizzler__bgra_premul__index_bgra_nonpremul__src_over(
uint8_t* dst_ptr,
size_t dst_len,
uint8_t* dst_palette_ptr,
size_t dst_palette_len,
const uint8_t* src_ptr,
size_t src_len) {
if (dst_palette_len !=
WUFFS_BASE__PIXEL_FORMAT__INDEXED__PALETTE_BYTE_LENGTH) {
return 0;
}
size_t dst_len4 = dst_len / 4;
size_t len = (dst_len4 < src_len) ? dst_len4 : src_len;
uint8_t* d = dst_ptr;
const uint8_t* s = src_ptr;
size_t n = len;
while (n >= 1) {
uint32_t d0 = wuffs_base__peek_u32le__no_bounds_check(d + (0 * 4));
uint32_t s0 = wuffs_base__peek_u32le__no_bounds_check(dst_palette_ptr +
((size_t)s[0] * 4));
wuffs_base__poke_u32le__no_bounds_check(
d + (0 * 4), wuffs_base__composite_premul_nonpremul_u32_axxx(d0, s0));
s += 1 * 1;
d += 1 * 4;
n -= 1;
}
return len;
}
static uint64_t
wuffs_base__pixel_swizzler__bgra_premul__rgba_nonpremul__src(
uint8_t* dst_ptr,
size_t dst_len,
uint8_t* dst_palette_ptr,
size_t dst_palette_len,
const uint8_t* src_ptr,
size_t src_len) {
size_t dst_len4 = dst_len / 4;
size_t src_len4 = src_len / 4;
size_t len = (dst_len4 < src_len4) ? dst_len4 : src_len4;
uint8_t* d = dst_ptr;
const uint8_t* s = src_ptr;
size_t n = len;
while (n >= 1) {
uint32_t s0 = wuffs_base__swap_u32_argb_abgr(
wuffs_base__peek_u32le__no_bounds_check(s + (0 * 4)));
wuffs_base__poke_u32le__no_bounds_check(
d + (0 * 4),
wuffs_base__color_u32_argb_nonpremul__as__color_u32_argb_premul(s0));
s += 1 * 4;
d += 1 * 4;
n -= 1;
}
return len;
}
static uint64_t
wuffs_base__pixel_swizzler__bgra_premul__rgba_nonpremul__src_over(
uint8_t* dst_ptr,
size_t dst_len,
uint8_t* dst_palette_ptr,
size_t dst_palette_len,
const uint8_t* src_ptr,
size_t src_len) {
size_t dst_len4 = dst_len / 4;
size_t src_len4 = src_len / 4;
size_t len = (dst_len4 < src_len4) ? dst_len4 : src_len4;
uint8_t* d = dst_ptr;
const uint8_t* s = src_ptr;
size_t n = len;
while (n >= 1) {
uint32_t d0 = wuffs_base__peek_u32le__no_bounds_check(d + (0 * 4));
uint32_t s0 = wuffs_base__swap_u32_argb_abgr(
wuffs_base__peek_u32le__no_bounds_check(s + (0 * 4)));
wuffs_base__poke_u32le__no_bounds_check(
d + (0 * 4), wuffs_base__composite_premul_nonpremul_u32_axxx(d0, s0));
s += 1 * 4;
d += 1 * 4;
n -= 1;
}
return len;
}
static uint64_t
wuffs_base__pixel_swizzler__bgra_premul__rgba_nonpremul_4x16le__src(
uint8_t* dst_ptr,
size_t dst_len,
uint8_t* dst_palette_ptr,
size_t dst_palette_len,
const uint8_t* src_ptr,
size_t src_len) {
size_t dst_len4 = dst_len / 4;
size_t src_len8 = src_len / 8;
size_t len = (dst_len4 < src_len8) ? dst_len4 : src_len8;
uint8_t* d = dst_ptr;
const uint8_t* s = src_ptr;
size_t n = len;
while (n >= 1) {
uint64_t s0 = wuffs_base__peek_u64le__no_bounds_check(s + (0 * 8));
wuffs_base__poke_u32le__no_bounds_check(
d + (0 * 4),
wuffs_base__swap_u32_argb_abgr(
wuffs_base__color_u64_argb_nonpremul__as__color_u32_argb_premul(
s0)));
s += 1 * 8;
d += 1 * 4;
n -= 1;
}
return len;
}
static uint64_t
wuffs_base__pixel_swizzler__bgra_premul__rgba_nonpremul_4x16le__src_over(
uint8_t* dst_ptr,
size_t dst_len,
uint8_t* dst_palette_ptr,
size_t dst_palette_len,
const uint8_t* src_ptr,
size_t src_len) {
size_t dst_len4 = dst_len / 4;
size_t src_len8 = src_len / 8;
size_t len = (dst_len4 < src_len8) ? dst_len4 : src_len8;
uint8_t* d = dst_ptr;
const uint8_t* s = src_ptr;
size_t n = len;
while (n >= 1) {
uint64_t d0 = wuffs_base__color_u32__as__color_u64(
wuffs_base__peek_u32le__no_bounds_check(d + (0 * 4)));
uint64_t s0 = wuffs_base__swap_u64_argb_abgr(
wuffs_base__peek_u64le__no_bounds_check(s + (0 * 8)));
wuffs_base__poke_u32le__no_bounds_check(
d + (0 * 4),
wuffs_base__color_u64__as__color_u32(
wuffs_base__composite_premul_nonpremul_u64_axxx(d0, s0)));
s += 1 * 8;
d += 1 * 4;
n -= 1;
}
return len;
}
static uint64_t
wuffs_base__pixel_swizzler__bgra_premul__rgba_premul__src_over(
uint8_t* dst_ptr,
size_t dst_len,
uint8_t* dst_palette_ptr,
size_t dst_palette_len,
const uint8_t* src_ptr,
size_t src_len) {
size_t dst_len4 = dst_len / 4;
size_t src_len4 = src_len / 4;
size_t len = (dst_len4 < src_len4) ? dst_len4 : src_len4;
uint8_t* d = dst_ptr;
const uint8_t* s = src_ptr;
size_t n = len;
while (n >= 1) {
uint32_t d0 = wuffs_base__peek_u32le__no_bounds_check(d + (0 * 4));
uint32_t s0 = wuffs_base__swap_u32_argb_abgr(
wuffs_base__peek_u32le__no_bounds_check(s + (0 * 4)));
wuffs_base__poke_u32le__no_bounds_check(
d + (0 * 4), wuffs_base__composite_premul_premul_u32_axxx(d0, s0));
s += 1 * 4;
d += 1 * 4;
n -= 1;
}
return len;
}
static uint64_t
wuffs_base__pixel_swizzler__bgrw__bgr(uint8_t* dst_ptr,
size_t dst_len,
uint8_t* dst_palette_ptr,
size_t dst_palette_len,
const uint8_t* src_ptr,
size_t src_len) {
size_t dst_len4 = dst_len / 4;
size_t src_len3 = src_len / 3;
size_t len = (dst_len4 < src_len3) ? dst_len4 : src_len3;
uint8_t* d = dst_ptr;
const uint8_t* s = src_ptr;
size_t n = len;
while (n >= 1) {
wuffs_base__poke_u32le__no_bounds_check(
d + (0 * 4),
0xFF000000 | wuffs_base__peek_u24le__no_bounds_check(s + (0 * 3)));
s += 1 * 3;
d += 1 * 4;
n -= 1;
}
return len;
}
static uint64_t
wuffs_base__pixel_swizzler__bgrw__bgr_565(uint8_t* dst_ptr,
size_t dst_len,
uint8_t* dst_palette_ptr,
size_t dst_palette_len,
const uint8_t* src_ptr,
size_t src_len) {
size_t dst_len4 = dst_len / 4;
size_t src_len2 = src_len / 2;
size_t len = (dst_len4 < src_len2) ? dst_len4 : src_len2;
uint8_t* d = dst_ptr;
const uint8_t* s = src_ptr;
size_t n = len;
while (n >= 1) {
wuffs_base__poke_u32le__no_bounds_check(
d + (0 * 4), wuffs_base__color_u16_rgb_565__as__color_u32_argb_premul(
wuffs_base__peek_u16le__no_bounds_check(s + (0 * 2))));
s += 1 * 2;
d += 1 * 4;
n -= 1;
}
return len;
}
static uint64_t
wuffs_base__pixel_swizzler__bgrw__bgrx(uint8_t* dst_ptr,
size_t dst_len,
uint8_t* dst_palette_ptr,
size_t dst_palette_len,
const uint8_t* src_ptr,
size_t src_len) {
size_t dst_len4 = dst_len / 4;
size_t src_len4 = src_len / 4;
size_t len = (dst_len4 < src_len4) ? dst_len4 : src_len4;
uint8_t* d = dst_ptr;
const uint8_t* s = src_ptr;
size_t n = len;
while (n >= 1) {
wuffs_base__poke_u32le__no_bounds_check(
d + (0 * 4),
0xFF000000 | wuffs_base__peek_u32le__no_bounds_check(s + (0 * 4)));
s += 1 * 4;
d += 1 * 4;
n -= 1;
}
return len;
}
#if defined(WUFFS_BASE__CPU_ARCH__X86_FAMILY)
WUFFS_BASE__MAYBE_ATTRIBUTE_TARGET("pclmul,popcnt,sse4.2")
static uint64_t
wuffs_base__pixel_swizzler__bgrw__rgb__sse42(uint8_t* dst_ptr,
size_t dst_len,
uint8_t* dst_palette_ptr,
size_t dst_palette_len,
const uint8_t* src_ptr,
size_t src_len) {
size_t dst_len4 = dst_len / 4;
size_t src_len3 = src_len / 3;
size_t len = (dst_len4 < src_len3) ? dst_len4 : src_len3;
uint8_t* d = dst_ptr;
const uint8_t* s = src_ptr;
size_t n = len;
__m128i shuffle = _mm_set_epi8(+0x00, +0x09, +0x0A, +0x0B,
+0x00, +0x06, +0x07, +0x08,
+0x00, +0x03, +0x04, +0x05,
+0x00, +0x00, +0x01, +0x02);
__m128i or_ff = _mm_set_epi8(-0x01, +0x00, +0x00, +0x00,
-0x01, +0x00, +0x00, +0x00,
-0x01, +0x00, +0x00, +0x00,
-0x01, +0x00, +0x00, +0x00);
while (n >= 6) {
__m128i x;
x = _mm_lddqu_si128((const __m128i*)(const void*)s);
x = _mm_shuffle_epi8(x, shuffle);
x = _mm_or_si128(x, or_ff);
_mm_storeu_si128((__m128i*)(void*)d, x);
s += 4 * 3;
d += 4 * 4;
n -= 4;
}
while (n >= 1) {
uint8_t b0 = s[0];
uint8_t b1 = s[1];
uint8_t b2 = s[2];
d[0] = b2;
d[1] = b1;
d[2] = b0;
d[3] = 0xFF;
s += 1 * 3;
d += 1 * 4;
n -= 1;
}
return len;
}
#endif
static uint64_t
wuffs_base__pixel_swizzler__bgrw__rgb(uint8_t* dst_ptr,
size_t dst_len,
uint8_t* dst_palette_ptr,
size_t dst_palette_len,
const uint8_t* src_ptr,
size_t src_len) {
size_t dst_len4 = dst_len / 4;
size_t src_len3 = src_len / 3;
size_t len = (dst_len4 < src_len3) ? dst_len4 : src_len3;
uint8_t* d = dst_ptr;
const uint8_t* s = src_ptr;
size_t n = len;
while (n >= 1) {
uint8_t b0 = s[0];
uint8_t b1 = s[1];
uint8_t b2 = s[2];
d[0] = b2;
d[1] = b1;
d[2] = b0;
d[3] = 0xFF;
s += 1 * 3;
d += 1 * 4;
n -= 1;
}
return len;
}
static uint64_t
wuffs_base__pixel_swizzler__bgrw__rgbx(uint8_t* dst_ptr,
size_t dst_len,
uint8_t* dst_palette_ptr,
size_t dst_palette_len,
const uint8_t* src_ptr,
size_t src_len) {
size_t dst_len4 = dst_len / 4;
size_t src_len4 = src_len / 4;
size_t len = (dst_len4 < src_len4) ? dst_len4 : src_len4;
uint8_t* d = dst_ptr;
const uint8_t* s = src_ptr;
size_t n = len;
while (n >= 1) {
uint8_t b0 = s[0];
uint8_t b1 = s[1];
uint8_t b2 = s[2];
d[0] = b2;
d[1] = b1;
d[2] = b0;
d[3] = 0xFF;
s += 1 * 4;
d += 1 * 4;
n -= 1;
}
return len;
}
static uint64_t
wuffs_base__pixel_swizzler__bgrw_4x16le__bgr(uint8_t* dst_ptr,
size_t dst_len,
uint8_t* dst_palette_ptr,
size_t dst_palette_len,
const uint8_t* src_ptr,
size_t src_len) {
size_t dst_len8 = dst_len / 8;
size_t src_len3 = src_len / 3;
size_t len = (dst_len8 < src_len3) ? dst_len8 : src_len3;
uint8_t* d = dst_ptr;
const uint8_t* s = src_ptr;
size_t n = len;
while (n >= 1) {
uint8_t s0 = s[0];
uint8_t s1 = s[1];
uint8_t s2 = s[2];
d[0] = s0;
d[1] = s0;
d[2] = s1;
d[3] = s1;
d[4] = s2;
d[5] = s2;
d[6] = 0xFF;
d[7] = 0xFF;
s += 1 * 3;
d += 1 * 8;
n -= 1;
}
return len;
}
static uint64_t
wuffs_base__pixel_swizzler__bgrw_4x16le__bgr_565(uint8_t* dst_ptr,
size_t dst_len,
uint8_t* dst_palette_ptr,
size_t dst_palette_len,
const uint8_t* src_ptr,
size_t src_len) {
size_t dst_len8 = dst_len / 8;
size_t src_len2 = src_len / 2;
size_t len = (dst_len8 < src_len2) ? dst_len8 : src_len2;
uint8_t* d = dst_ptr;
const uint8_t* s = src_ptr;
size_t n = len;
while (n >= 1) {
wuffs_base__poke_u64le__no_bounds_check(
d + (0 * 8),
wuffs_base__color_u32__as__color_u64(
wuffs_base__color_u16_rgb_565__as__color_u32_argb_premul(
wuffs_base__peek_u16le__no_bounds_check(s + (0 * 2)))));
s += 1 * 2;
d += 1 * 8;
n -= 1;
}
return len;
}
static uint64_t
wuffs_base__pixel_swizzler__bgrw_4x16le__bgrx(uint8_t* dst_ptr,
size_t dst_len,
uint8_t* dst_palette_ptr,
size_t dst_palette_len,
const uint8_t* src_ptr,
size_t src_len) {
size_t dst_len8 = dst_len / 8;
size_t src_len4 = src_len / 4;
size_t len = (dst_len8 < src_len4) ? dst_len8 : src_len4;
uint8_t* d = dst_ptr;
const uint8_t* s = src_ptr;
size_t n = len;
while (n >= 1) {
uint8_t s0 = s[0];
uint8_t s1 = s[1];
uint8_t s2 = s[2];
d[0] = s0;
d[1] = s0;
d[2] = s1;
d[3] = s1;
d[4] = s2;
d[5] = s2;
d[6] = 0xFF;
d[7] = 0xFF;
s += 1 * 4;
d += 1 * 8;
n -= 1;
}
return len;
}
static uint64_t
wuffs_base__pixel_swizzler__bgrw_4x16le__rgb(uint8_t* dst_ptr,
size_t dst_len,
uint8_t* dst_palette_ptr,
size_t dst_palette_len,
const uint8_t* src_ptr,
size_t src_len) {
size_t dst_len8 = dst_len / 8;
size_t src_len3 = src_len / 3;
size_t len = (dst_len8 < src_len3) ? dst_len8 : src_len3;
uint8_t* d = dst_ptr;
const uint8_t* s = src_ptr;
size_t n = len;
while (n >= 1) {
uint8_t s0 = s[0];
uint8_t s1 = s[1];
uint8_t s2 = s[2];
d[0] = s2;
d[1] = s2;
d[2] = s1;
d[3] = s1;
d[4] = s0;
d[5] = s0;
d[6] = 0xFF;
d[7] = 0xFF;
s += 1 * 3;
d += 1 * 8;
n -= 1;
}
return len;
}
static uint64_t
wuffs_base__pixel_swizzler__rgba_nonpremul__bgra_nonpremul_4x16le__src(
uint8_t* dst_ptr,
size_t dst_len,
uint8_t* dst_palette_ptr,
size_t dst_palette_len,
const uint8_t* src_ptr,
size_t src_len) {
size_t dst_len4 = dst_len / 4;
size_t src_len8 = src_len / 8;
size_t len = (dst_len4 < src_len8) ? dst_len4 : src_len8;
uint8_t* d = dst_ptr;
const uint8_t* s = src_ptr;
size_t n = len;
while (n >= 1) {
wuffs_base__poke_u32le__no_bounds_check(
d + (0 * 4), wuffs_base__color_u64__as__color_u32__swap_u32_argb_abgr(
wuffs_base__peek_u64le__no_bounds_check(s + (0 * 8))));
s += 1 * 8;
d += 1 * 4;
n -= 1;
}
return len;
}
static uint64_t
wuffs_base__pixel_swizzler__rgba_nonpremul__bgra_nonpremul_4x16le__src_over(
uint8_t* dst_ptr,
size_t dst_len,
uint8_t* dst_palette_ptr,
size_t dst_palette_len,
const uint8_t* src_ptr,
size_t src_len) {
size_t dst_len4 = dst_len / 4;
size_t src_len8 = src_len / 8;
size_t len = (dst_len4 < src_len8) ? dst_len4 : src_len8;
uint8_t* d = dst_ptr;
const uint8_t* s = src_ptr;
size_t n = len;
while (n >= 1) {
uint64_t d0 = wuffs_base__color_u32__as__color_u64(
wuffs_base__peek_u32le__no_bounds_check(d + (0 * 4)));
uint64_t s0 = wuffs_base__swap_u64_argb_abgr(
wuffs_base__peek_u64le__no_bounds_check(s + (0 * 8)));
wuffs_base__poke_u32le__no_bounds_check(
d + (0 * 4),
wuffs_base__color_u64__as__color_u32(
wuffs_base__composite_nonpremul_nonpremul_u64_axxx(d0, s0)));
s += 1 * 8;
d += 1 * 4;
n -= 1;
}
return len;
}
static uint64_t
wuffs_base__pixel_swizzler__rgbw__bgr_565(uint8_t* dst_ptr,
size_t dst_len,
uint8_t* dst_palette_ptr,
size_t dst_palette_len,
const uint8_t* src_ptr,
size_t src_len) {
size_t dst_len4 = dst_len / 4;
size_t src_len2 = src_len / 2;
size_t len = (dst_len4 < src_len2) ? dst_len4 : src_len2;
uint8_t* d = dst_ptr;
const uint8_t* s = src_ptr;
size_t n = len;
while (n >= 1) {
wuffs_base__poke_u32le__no_bounds_check(
d + (0 * 4),
wuffs_base__swap_u32_argb_abgr(
wuffs_base__color_u16_rgb_565__as__color_u32_argb_premul(
wuffs_base__peek_u16le__no_bounds_check(s + (0 * 2)))));
s += 1 * 2;
d += 1 * 4;
n -= 1;
}
return len;
}
static uint64_t
wuffs_base__pixel_swizzler__xxx__index__src(uint8_t* dst_ptr,
size_t dst_len,
uint8_t* dst_palette_ptr,
size_t dst_palette_len,
const uint8_t* src_ptr,
size_t src_len) {
if (dst_palette_len !=
WUFFS_BASE__PIXEL_FORMAT__INDEXED__PALETTE_BYTE_LENGTH) {
return 0;
}
size_t dst_len3 = dst_len / 3;
size_t len = (dst_len3 < src_len) ? dst_len3 : src_len;
uint8_t* d = dst_ptr;
const uint8_t* s = src_ptr;
size_t n = len;
const size_t loop_unroll_count = 4;
while (n > loop_unroll_count) {
wuffs_base__poke_u32le__no_bounds_check(
d + (0 * 3), wuffs_base__peek_u32le__no_bounds_check(
dst_palette_ptr + ((size_t)s[0] * 4)));
wuffs_base__poke_u32le__no_bounds_check(
d + (1 * 3), wuffs_base__peek_u32le__no_bounds_check(
dst_palette_ptr + ((size_t)s[1] * 4)));
wuffs_base__poke_u32le__no_bounds_check(
d + (2 * 3), wuffs_base__peek_u32le__no_bounds_check(
dst_palette_ptr + ((size_t)s[2] * 4)));
wuffs_base__poke_u32le__no_bounds_check(
d + (3 * 3), wuffs_base__peek_u32le__no_bounds_check(
dst_palette_ptr + ((size_t)s[3] * 4)));
s += loop_unroll_count * 1;
d += loop_unroll_count * 3;
n -= loop_unroll_count;
}
while (n >= 1) {
uint32_t s0 = wuffs_base__peek_u32le__no_bounds_check(dst_palette_ptr +
((size_t)s[0] * 4));
wuffs_base__poke_u24le__no_bounds_check(d + (0 * 3), s0);
s += 1 * 1;
d += 1 * 3;
n -= 1;
}
return len;
}
static uint64_t
wuffs_base__pixel_swizzler__xxx__index_bgra_nonpremul__src_over(
uint8_t* dst_ptr,
size_t dst_len,
uint8_t* dst_palette_ptr,
size_t dst_palette_len,
const uint8_t* src_ptr,
size_t src_len) {
if (dst_palette_len !=
WUFFS_BASE__PIXEL_FORMAT__INDEXED__PALETTE_BYTE_LENGTH) {
return 0;
}
size_t dst_len3 = dst_len / 3;
size_t len = (dst_len3 < src_len) ? dst_len3 : src_len;
uint8_t* d = dst_ptr;
const uint8_t* s = src_ptr;
size_t n = len;
while (n >= 1) {
uint32_t d0 =
wuffs_base__peek_u24le__no_bounds_check(d + (0 * 3)) | 0xFF000000;
uint32_t s0 = wuffs_base__peek_u32le__no_bounds_check(dst_palette_ptr +
((size_t)s[0] * 4));
wuffs_base__poke_u24le__no_bounds_check(
d + (0 * 3), wuffs_base__composite_premul_nonpremul_u32_axxx(d0, s0));
s += 1 * 1;
d += 1 * 3;
n -= 1;
}
return len;
}
static uint64_t
wuffs_base__pixel_swizzler__xxx__index_binary_alpha__src_over(
uint8_t* dst_ptr,
size_t dst_len,
uint8_t* dst_palette_ptr,
size_t dst_palette_len,
const uint8_t* src_ptr,
size_t src_len) {
if (dst_palette_len !=
WUFFS_BASE__PIXEL_FORMAT__INDEXED__PALETTE_BYTE_LENGTH) {
return 0;
}
size_t dst_len3 = dst_len / 3;
size_t len = (dst_len3 < src_len) ? dst_len3 : src_len;
uint8_t* d = dst_ptr;
const uint8_t* s = src_ptr;
size_t n = len;
const size_t loop_unroll_count = 4;
while (n >= loop_unroll_count) {
uint32_t s0 = wuffs_base__peek_u32le__no_bounds_check(dst_palette_ptr +
((size_t)s[0] * 4));
if (s0) {
wuffs_base__poke_u24le__no_bounds_check(d + (0 * 3), s0);
}
uint32_t s1 = wuffs_base__peek_u32le__no_bounds_check(dst_palette_ptr +
((size_t)s[1] * 4));
if (s1) {
wuffs_base__poke_u24le__no_bounds_check(d + (1 * 3), s1);
}
uint32_t s2 = wuffs_base__peek_u32le__no_bounds_check(dst_palette_ptr +
((size_t)s[2] * 4));
if (s2) {
wuffs_base__poke_u24le__no_bounds_check(d + (2 * 3), s2);
}
uint32_t s3 = wuffs_base__peek_u32le__no_bounds_check(dst_palette_ptr +
((size_t)s[3] * 4));
if (s3) {
wuffs_base__poke_u24le__no_bounds_check(d + (3 * 3), s3);
}
s += loop_unroll_count * 1;
d += loop_unroll_count * 3;
n -= loop_unroll_count;
}
while (n >= 1) {
uint32_t s0 = wuffs_base__peek_u32le__no_bounds_check(dst_palette_ptr +
((size_t)s[0] * 4));
if (s0) {
wuffs_base__poke_u24le__no_bounds_check(d + (0 * 3), s0);
}
s += 1 * 1;
d += 1 * 3;
n -= 1;
}
return len;
}
static uint64_t
wuffs_base__pixel_swizzler__xxx__xxxx(uint8_t* dst_ptr,
size_t dst_len,
uint8_t* dst_palette_ptr,
size_t dst_palette_len,
const uint8_t* src_ptr,
size_t src_len) {
size_t dst_len3 = dst_len / 3;
size_t src_len4 = src_len / 4;
size_t len = (dst_len3 < src_len4) ? dst_len3 : src_len4;
uint8_t* d = dst_ptr;
const uint8_t* s = src_ptr;
size_t n = len;
while (n >= 1) {
wuffs_base__poke_u24le__no_bounds_check(
d + (0 * 3), wuffs_base__peek_u32le__no_bounds_check(s + (0 * 4)));
s += 1 * 4;
d += 1 * 3;
n -= 1;
}
return len;
}
static uint64_t
wuffs_base__pixel_swizzler__xxx__y(uint8_t* dst_ptr,
size_t dst_len,
uint8_t* dst_palette_ptr,
size_t dst_palette_len,
const uint8_t* src_ptr,
size_t src_len) {
size_t dst_len3 = dst_len / 3;
size_t len = (dst_len3 < src_len) ? dst_len3 : src_len;
uint8_t* d = dst_ptr;
const uint8_t* s = src_ptr;
size_t n = len;
while (n >= 1) {
uint8_t s0 = s[0];
d[0] = s0;
d[1] = s0;
d[2] = s0;
s += 1 * 1;
d += 1 * 3;
n -= 1;
}
return len;
}
static uint64_t
wuffs_base__pixel_swizzler__xxx__y_16be(uint8_t* dst_ptr,
size_t dst_len,
uint8_t* dst_palette_ptr,
size_t dst_palette_len,
const uint8_t* src_ptr,
size_t src_len) {
size_t dst_len3 = dst_len / 3;
size_t src_len2 = src_len / 2;
size_t len = (dst_len3 < src_len2) ? dst_len3 : src_len2;
uint8_t* d = dst_ptr;
const uint8_t* s = src_ptr;
size_t n = len;
while (n >= 1) {
uint8_t s0 = s[0];
d[0] = s0;
d[1] = s0;
d[2] = s0;
s += 1 * 2;
d += 1 * 3;
n -= 1;
}
return len;
}
static uint64_t
wuffs_base__pixel_swizzler__xxxx__index__src(uint8_t* dst_ptr,
size_t dst_len,
uint8_t* dst_palette_ptr,
size_t dst_palette_len,
const uint8_t* src_ptr,
size_t src_len) {
if (dst_palette_len !=
WUFFS_BASE__PIXEL_FORMAT__INDEXED__PALETTE_BYTE_LENGTH) {
return 0;
}
size_t dst_len4 = dst_len / 4;
size_t len = (dst_len4 < src_len) ? dst_len4 : src_len;
uint8_t* d = dst_ptr;
const uint8_t* s = src_ptr;
size_t n = len;
const size_t loop_unroll_count = 4;
while (n >= loop_unroll_count) {
wuffs_base__poke_u32le__no_bounds_check(
d + (0 * 4), wuffs_base__peek_u32le__no_bounds_check(
dst_palette_ptr + ((size_t)s[0] * 4)));
wuffs_base__poke_u32le__no_bounds_check(
d + (1 * 4), wuffs_base__peek_u32le__no_bounds_check(
dst_palette_ptr + ((size_t)s[1] * 4)));
wuffs_base__poke_u32le__no_bounds_check(
d + (2 * 4), wuffs_base__peek_u32le__no_bounds_check(
dst_palette_ptr + ((size_t)s[2] * 4)));
wuffs_base__poke_u32le__no_bounds_check(
d + (3 * 4), wuffs_base__peek_u32le__no_bounds_check(
dst_palette_ptr + ((size_t)s[3] * 4)));
s += loop_unroll_count * 1;
d += loop_unroll_count * 4;
n -= loop_unroll_count;
}
while (n >= 1) {
wuffs_base__poke_u32le__no_bounds_check(
d + (0 * 4), wuffs_base__peek_u32le__no_bounds_check(
dst_palette_ptr + ((size_t)s[0] * 4)));
s += 1 * 1;
d += 1 * 4;
n -= 1;
}
return len;
}
static uint64_t
wuffs_base__pixel_swizzler__xxxx__index_binary_alpha__src_over(
uint8_t* dst_ptr,
size_t dst_len,
uint8_t* dst_palette_ptr,
size_t dst_palette_len,
const uint8_t* src_ptr,
size_t src_len) {
if (dst_palette_len !=
WUFFS_BASE__PIXEL_FORMAT__INDEXED__PALETTE_BYTE_LENGTH) {
return 0;
}
size_t dst_len4 = dst_len / 4;
size_t len = (dst_len4 < src_len) ? dst_len4 : src_len;
uint8_t* d = dst_ptr;
const uint8_t* s = src_ptr;
size_t n = len;
const size_t loop_unroll_count = 4;
while (n >= loop_unroll_count) {
uint32_t s0 = wuffs_base__peek_u32le__no_bounds_check(dst_palette_ptr +
((size_t)s[0] * 4));
if (s0) {
wuffs_base__poke_u32le__no_bounds_check(d + (0 * 4), s0);
}
uint32_t s1 = wuffs_base__peek_u32le__no_bounds_check(dst_palette_ptr +
((size_t)s[1] * 4));
if (s1) {
wuffs_base__poke_u32le__no_bounds_check(d + (1 * 4), s1);
}
uint32_t s2 = wuffs_base__peek_u32le__no_bounds_check(dst_palette_ptr +
((size_t)s[2] * 4));
if (s2) {
wuffs_base__poke_u32le__no_bounds_check(d + (2 * 4), s2);
}
uint32_t s3 = wuffs_base__peek_u32le__no_bounds_check(dst_palette_ptr +
((size_t)s[3] * 4));
if (s3) {
wuffs_base__poke_u32le__no_bounds_check(d + (3 * 4), s3);
}
s += loop_unroll_count * 1;
d += loop_unroll_count * 4;
n -= loop_unroll_count;
}
while (n >= 1) {
uint32_t s0 = wuffs_base__peek_u32le__no_bounds_check(dst_palette_ptr +
((size_t)s[0] * 4));
if (s0) {
wuffs_base__poke_u32le__no_bounds_check(d + (0 * 4), s0);
}
s += 1 * 1;
d += 1 * 4;
n -= 1;
}
return len;
}
#if defined(WUFFS_BASE__CPU_ARCH__X86_FAMILY)
WUFFS_BASE__MAYBE_ATTRIBUTE_TARGET("pclmul,popcnt,sse4.2")
static uint64_t
wuffs_base__pixel_swizzler__xxxx__y__sse42(uint8_t* dst_ptr,
size_t dst_len,
uint8_t* dst_palette_ptr,
size_t dst_palette_len,
const uint8_t* src_ptr,
size_t src_len) {
size_t dst_len4 = dst_len / 4;
size_t len = (dst_len4 < src_len) ? dst_len4 : src_len;
uint8_t* d = dst_ptr;
const uint8_t* s = src_ptr;
size_t n = len;
__m128i shuffle = _mm_set_epi8(+0x03, +0x03, +0x03, +0x03,
+0x02, +0x02, +0x02, +0x02,
+0x01, +0x01, +0x01, +0x01,
+0x00, +0x00, +0x00, +0x00);
__m128i or_ff = _mm_set_epi8(-0x01, +0x00, +0x00, +0x00,
-0x01, +0x00, +0x00, +0x00,
-0x01, +0x00, +0x00, +0x00,
-0x01, +0x00, +0x00, +0x00);
while (n >= 4) {
__m128i x;
x = _mm_cvtsi32_si128((int)(wuffs_base__peek_u32le__no_bounds_check(s)));
x = _mm_shuffle_epi8(x, shuffle);
x = _mm_or_si128(x, or_ff);
_mm_storeu_si128((__m128i*)(void*)d, x);
s += 4 * 1;
d += 4 * 4;
n -= 4;
}
while (n >= 1) {
wuffs_base__poke_u32le__no_bounds_check(
d + (0 * 4), 0xFF000000 | (0x010101 * (uint32_t)s[0]));
s += 1 * 1;
d += 1 * 4;
n -= 1;
}
return len;
}
#endif
static uint64_t
wuffs_base__pixel_swizzler__xxxx__y(uint8_t* dst_ptr,
size_t dst_len,
uint8_t* dst_palette_ptr,
size_t dst_palette_len,
const uint8_t* src_ptr,
size_t src_len) {
size_t dst_len4 = dst_len / 4;
size_t len = (dst_len4 < src_len) ? dst_len4 : src_len;
uint8_t* d = dst_ptr;
const uint8_t* s = src_ptr;
size_t n = len;
while (n >= 1) {
wuffs_base__poke_u32le__no_bounds_check(
d + (0 * 4), 0xFF000000 | (0x010101 * (uint32_t)s[0]));
s += 1 * 1;
d += 1 * 4;
n -= 1;
}
return len;
}
static uint64_t
wuffs_base__pixel_swizzler__xxxx__y_16be(uint8_t* dst_ptr,
size_t dst_len,
uint8_t* dst_palette_ptr,
size_t dst_palette_len,
const uint8_t* src_ptr,
size_t src_len) {
size_t dst_len4 = dst_len / 4;
size_t src_len2 = src_len / 2;
size_t len = (dst_len4 < src_len2) ? dst_len4 : src_len2;
uint8_t* d = dst_ptr;
const uint8_t* s = src_ptr;
size_t n = len;
while (n >= 1) {
wuffs_base__poke_u32le__no_bounds_check(
d + (0 * 4), 0xFF000000 | (0x010101 * (uint32_t)s[0]));
s += 1 * 2;
d += 1 * 4;
n -= 1;
}
return len;
}
static uint64_t
wuffs_base__pixel_swizzler__xxxxxxxx__index__src(uint8_t* dst_ptr,
size_t dst_len,
uint8_t* dst_palette_ptr,
size_t dst_palette_len,
const uint8_t* src_ptr,
size_t src_len) {
if (dst_palette_len !=
WUFFS_BASE__PIXEL_FORMAT__INDEXED__PALETTE_BYTE_LENGTH) {
return 0;
}
size_t dst_len8 = dst_len / 8;
size_t len = (dst_len8 < src_len) ? dst_len8 : src_len;
uint8_t* d = dst_ptr;
const uint8_t* s = src_ptr;
size_t n = len;
while (n >= 1) {
wuffs_base__poke_u64le__no_bounds_check(
d + (0 * 8), wuffs_base__color_u32__as__color_u64(
wuffs_base__peek_u32le__no_bounds_check(
dst_palette_ptr + ((size_t)s[0] * 4))));
s += 1 * 1;
d += 1 * 8;
n -= 1;
}
return len;
}
static uint64_t
wuffs_base__pixel_swizzler__xxxxxxxx__index_binary_alpha__src_over(
uint8_t* dst_ptr,
size_t dst_len,
uint8_t* dst_palette_ptr,
size_t dst_palette_len,
const uint8_t* src_ptr,
size_t src_len) {
if (dst_palette_len !=
WUFFS_BASE__PIXEL_FORMAT__INDEXED__PALETTE_BYTE_LENGTH) {
return 0;
}
size_t dst_len8 = dst_len / 8;
size_t len = (dst_len8 < src_len) ? dst_len8 : src_len;
uint8_t* d = dst_ptr;
const uint8_t* s = src_ptr;
size_t n = len;
while (n >= 1) {
uint32_t s0 = wuffs_base__peek_u32le__no_bounds_check(dst_palette_ptr +
((size_t)s[0] * 4));
if (s0) {
wuffs_base__poke_u64le__no_bounds_check(
d + (0 * 8), wuffs_base__color_u32__as__color_u64(s0));
}
s += 1 * 1;
d += 1 * 8;
n -= 1;
}
return len;
}
static uint64_t
wuffs_base__pixel_swizzler__xxxxxxxx__y(uint8_t* dst_ptr,
size_t dst_len,
uint8_t* dst_palette_ptr,
size_t dst_palette_len,
const uint8_t* src_ptr,
size_t src_len) {
size_t dst_len8 = dst_len / 8;
size_t len = (dst_len8 < src_len) ? dst_len8 : src_len;
uint8_t* d = dst_ptr;
const uint8_t* s = src_ptr;
size_t n = len;
while (n >= 1) {
wuffs_base__poke_u64le__no_bounds_check(
d + (0 * 8), 0xFFFF000000000000 | (0x010101010101 * (uint64_t)s[0]));
s += 1 * 1;
d += 1 * 8;
n -= 1;
}
return len;
}
static uint64_t
wuffs_base__pixel_swizzler__xxxxxxxx__y_16be(uint8_t* dst_ptr,
size_t dst_len,
uint8_t* dst_palette_ptr,
size_t dst_palette_len,
const uint8_t* src_ptr,
size_t src_len) {
size_t dst_len8 = dst_len / 8;
size_t src_len2 = src_len / 2;
size_t len = (dst_len8 < src_len2) ? dst_len8 : src_len2;
uint8_t* d = dst_ptr;
const uint8_t* s = src_ptr;
size_t n = len;
while (n >= 1) {
uint64_t s0 =
((uint64_t)(wuffs_base__peek_u16be__no_bounds_check(s + (0 * 2))));
wuffs_base__poke_u64le__no_bounds_check(
d + (0 * 8), 0xFFFF000000000000 | (0x000100010001 * s0));
s += 1 * 2;
d += 1 * 8;
n -= 1;
}
return len;
}
static uint64_t
wuffs_base__pixel_swizzler__y__y_16be(uint8_t* dst_ptr,
size_t dst_len,
uint8_t* dst_palette_ptr,
size_t dst_palette_len,
const uint8_t* src_ptr,
size_t src_len) {
size_t src_len2 = src_len / 2;
size_t len = (dst_len < src_len2) ? dst_len : src_len2;
uint8_t* d = dst_ptr;
const uint8_t* s = src_ptr;
size_t n = len;
while (n >= 1) {
d[0] = s[0];
s += 1 * 2;
d += 1 * 1;
n -= 1;
}
return len;
}
static uint64_t
wuffs_base__pixel_swizzler__y_16le__y_16be(uint8_t* dst_ptr,
size_t dst_len,
uint8_t* dst_palette_ptr,
size_t dst_palette_len,
const uint8_t* src_ptr,
size_t src_len) {
size_t dst_len2 = dst_len / 2;
size_t src_len2 = src_len / 2;
size_t len = (dst_len2 < src_len2) ? dst_len2 : src_len2;
uint8_t* d = dst_ptr;
const uint8_t* s = src_ptr;
size_t n = len;
while (n >= 1) {
uint8_t s0 = s[0];
uint8_t s1 = s[1];
d[0] = s1;
d[1] = s0;
s += 1 * 2;
d += 1 * 2;
n -= 1;
}
return len;
}
static uint64_t
wuffs_base__pixel_swizzler__transparent_black_src(
uint8_t* dst_ptr,
size_t dst_len,
uint8_t* dst_palette_ptr,
size_t dst_palette_len,
uint64_t num_pixels,
uint32_t dst_pixfmt_bytes_per_pixel) {
uint64_t n = ((uint64_t)dst_len) / dst_pixfmt_bytes_per_pixel;
if (n > num_pixels) {
n = num_pixels;
}
memset(dst_ptr, 0, ((size_t)(n * dst_pixfmt_bytes_per_pixel)));
return n;
}
static uint64_t
wuffs_base__pixel_swizzler__transparent_black_src_over(
uint8_t* dst_ptr,
size_t dst_len,
uint8_t* dst_palette_ptr,
size_t dst_palette_len,
uint64_t num_pixels,
uint32_t dst_pixfmt_bytes_per_pixel) {
uint64_t n = ((uint64_t)dst_len) / dst_pixfmt_bytes_per_pixel;
if (n > num_pixels) {
n = num_pixels;
}
return n;
}
static wuffs_base__pixel_swizzler__func
wuffs_base__pixel_swizzler__prepare__y(wuffs_base__pixel_swizzler* p,
wuffs_base__pixel_format dst_pixfmt,
wuffs_base__slice_u8 dst_palette,
wuffs_base__slice_u8 src_palette,
wuffs_base__pixel_blend blend) {
switch (dst_pixfmt.repr) {
case WUFFS_BASE__PIXEL_FORMAT__Y:
return wuffs_base__pixel_swizzler__copy_1_1;
case WUFFS_BASE__PIXEL_FORMAT__BGR_565:
return wuffs_base__pixel_swizzler__bgr_565__y;
case WUFFS_BASE__PIXEL_FORMAT__BGR:
case WUFFS_BASE__PIXEL_FORMAT__RGB:
return wuffs_base__pixel_swizzler__xxx__y;
case WUFFS_BASE__PIXEL_FORMAT__BGRA_NONPREMUL:
case WUFFS_BASE__PIXEL_FORMAT__BGRA_PREMUL:
case WUFFS_BASE__PIXEL_FORMAT__BGRA_BINARY:
case WUFFS_BASE__PIXEL_FORMAT__BGRX:
case WUFFS_BASE__PIXEL_FORMAT__RGBA_NONPREMUL:
case WUFFS_BASE__PIXEL_FORMAT__RGBA_PREMUL:
case WUFFS_BASE__PIXEL_FORMAT__RGBA_BINARY:
case WUFFS_BASE__PIXEL_FORMAT__RGBX:
#if defined(WUFFS_BASE__CPU_ARCH__X86_FAMILY)
if (wuffs_base__cpu_arch__have_x86_sse42()) {
return wuffs_base__pixel_swizzler__xxxx__y__sse42;
}
#endif
return wuffs_base__pixel_swizzler__xxxx__y;
case WUFFS_BASE__PIXEL_FORMAT__BGRA_NONPREMUL_4X16LE:
case WUFFS_BASE__PIXEL_FORMAT__BGRA_PREMUL_4X16LE:
case WUFFS_BASE__PIXEL_FORMAT__RGBA_NONPREMUL_4X16LE:
case WUFFS_BASE__PIXEL_FORMAT__RGBA_PREMUL_4X16LE:
return wuffs_base__pixel_swizzler__xxxxxxxx__y;
}
return NULL;
}
static wuffs_base__pixel_swizzler__func
wuffs_base__pixel_swizzler__prepare__y_16be(wuffs_base__pixel_swizzler* p,
wuffs_base__pixel_format dst_pixfmt,
wuffs_base__slice_u8 dst_palette,
wuffs_base__slice_u8 src_palette,
wuffs_base__pixel_blend blend) {
switch (dst_pixfmt.repr) {
case WUFFS_BASE__PIXEL_FORMAT__Y:
return wuffs_base__pixel_swizzler__y__y_16be;
case WUFFS_BASE__PIXEL_FORMAT__Y_16LE:
return wuffs_base__pixel_swizzler__y_16le__y_16be;
case WUFFS_BASE__PIXEL_FORMAT__Y_16BE:
return wuffs_base__pixel_swizzler__copy_2_2;
case WUFFS_BASE__PIXEL_FORMAT__BGR_565:
return wuffs_base__pixel_swizzler__bgr_565__y_16be;
case WUFFS_BASE__PIXEL_FORMAT__BGR:
case WUFFS_BASE__PIXEL_FORMAT__RGB:
return wuffs_base__pixel_swizzler__xxx__y_16be;
case WUFFS_BASE__PIXEL_FORMAT__BGRA_NONPREMUL:
case WUFFS_BASE__PIXEL_FORMAT__BGRA_PREMUL:
case WUFFS_BASE__PIXEL_FORMAT__BGRA_BINARY:
case WUFFS_BASE__PIXEL_FORMAT__BGRX:
case WUFFS_BASE__PIXEL_FORMAT__RGBA_NONPREMUL:
case WUFFS_BASE__PIXEL_FORMAT__RGBA_PREMUL:
case WUFFS_BASE__PIXEL_FORMAT__RGBA_BINARY:
case WUFFS_BASE__PIXEL_FORMAT__RGBX:
return wuffs_base__pixel_swizzler__xxxx__y_16be;
case WUFFS_BASE__PIXEL_FORMAT__BGRA_NONPREMUL_4X16LE:
case WUFFS_BASE__PIXEL_FORMAT__BGRA_PREMUL_4X16LE:
case WUFFS_BASE__PIXEL_FORMAT__RGBA_NONPREMUL_4X16LE:
case WUFFS_BASE__PIXEL_FORMAT__RGBA_PREMUL_4X16LE:
return wuffs_base__pixel_swizzler__xxxxxxxx__y_16be;
}
return NULL;
}
static wuffs_base__pixel_swizzler__func
wuffs_base__pixel_swizzler__prepare__indexed__bgra_nonpremul(
wuffs_base__pixel_swizzler* p,
wuffs_base__pixel_format dst_pixfmt,
wuffs_base__slice_u8 dst_palette,
wuffs_base__slice_u8 src_palette,
wuffs_base__pixel_blend blend) {
switch (dst_pixfmt.repr) {
case WUFFS_BASE__PIXEL_FORMAT__INDEXED__BGRA_NONPREMUL:
if (wuffs_base__slice_u8__copy_from_slice(dst_palette, src_palette) !=
WUFFS_BASE__PIXEL_FORMAT__INDEXED__PALETTE_BYTE_LENGTH) {
return NULL;
}
switch (blend) {
case WUFFS_BASE__PIXEL_BLEND__SRC:
return wuffs_base__pixel_swizzler__copy_1_1;
}
return NULL;
case WUFFS_BASE__PIXEL_FORMAT__BGR_565:
switch (blend) {
case WUFFS_BASE__PIXEL_BLEND__SRC:
if (wuffs_base__pixel_swizzler__squash_align4_bgr_565_8888(
dst_palette.ptr, dst_palette.len, src_palette.ptr,
src_palette.len, true) !=
(WUFFS_BASE__PIXEL_FORMAT__INDEXED__PALETTE_BYTE_LENGTH / 4)) {
return NULL;
}
return wuffs_base__pixel_swizzler__bgr_565__index__src;
case WUFFS_BASE__PIXEL_BLEND__SRC_OVER:
if (wuffs_base__slice_u8__copy_from_slice(dst_palette, src_palette) !=
WUFFS_BASE__PIXEL_FORMAT__INDEXED__PALETTE_BYTE_LENGTH) {
return NULL;
}
return wuffs_base__pixel_swizzler__bgr_565__index_bgra_nonpremul__src_over;
}
return NULL;
case WUFFS_BASE__PIXEL_FORMAT__BGR:
switch (blend) {
case WUFFS_BASE__PIXEL_BLEND__SRC:
if (wuffs_base__pixel_swizzler__bgra_premul__bgra_nonpremul__src(
dst_palette.ptr, dst_palette.len, NULL, 0, src_palette.ptr,
src_palette.len) !=
(WUFFS_BASE__PIXEL_FORMAT__INDEXED__PALETTE_BYTE_LENGTH / 4)) {
return NULL;
}
return wuffs_base__pixel_swizzler__xxx__index__src;
case WUFFS_BASE__PIXEL_BLEND__SRC_OVER:
if (wuffs_base__slice_u8__copy_from_slice(dst_palette, src_palette) !=
WUFFS_BASE__PIXEL_FORMAT__INDEXED__PALETTE_BYTE_LENGTH) {
return NULL;
}
return wuffs_base__pixel_swizzler__xxx__index_bgra_nonpremul__src_over;
}
return NULL;
case WUFFS_BASE__PIXEL_FORMAT__BGRA_NONPREMUL:
if (wuffs_base__slice_u8__copy_from_slice(dst_palette, src_palette) !=
WUFFS_BASE__PIXEL_FORMAT__INDEXED__PALETTE_BYTE_LENGTH) {
return NULL;
}
switch (blend) {
case WUFFS_BASE__PIXEL_BLEND__SRC:
return wuffs_base__pixel_swizzler__xxxx__index__src;
case WUFFS_BASE__PIXEL_BLEND__SRC_OVER:
return wuffs_base__pixel_swizzler__bgra_nonpremul__index_bgra_nonpremul__src_over;
}
return NULL;
case WUFFS_BASE__PIXEL_FORMAT__BGRA_NONPREMUL_4X16LE:
if (wuffs_base__slice_u8__copy_from_slice(dst_palette, src_palette) !=
WUFFS_BASE__PIXEL_FORMAT__INDEXED__PALETTE_BYTE_LENGTH) {
return NULL;
}
switch (blend) {
case WUFFS_BASE__PIXEL_BLEND__SRC:
return wuffs_base__pixel_swizzler__xxxxxxxx__index__src;
case WUFFS_BASE__PIXEL_BLEND__SRC_OVER:
return wuffs_base__pixel_swizzler__bgra_nonpremul_4x16le__index_bgra_nonpremul__src_over;
}
return NULL;
case WUFFS_BASE__PIXEL_FORMAT__BGRA_PREMUL:
switch (blend) {
case WUFFS_BASE__PIXEL_BLEND__SRC:
if (wuffs_base__pixel_swizzler__bgra_premul__bgra_nonpremul__src(
dst_palette.ptr, dst_palette.len, NULL, 0, src_palette.ptr,
src_palette.len) !=
(WUFFS_BASE__PIXEL_FORMAT__INDEXED__PALETTE_BYTE_LENGTH / 4)) {
return NULL;
}
return wuffs_base__pixel_swizzler__xxxx__index__src;
case WUFFS_BASE__PIXEL_BLEND__SRC_OVER:
if (wuffs_base__slice_u8__copy_from_slice(dst_palette, src_palette) !=
WUFFS_BASE__PIXEL_FORMAT__INDEXED__PALETTE_BYTE_LENGTH) {
return NULL;
}
return wuffs_base__pixel_swizzler__bgra_premul__index_bgra_nonpremul__src_over;
}
return NULL;
case WUFFS_BASE__PIXEL_FORMAT__RGB:
break;
case WUFFS_BASE__PIXEL_FORMAT__RGBA_NONPREMUL:
if (wuffs_base__pixel_swizzler__swap_rgbx_bgrx(
dst_palette.ptr, dst_palette.len, NULL, 0, src_palette.ptr,
src_palette.len) !=
(WUFFS_BASE__PIXEL_FORMAT__INDEXED__PALETTE_BYTE_LENGTH / 4)) {
return NULL;
}
switch (blend) {
case WUFFS_BASE__PIXEL_BLEND__SRC:
return wuffs_base__pixel_swizzler__xxxx__index__src;
case WUFFS_BASE__PIXEL_BLEND__SRC_OVER:
return wuffs_base__pixel_swizzler__bgra_nonpremul__index_bgra_nonpremul__src_over;
}
return NULL;
case WUFFS_BASE__PIXEL_FORMAT__RGBA_PREMUL:
switch (blend) {
case WUFFS_BASE__PIXEL_BLEND__SRC:
if (wuffs_base__pixel_swizzler__bgra_premul__rgba_nonpremul__src(
dst_palette.ptr, dst_palette.len, NULL, 0, src_palette.ptr,
src_palette.len) !=
(WUFFS_BASE__PIXEL_FORMAT__INDEXED__PALETTE_BYTE_LENGTH / 4)) {
return NULL;
}
return wuffs_base__pixel_swizzler__xxxx__index__src;
case WUFFS_BASE__PIXEL_BLEND__SRC_OVER:
if (wuffs_base__pixel_swizzler__swap_rgbx_bgrx(
dst_palette.ptr, dst_palette.len, NULL, 0, src_palette.ptr,
src_palette.len) !=
(WUFFS_BASE__PIXEL_FORMAT__INDEXED__PALETTE_BYTE_LENGTH / 4)) {
return NULL;
}
return wuffs_base__pixel_swizzler__bgra_premul__index_bgra_nonpremul__src_over;
}
return NULL;
case WUFFS_BASE__PIXEL_FORMAT__RGBX:
break;
}
return NULL;
}
static wuffs_base__pixel_swizzler__func
wuffs_base__pixel_swizzler__prepare__indexed__bgra_binary(
wuffs_base__pixel_swizzler* p,
wuffs_base__pixel_format dst_pixfmt,
wuffs_base__slice_u8 dst_palette,
wuffs_base__slice_u8 src_palette,
wuffs_base__pixel_blend blend) {
switch (dst_pixfmt.repr) {
case WUFFS_BASE__PIXEL_FORMAT__INDEXED__BGRA_NONPREMUL:
case WUFFS_BASE__PIXEL_FORMAT__INDEXED__BGRA_PREMUL:
case WUFFS_BASE__PIXEL_FORMAT__INDEXED__BGRA_BINARY:
if (wuffs_base__slice_u8__copy_from_slice(dst_palette, src_palette) !=
WUFFS_BASE__PIXEL_FORMAT__INDEXED__PALETTE_BYTE_LENGTH) {
return NULL;
}
switch (blend) {
case WUFFS_BASE__PIXEL_BLEND__SRC:
return wuffs_base__pixel_swizzler__copy_1_1;
}
return NULL;
case WUFFS_BASE__PIXEL_FORMAT__BGR_565:
if (wuffs_base__pixel_swizzler__squash_align4_bgr_565_8888(
dst_palette.ptr, dst_palette.len, src_palette.ptr,
src_palette.len, false) !=
(WUFFS_BASE__PIXEL_FORMAT__INDEXED__PALETTE_BYTE_LENGTH / 4)) {
return NULL;
}
switch (blend) {
case WUFFS_BASE__PIXEL_BLEND__SRC:
return wuffs_base__pixel_swizzler__bgr_565__index__src;
case WUFFS_BASE__PIXEL_BLEND__SRC_OVER:
return wuffs_base__pixel_swizzler__bgr_565__index_binary_alpha__src_over;
}
return NULL;
case WUFFS_BASE__PIXEL_FORMAT__BGR:
if (wuffs_base__slice_u8__copy_from_slice(dst_palette, src_palette) !=
WUFFS_BASE__PIXEL_FORMAT__INDEXED__PALETTE_BYTE_LENGTH) {
return NULL;
}
switch (blend) {
case WUFFS_BASE__PIXEL_BLEND__SRC:
return wuffs_base__pixel_swizzler__xxx__index__src;
case WUFFS_BASE__PIXEL_BLEND__SRC_OVER:
return wuffs_base__pixel_swizzler__xxx__index_binary_alpha__src_over;
}
return NULL;
case WUFFS_BASE__PIXEL_FORMAT__BGRA_NONPREMUL:
case WUFFS_BASE__PIXEL_FORMAT__BGRA_PREMUL:
case WUFFS_BASE__PIXEL_FORMAT__BGRA_BINARY:
if (wuffs_base__slice_u8__copy_from_slice(dst_palette, src_palette) !=
WUFFS_BASE__PIXEL_FORMAT__INDEXED__PALETTE_BYTE_LENGTH) {
return NULL;
}
switch (blend) {
case WUFFS_BASE__PIXEL_BLEND__SRC:
return wuffs_base__pixel_swizzler__xxxx__index__src;
case WUFFS_BASE__PIXEL_BLEND__SRC_OVER:
return wuffs_base__pixel_swizzler__xxxx__index_binary_alpha__src_over;
}
return NULL;
case WUFFS_BASE__PIXEL_FORMAT__BGRA_NONPREMUL_4X16LE:
case WUFFS_BASE__PIXEL_FORMAT__BGRA_PREMUL_4X16LE:
if (wuffs_base__slice_u8__copy_from_slice(dst_palette, src_palette) !=
WUFFS_BASE__PIXEL_FORMAT__INDEXED__PALETTE_BYTE_LENGTH) {
return NULL;
}
switch (blend) {
case WUFFS_BASE__PIXEL_BLEND__SRC:
return wuffs_base__pixel_swizzler__xxxxxxxx__index__src;
case WUFFS_BASE__PIXEL_BLEND__SRC_OVER:
return wuffs_base__pixel_swizzler__xxxxxxxx__index_binary_alpha__src_over;
}
return NULL;
case WUFFS_BASE__PIXEL_FORMAT__RGB:
if (wuffs_base__pixel_swizzler__swap_rgbx_bgrx(
dst_palette.ptr, dst_palette.len, NULL, 0, src_palette.ptr,
src_palette.len) !=
(WUFFS_BASE__PIXEL_FORMAT__INDEXED__PALETTE_BYTE_LENGTH / 4)) {
return NULL;
}
switch (blend) {
case WUFFS_BASE__PIXEL_BLEND__SRC:
return wuffs_base__pixel_swizzler__xxx__index__src;
case WUFFS_BASE__PIXEL_BLEND__SRC_OVER:
return wuffs_base__pixel_swizzler__xxx__index_binary_alpha__src_over;
}
return NULL;
case WUFFS_BASE__PIXEL_FORMAT__RGBA_NONPREMUL:
case WUFFS_BASE__PIXEL_FORMAT__RGBA_PREMUL:
case WUFFS_BASE__PIXEL_FORMAT__RGBA_BINARY:
if (wuffs_base__pixel_swizzler__swap_rgbx_bgrx(
dst_palette.ptr, dst_palette.len, NULL, 0, src_palette.ptr,
src_palette.len) !=
(WUFFS_BASE__PIXEL_FORMAT__INDEXED__PALETTE_BYTE_LENGTH / 4)) {
return NULL;
}
switch (blend) {
case WUFFS_BASE__PIXEL_BLEND__SRC:
return wuffs_base__pixel_swizzler__xxxx__index__src;
case WUFFS_BASE__PIXEL_BLEND__SRC_OVER:
return wuffs_base__pixel_swizzler__xxxx__index_binary_alpha__src_over;
}
return NULL;
}
return NULL;
}
static wuffs_base__pixel_swizzler__func
wuffs_base__pixel_swizzler__prepare__bgr_565(
wuffs_base__pixel_swizzler* p,
wuffs_base__pixel_format dst_pixfmt,
wuffs_base__slice_u8 dst_palette,
wuffs_base__slice_u8 src_palette,
wuffs_base__pixel_blend blend) {
switch (dst_pixfmt.repr) {
case WUFFS_BASE__PIXEL_FORMAT__BGR_565:
return wuffs_base__pixel_swizzler__copy_2_2;
case WUFFS_BASE__PIXEL_FORMAT__BGR:
return wuffs_base__pixel_swizzler__bgr__bgr_565;
case WUFFS_BASE__PIXEL_FORMAT__BGRA_NONPREMUL:
case WUFFS_BASE__PIXEL_FORMAT__BGRA_PREMUL:
case WUFFS_BASE__PIXEL_FORMAT__BGRA_BINARY:
case WUFFS_BASE__PIXEL_FORMAT__BGRX:
return wuffs_base__pixel_swizzler__bgrw__bgr_565;
case WUFFS_BASE__PIXEL_FORMAT__BGRA_NONPREMUL_4X16LE:
case WUFFS_BASE__PIXEL_FORMAT__BGRA_PREMUL_4X16LE:
return wuffs_base__pixel_swizzler__bgrw_4x16le__bgr_565;
case WUFFS_BASE__PIXEL_FORMAT__RGBA_NONPREMUL:
case WUFFS_BASE__PIXEL_FORMAT__RGBA_PREMUL:
case WUFFS_BASE__PIXEL_FORMAT__RGBA_BINARY:
case WUFFS_BASE__PIXEL_FORMAT__RGBX:
return wuffs_base__pixel_swizzler__rgbw__bgr_565;
}
return NULL;
}
static wuffs_base__pixel_swizzler__func
wuffs_base__pixel_swizzler__prepare__bgr(wuffs_base__pixel_swizzler* p,
wuffs_base__pixel_format dst_pixfmt,
wuffs_base__slice_u8 dst_palette,
wuffs_base__slice_u8 src_palette,
wuffs_base__pixel_blend blend) {
switch (dst_pixfmt.repr) {
case WUFFS_BASE__PIXEL_FORMAT__BGR_565:
return wuffs_base__pixel_swizzler__bgr_565__bgr;
case WUFFS_BASE__PIXEL_FORMAT__BGR:
return wuffs_base__pixel_swizzler__copy_3_3;
case WUFFS_BASE__PIXEL_FORMAT__BGRA_NONPREMUL:
case WUFFS_BASE__PIXEL_FORMAT__BGRA_PREMUL:
case WUFFS_BASE__PIXEL_FORMAT__BGRA_BINARY:
case WUFFS_BASE__PIXEL_FORMAT__BGRX:
return wuffs_base__pixel_swizzler__bgrw__bgr;
case WUFFS_BASE__PIXEL_FORMAT__BGRA_NONPREMUL_4X16LE:
case WUFFS_BASE__PIXEL_FORMAT__BGRA_PREMUL_4X16LE:
return wuffs_base__pixel_swizzler__bgrw_4x16le__bgr;
case WUFFS_BASE__PIXEL_FORMAT__RGB:
return wuffs_base__pixel_swizzler__swap_rgb_bgr;
case WUFFS_BASE__PIXEL_FORMAT__RGBA_NONPREMUL:
case WUFFS_BASE__PIXEL_FORMAT__RGBA_PREMUL:
case WUFFS_BASE__PIXEL_FORMAT__RGBA_BINARY:
case WUFFS_BASE__PIXEL_FORMAT__RGBX:
#if defined(WUFFS_BASE__CPU_ARCH__X86_FAMILY)
if (wuffs_base__cpu_arch__have_x86_sse42()) {
return wuffs_base__pixel_swizzler__bgrw__rgb__sse42;
}
#endif
return wuffs_base__pixel_swizzler__bgrw__rgb;
}
return NULL;
}
static wuffs_base__pixel_swizzler__func
wuffs_base__pixel_swizzler__prepare__bgra_nonpremul(
wuffs_base__pixel_swizzler* p,
wuffs_base__pixel_format dst_pixfmt,
wuffs_base__slice_u8 dst_palette,
wuffs_base__slice_u8 src_palette,
wuffs_base__pixel_blend blend) {
switch (dst_pixfmt.repr) {
case WUFFS_BASE__PIXEL_FORMAT__BGR_565:
switch (blend) {
case WUFFS_BASE__PIXEL_BLEND__SRC:
return wuffs_base__pixel_swizzler__bgr_565__bgra_nonpremul__src;
case WUFFS_BASE__PIXEL_BLEND__SRC_OVER:
return wuffs_base__pixel_swizzler__bgr_565__bgra_nonpremul__src_over;
}
return NULL;
case WUFFS_BASE__PIXEL_FORMAT__BGR:
switch (blend) {
case WUFFS_BASE__PIXEL_BLEND__SRC:
return wuffs_base__pixel_swizzler__bgr__bgra_nonpremul__src;
case WUFFS_BASE__PIXEL_BLEND__SRC_OVER:
return wuffs_base__pixel_swizzler__bgr__bgra_nonpremul__src_over;
}
return NULL;
case WUFFS_BASE__PIXEL_FORMAT__BGRA_NONPREMUL:
switch (blend) {
case WUFFS_BASE__PIXEL_BLEND__SRC:
return wuffs_base__pixel_swizzler__copy_4_4;
case WUFFS_BASE__PIXEL_BLEND__SRC_OVER:
return wuffs_base__pixel_swizzler__bgra_nonpremul__bgra_nonpremul__src_over;
}
return NULL;
case WUFFS_BASE__PIXEL_FORMAT__BGRA_NONPREMUL_4X16LE:
switch (blend) {
case WUFFS_BASE__PIXEL_BLEND__SRC:
return wuffs_base__pixel_swizzler__bgra_nonpremul_4x16le__bgra_nonpremul__src;
case WUFFS_BASE__PIXEL_BLEND__SRC_OVER:
return wuffs_base__pixel_swizzler__bgra_nonpremul_4x16le__bgra_nonpremul__src_over;
}
return NULL;
case WUFFS_BASE__PIXEL_FORMAT__BGRA_PREMUL:
switch (blend) {
case WUFFS_BASE__PIXEL_BLEND__SRC:
return wuffs_base__pixel_swizzler__bgra_premul__bgra_nonpremul__src;
case WUFFS_BASE__PIXEL_BLEND__SRC_OVER:
return wuffs_base__pixel_swizzler__bgra_premul__bgra_nonpremul__src_over;
}
return NULL;
case WUFFS_BASE__PIXEL_FORMAT__BGRA_BINARY:
case WUFFS_BASE__PIXEL_FORMAT__BGRX:
break;
case WUFFS_BASE__PIXEL_FORMAT__RGB:
break;
case WUFFS_BASE__PIXEL_FORMAT__RGBA_NONPREMUL:
switch (blend) {
case WUFFS_BASE__PIXEL_BLEND__SRC:
#if defined(WUFFS_BASE__CPU_ARCH__X86_FAMILY)
if (wuffs_base__cpu_arch__have_x86_sse42()) {
return wuffs_base__pixel_swizzler__swap_rgbx_bgrx__sse42;
}
#endif
return wuffs_base__pixel_swizzler__swap_rgbx_bgrx;
case WUFFS_BASE__PIXEL_BLEND__SRC_OVER:
return wuffs_base__pixel_swizzler__bgra_nonpremul__rgba_nonpremul__src_over;
}
return NULL;
case WUFFS_BASE__PIXEL_FORMAT__RGBA_PREMUL:
switch (blend) {
case WUFFS_BASE__PIXEL_BLEND__SRC:
return wuffs_base__pixel_swizzler__bgra_premul__rgba_nonpremul__src;
case WUFFS_BASE__PIXEL_BLEND__SRC_OVER:
return wuffs_base__pixel_swizzler__bgra_premul__rgba_nonpremul__src_over;
}
return NULL;
case WUFFS_BASE__PIXEL_FORMAT__RGBA_BINARY:
case WUFFS_BASE__PIXEL_FORMAT__RGBX:
break;
}
return NULL;
}
static wuffs_base__pixel_swizzler__func
wuffs_base__pixel_swizzler__prepare__bgra_nonpremul_4x16le(
wuffs_base__pixel_swizzler* p,
wuffs_base__pixel_format dst_pixfmt,
wuffs_base__slice_u8 dst_palette,
wuffs_base__slice_u8 src_palette,
wuffs_base__pixel_blend blend) {
switch (dst_pixfmt.repr) {
case WUFFS_BASE__PIXEL_FORMAT__BGR_565:
switch (blend) {
case WUFFS_BASE__PIXEL_BLEND__SRC:
return wuffs_base__pixel_swizzler__bgr_565__bgra_nonpremul_4x16le__src;
case WUFFS_BASE__PIXEL_BLEND__SRC_OVER:
return wuffs_base__pixel_swizzler__bgr_565__bgra_nonpremul_4x16le__src_over;
}
return NULL;
case WUFFS_BASE__PIXEL_FORMAT__BGR:
switch (blend) {
case WUFFS_BASE__PIXEL_BLEND__SRC:
return wuffs_base__pixel_swizzler__bgr__bgra_nonpremul_4x16le__src;
case WUFFS_BASE__PIXEL_BLEND__SRC_OVER:
return wuffs_base__pixel_swizzler__bgr__bgra_nonpremul_4x16le__src_over;
}
return NULL;
case WUFFS_BASE__PIXEL_FORMAT__BGRA_NONPREMUL:
switch (blend) {
case WUFFS_BASE__PIXEL_BLEND__SRC:
return wuffs_base__pixel_swizzler__bgra_nonpremul__bgra_nonpremul_4x16le__src;
case WUFFS_BASE__PIXEL_BLEND__SRC_OVER:
return wuffs_base__pixel_swizzler__bgra_nonpremul__bgra_nonpremul_4x16le__src_over;
}
return NULL;
case WUFFS_BASE__PIXEL_FORMAT__BGRA_NONPREMUL_4X16LE:
switch (blend) {
case WUFFS_BASE__PIXEL_BLEND__SRC:
return wuffs_base__pixel_swizzler__copy_8_8;
case WUFFS_BASE__PIXEL_BLEND__SRC_OVER:
return wuffs_base__pixel_swizzler__bgra_nonpremul_4x16le__bgra_nonpremul_4x16le__src_over;
}
return NULL;
case WUFFS_BASE__PIXEL_FORMAT__BGRA_PREMUL:
switch (blend) {
case WUFFS_BASE__PIXEL_BLEND__SRC:
return wuffs_base__pixel_swizzler__bgra_premul__bgra_nonpremul_4x16le__src;
case WUFFS_BASE__PIXEL_BLEND__SRC_OVER:
return wuffs_base__pixel_swizzler__bgra_premul__bgra_nonpremul_4x16le__src_over;
}
return NULL;
case WUFFS_BASE__PIXEL_FORMAT__BGRA_BINARY:
case WUFFS_BASE__PIXEL_FORMAT__BGRX:
break;
case WUFFS_BASE__PIXEL_FORMAT__RGB:
break;
case WUFFS_BASE__PIXEL_FORMAT__RGBA_NONPREMUL:
switch (blend) {
case WUFFS_BASE__PIXEL_BLEND__SRC:
return wuffs_base__pixel_swizzler__rgba_nonpremul__bgra_nonpremul_4x16le__src;
case WUFFS_BASE__PIXEL_BLEND__SRC_OVER:
return wuffs_base__pixel_swizzler__rgba_nonpremul__bgra_nonpremul_4x16le__src_over;
}
break;
case WUFFS_BASE__PIXEL_FORMAT__RGBA_PREMUL:
switch (blend) {
case WUFFS_BASE__PIXEL_BLEND__SRC:
return wuffs_base__pixel_swizzler__bgra_premul__rgba_nonpremul_4x16le__src;
case WUFFS_BASE__PIXEL_BLEND__SRC_OVER:
return wuffs_base__pixel_swizzler__bgra_premul__rgba_nonpremul_4x16le__src_over;
}
return NULL;
case WUFFS_BASE__PIXEL_FORMAT__RGBA_BINARY:
case WUFFS_BASE__PIXEL_FORMAT__RGBX:
break;
}
return NULL;
}
static wuffs_base__pixel_swizzler__func
wuffs_base__pixel_swizzler__prepare__bgra_premul(
wuffs_base__pixel_swizzler* p,
wuffs_base__pixel_format dst_pixfmt,
wuffs_base__slice_u8 dst_palette,
wuffs_base__slice_u8 src_palette,
wuffs_base__pixel_blend blend) {
switch (dst_pixfmt.repr) {
case WUFFS_BASE__PIXEL_FORMAT__BGR_565:
switch (blend) {
case WUFFS_BASE__PIXEL_BLEND__SRC:
return wuffs_base__pixel_swizzler__bgr_565__bgra_premul__src;
case WUFFS_BASE__PIXEL_BLEND__SRC_OVER:
return wuffs_base__pixel_swizzler__bgr_565__bgra_premul__src_over;
}
return NULL;
case WUFFS_BASE__PIXEL_FORMAT__BGR:
switch (blend) {
case WUFFS_BASE__PIXEL_BLEND__SRC:
return wuffs_base__pixel_swizzler__bgr__bgra_premul__src;
case WUFFS_BASE__PIXEL_BLEND__SRC_OVER:
return wuffs_base__pixel_swizzler__bgr__bgra_premul__src_over;
}
return NULL;
case WUFFS_BASE__PIXEL_FORMAT__BGRA_NONPREMUL:
switch (blend) {
case WUFFS_BASE__PIXEL_BLEND__SRC:
return wuffs_base__pixel_swizzler__bgra_nonpremul__bgra_premul__src;
case WUFFS_BASE__PIXEL_BLEND__SRC_OVER:
return wuffs_base__pixel_swizzler__bgra_nonpremul__bgra_premul__src_over;
}
return NULL;
case WUFFS_BASE__PIXEL_FORMAT__BGRA_NONPREMUL_4X16LE:
switch (blend) {
case WUFFS_BASE__PIXEL_BLEND__SRC:
return wuffs_base__pixel_swizzler__bgra_nonpremul_4x16le__bgra_premul__src;
case WUFFS_BASE__PIXEL_BLEND__SRC_OVER:
return wuffs_base__pixel_swizzler__bgra_nonpremul_4x16le__bgra_premul__src_over;
}
return NULL;
case WUFFS_BASE__PIXEL_FORMAT__BGRA_PREMUL:
switch (blend) {
case WUFFS_BASE__PIXEL_BLEND__SRC:
return wuffs_base__pixel_swizzler__copy_4_4;
case WUFFS_BASE__PIXEL_BLEND__SRC_OVER:
return wuffs_base__pixel_swizzler__bgra_premul__bgra_premul__src_over;
}
return NULL;
case WUFFS_BASE__PIXEL_FORMAT__RGBA_NONPREMUL:
switch (blend) {
case WUFFS_BASE__PIXEL_BLEND__SRC:
return wuffs_base__pixel_swizzler__bgra_nonpremul__rgba_premul__src;
case WUFFS_BASE__PIXEL_BLEND__SRC_OVER:
return wuffs_base__pixel_swizzler__bgra_nonpremul__rgba_premul__src_over;
}
return NULL;
case WUFFS_BASE__PIXEL_FORMAT__RGBA_PREMUL:
switch (blend) {
case WUFFS_BASE__PIXEL_BLEND__SRC:
#if defined(WUFFS_BASE__CPU_ARCH__X86_FAMILY)
if (wuffs_base__cpu_arch__have_x86_sse42()) {
return wuffs_base__pixel_swizzler__swap_rgbx_bgrx__sse42;
}
#endif
return wuffs_base__pixel_swizzler__swap_rgbx_bgrx;
case WUFFS_BASE__PIXEL_BLEND__SRC_OVER:
return wuffs_base__pixel_swizzler__bgra_premul__rgba_premul__src_over;
}
return NULL;
}
return NULL;
}
static wuffs_base__pixel_swizzler__func
wuffs_base__pixel_swizzler__prepare__bgrx(wuffs_base__pixel_swizzler* p,
wuffs_base__pixel_format dst_pixfmt,
wuffs_base__slice_u8 dst_palette,
wuffs_base__slice_u8 src_palette,
wuffs_base__pixel_blend blend) {
switch (dst_pixfmt.repr) {
case WUFFS_BASE__PIXEL_FORMAT__BGR_565:
return wuffs_base__pixel_swizzler__bgr_565__bgrx;
case WUFFS_BASE__PIXEL_FORMAT__BGR:
return wuffs_base__pixel_swizzler__xxx__xxxx;
case WUFFS_BASE__PIXEL_FORMAT__BGRA_NONPREMUL:
case WUFFS_BASE__PIXEL_FORMAT__BGRA_PREMUL:
case WUFFS_BASE__PIXEL_FORMAT__BGRA_BINARY:
return wuffs_base__pixel_swizzler__bgrw__bgrx;
case WUFFS_BASE__PIXEL_FORMAT__BGRA_NONPREMUL_4X16LE:
return wuffs_base__pixel_swizzler__bgrw_4x16le__bgrx;
case WUFFS_BASE__PIXEL_FORMAT__BGRX:
return wuffs_base__pixel_swizzler__copy_4_4;
case WUFFS_BASE__PIXEL_FORMAT__RGB:
break;
case WUFFS_BASE__PIXEL_FORMAT__RGBA_NONPREMUL:
case WUFFS_BASE__PIXEL_FORMAT__RGBA_PREMUL:
case WUFFS_BASE__PIXEL_FORMAT__RGBA_BINARY:
case WUFFS_BASE__PIXEL_FORMAT__RGBX:
return wuffs_base__pixel_swizzler__bgrw__rgbx;
}
return NULL;
}
static wuffs_base__pixel_swizzler__func
wuffs_base__pixel_swizzler__prepare__rgb(wuffs_base__pixel_swizzler* p,
wuffs_base__pixel_format dst_pixfmt,
wuffs_base__slice_u8 dst_palette,
wuffs_base__slice_u8 src_palette,
wuffs_base__pixel_blend blend) {
switch (dst_pixfmt.repr) {
case WUFFS_BASE__PIXEL_FORMAT__BGR_565:
return wuffs_base__pixel_swizzler__bgr_565__rgb;
case WUFFS_BASE__PIXEL_FORMAT__BGR:
return wuffs_base__pixel_swizzler__swap_rgb_bgr;
case WUFFS_BASE__PIXEL_FORMAT__BGRA_NONPREMUL:
case WUFFS_BASE__PIXEL_FORMAT__BGRA_PREMUL:
case WUFFS_BASE__PIXEL_FORMAT__BGRA_BINARY:
case WUFFS_BASE__PIXEL_FORMAT__BGRX:
#if defined(WUFFS_BASE__CPU_ARCH__X86_FAMILY)
if (wuffs_base__cpu_arch__have_x86_sse42()) {
return wuffs_base__pixel_swizzler__bgrw__rgb__sse42;
}
#endif
return wuffs_base__pixel_swizzler__bgrw__rgb;
case WUFFS_BASE__PIXEL_FORMAT__BGRA_NONPREMUL_4X16LE:
return wuffs_base__pixel_swizzler__bgrw_4x16le__rgb;
case WUFFS_BASE__PIXEL_FORMAT__RGB:
return wuffs_base__pixel_swizzler__copy_3_3;
case WUFFS_BASE__PIXEL_FORMAT__RGBA_NONPREMUL:
case WUFFS_BASE__PIXEL_FORMAT__RGBA_PREMUL:
case WUFFS_BASE__PIXEL_FORMAT__RGBA_BINARY:
case WUFFS_BASE__PIXEL_FORMAT__RGBX:
return wuffs_base__pixel_swizzler__bgrw__bgr;
}
return NULL;
}
static wuffs_base__pixel_swizzler__func
wuffs_base__pixel_swizzler__prepare__rgba_nonpremul(
wuffs_base__pixel_swizzler* p,
wuffs_base__pixel_format dst_pixfmt,
wuffs_base__slice_u8 dst_palette,
wuffs_base__slice_u8 src_palette,
wuffs_base__pixel_blend blend) {
switch (dst_pixfmt.repr) {
case WUFFS_BASE__PIXEL_FORMAT__BGR_565:
switch (blend) {
case WUFFS_BASE__PIXEL_BLEND__SRC:
return wuffs_base__pixel_swizzler__bgr_565__rgba_nonpremul__src;
case WUFFS_BASE__PIXEL_BLEND__SRC_OVER:
return wuffs_base__pixel_swizzler__bgr_565__rgba_nonpremul__src_over;
}
return NULL;
case WUFFS_BASE__PIXEL_FORMAT__BGR:
switch (blend) {
case WUFFS_BASE__PIXEL_BLEND__SRC:
return wuffs_base__pixel_swizzler__bgr__rgba_nonpremul__src;
case WUFFS_BASE__PIXEL_BLEND__SRC_OVER:
return wuffs_base__pixel_swizzler__bgr__rgba_nonpremul__src_over;
}
return NULL;
case WUFFS_BASE__PIXEL_FORMAT__BGRA_NONPREMUL:
switch (blend) {
case WUFFS_BASE__PIXEL_BLEND__SRC:
#if defined(WUFFS_BASE__CPU_ARCH__X86_FAMILY)
if (wuffs_base__cpu_arch__have_x86_sse42()) {
return wuffs_base__pixel_swizzler__swap_rgbx_bgrx__sse42;
}
#endif
return wuffs_base__pixel_swizzler__swap_rgbx_bgrx;
case WUFFS_BASE__PIXEL_BLEND__SRC_OVER:
return wuffs_base__pixel_swizzler__bgra_nonpremul__rgba_nonpremul__src_over;
}
return NULL;
case WUFFS_BASE__PIXEL_FORMAT__BGRA_NONPREMUL_4X16LE:
switch (blend) {
case WUFFS_BASE__PIXEL_BLEND__SRC:
return wuffs_base__pixel_swizzler__bgra_nonpremul_4x16le__rgba_nonpremul__src;
case WUFFS_BASE__PIXEL_BLEND__SRC_OVER:
return wuffs_base__pixel_swizzler__bgra_nonpremul_4x16le__rgba_nonpremul__src_over;
}
return NULL;
case WUFFS_BASE__PIXEL_FORMAT__BGRA_PREMUL:
switch (blend) {
case WUFFS_BASE__PIXEL_BLEND__SRC:
return wuffs_base__pixel_swizzler__bgra_premul__rgba_nonpremul__src;
case WUFFS_BASE__PIXEL_BLEND__SRC_OVER:
return wuffs_base__pixel_swizzler__bgra_premul__rgba_nonpremul__src_over;
}
return NULL;
case WUFFS_BASE__PIXEL_FORMAT__BGRA_BINARY:
case WUFFS_BASE__PIXEL_FORMAT__BGRX:
break;
case WUFFS_BASE__PIXEL_FORMAT__RGB:
break;
case WUFFS_BASE__PIXEL_FORMAT__RGBA_NONPREMUL:
switch (blend) {
case WUFFS_BASE__PIXEL_BLEND__SRC:
return wuffs_base__pixel_swizzler__copy_4_4;
case WUFFS_BASE__PIXEL_BLEND__SRC_OVER:
return wuffs_base__pixel_swizzler__bgra_nonpremul__bgra_nonpremul__src_over;
}
return NULL;
case WUFFS_BASE__PIXEL_FORMAT__RGBA_PREMUL:
switch (blend) {
case WUFFS_BASE__PIXEL_BLEND__SRC:
return wuffs_base__pixel_swizzler__bgra_premul__bgra_nonpremul__src;
case WUFFS_BASE__PIXEL_BLEND__SRC_OVER:
return wuffs_base__pixel_swizzler__bgra_premul__bgra_nonpremul__src_over;
}
return NULL;
case WUFFS_BASE__PIXEL_FORMAT__RGBA_BINARY:
case WUFFS_BASE__PIXEL_FORMAT__RGBX:
break;
}
return NULL;
}
static wuffs_base__pixel_swizzler__func
wuffs_base__pixel_swizzler__prepare__rgba_premul(
wuffs_base__pixel_swizzler* p,
wuffs_base__pixel_format dst_pixfmt,
wuffs_base__slice_u8 dst_palette,
wuffs_base__slice_u8 src_palette,
wuffs_base__pixel_blend blend) {
switch (dst_pixfmt.repr) {
case WUFFS_BASE__PIXEL_FORMAT__BGR_565:
switch (blend) {
case WUFFS_BASE__PIXEL_BLEND__SRC:
return wuffs_base__pixel_swizzler__bgr_565__rgba_premul__src;
case WUFFS_BASE__PIXEL_BLEND__SRC_OVER:
return wuffs_base__pixel_swizzler__bgr_565__rgba_premul__src_over;
}
return NULL;
case WUFFS_BASE__PIXEL_FORMAT__BGR:
switch (blend) {
case WUFFS_BASE__PIXEL_BLEND__SRC:
return wuffs_base__pixel_swizzler__bgr__rgba_premul__src;
case WUFFS_BASE__PIXEL_BLEND__SRC_OVER:
return wuffs_base__pixel_swizzler__bgr__rgba_premul__src_over;
}
return NULL;
case WUFFS_BASE__PIXEL_FORMAT__BGRA_NONPREMUL:
switch (blend) {
case WUFFS_BASE__PIXEL_BLEND__SRC:
return wuffs_base__pixel_swizzler__bgra_nonpremul__rgba_premul__src;
case WUFFS_BASE__PIXEL_BLEND__SRC_OVER:
return wuffs_base__pixel_swizzler__bgra_nonpremul__rgba_premul__src_over;
}
return NULL;
case WUFFS_BASE__PIXEL_FORMAT__BGRA_NONPREMUL_4X16LE:
switch (blend) {
case WUFFS_BASE__PIXEL_BLEND__SRC:
return wuffs_base__pixel_swizzler__bgra_nonpremul_4x16le__rgba_premul__src;
case WUFFS_BASE__PIXEL_BLEND__SRC_OVER:
return wuffs_base__pixel_swizzler__bgra_nonpremul_4x16le__rgba_premul__src_over;
}
return NULL;
case WUFFS_BASE__PIXEL_FORMAT__BGRA_PREMUL:
switch (blend) {
case WUFFS_BASE__PIXEL_BLEND__SRC:
#if defined(WUFFS_BASE__CPU_ARCH__X86_FAMILY)
if (wuffs_base__cpu_arch__have_x86_sse42()) {
return wuffs_base__pixel_swizzler__swap_rgbx_bgrx__sse42;
}
#endif
return wuffs_base__pixel_swizzler__swap_rgbx_bgrx;
case WUFFS_BASE__PIXEL_BLEND__SRC_OVER:
return wuffs_base__pixel_swizzler__bgra_premul__rgba_premul__src_over;
}
return NULL;
case WUFFS_BASE__PIXEL_FORMAT__RGBA_NONPREMUL:
switch (blend) {
case WUFFS_BASE__PIXEL_BLEND__SRC:
return wuffs_base__pixel_swizzler__bgra_nonpremul__bgra_premul__src;
case WUFFS_BASE__PIXEL_BLEND__SRC_OVER:
return wuffs_base__pixel_swizzler__bgra_nonpremul__bgra_premul__src_over;
}
return NULL;
case WUFFS_BASE__PIXEL_FORMAT__RGBA_PREMUL:
switch (blend) {
case WUFFS_BASE__PIXEL_BLEND__SRC:
return wuffs_base__pixel_swizzler__copy_4_4;
case WUFFS_BASE__PIXEL_BLEND__SRC_OVER:
return wuffs_base__pixel_swizzler__bgra_premul__bgra_premul__src_over;
}
return NULL;
}
return NULL;
}
WUFFS_BASE__MAYBE_STATIC wuffs_base__status
wuffs_base__pixel_swizzler__prepare(wuffs_base__pixel_swizzler* p,
wuffs_base__pixel_format dst_pixfmt,
wuffs_base__slice_u8 dst_palette,
wuffs_base__pixel_format src_pixfmt,
wuffs_base__slice_u8 src_palette,
wuffs_base__pixel_blend blend) {
if (!p) {
return wuffs_base__make_status(wuffs_base__error__bad_receiver);
}
p->private_impl.func = NULL;
p->private_impl.transparent_black_func = NULL;
p->private_impl.dst_pixfmt_bytes_per_pixel = 0;
p->private_impl.src_pixfmt_bytes_per_pixel = 0;
wuffs_base__pixel_swizzler__func func = NULL;
wuffs_base__pixel_swizzler__transparent_black_func transparent_black_func =
NULL;
uint32_t dst_pixfmt_bits_per_pixel =
wuffs_base__pixel_format__bits_per_pixel(&dst_pixfmt);
if ((dst_pixfmt_bits_per_pixel == 0) ||
((dst_pixfmt_bits_per_pixel & 7) != 0)) {
return wuffs_base__make_status(
wuffs_base__error__unsupported_pixel_swizzler_option);
}
uint32_t src_pixfmt_bits_per_pixel =
wuffs_base__pixel_format__bits_per_pixel(&src_pixfmt);
if ((src_pixfmt_bits_per_pixel == 0) ||
((src_pixfmt_bits_per_pixel & 7) != 0)) {
return wuffs_base__make_status(
wuffs_base__error__unsupported_pixel_swizzler_option);
}
switch (blend) {
case WUFFS_BASE__PIXEL_BLEND__SRC:
transparent_black_func =
wuffs_base__pixel_swizzler__transparent_black_src;
break;
case WUFFS_BASE__PIXEL_BLEND__SRC_OVER:
transparent_black_func =
wuffs_base__pixel_swizzler__transparent_black_src_over;
break;
}
switch (src_pixfmt.repr) {
case WUFFS_BASE__PIXEL_FORMAT__Y:
func = wuffs_base__pixel_swizzler__prepare__y(p, dst_pixfmt, dst_palette,
src_palette, blend);
break;
case WUFFS_BASE__PIXEL_FORMAT__Y_16BE:
func = wuffs_base__pixel_swizzler__prepare__y_16be(
p, dst_pixfmt, dst_palette, src_palette, blend);
break;
case WUFFS_BASE__PIXEL_FORMAT__INDEXED__BGRA_NONPREMUL:
func = wuffs_base__pixel_swizzler__prepare__indexed__bgra_nonpremul(
p, dst_pixfmt, dst_palette, src_palette, blend);
break;
case WUFFS_BASE__PIXEL_FORMAT__INDEXED__BGRA_BINARY:
func = wuffs_base__pixel_swizzler__prepare__indexed__bgra_binary(
p, dst_pixfmt, dst_palette, src_palette, blend);
break;
case WUFFS_BASE__PIXEL_FORMAT__BGR_565:
func = wuffs_base__pixel_swizzler__prepare__bgr_565(
p, dst_pixfmt, dst_palette, src_palette, blend);
break;
case WUFFS_BASE__PIXEL_FORMAT__BGR:
func = wuffs_base__pixel_swizzler__prepare__bgr(
p, dst_pixfmt, dst_palette, src_palette, blend);
break;
case WUFFS_BASE__PIXEL_FORMAT__BGRA_NONPREMUL:
func = wuffs_base__pixel_swizzler__prepare__bgra_nonpremul(
p, dst_pixfmt, dst_palette, src_palette, blend);
break;
case WUFFS_BASE__PIXEL_FORMAT__BGRA_NONPREMUL_4X16LE:
func = wuffs_base__pixel_swizzler__prepare__bgra_nonpremul_4x16le(
p, dst_pixfmt, dst_palette, src_palette, blend);
break;
case WUFFS_BASE__PIXEL_FORMAT__BGRA_PREMUL:
func = wuffs_base__pixel_swizzler__prepare__bgra_premul(
p, dst_pixfmt, dst_palette, src_palette, blend);
break;
case WUFFS_BASE__PIXEL_FORMAT__BGRX:
func = wuffs_base__pixel_swizzler__prepare__bgrx(
p, dst_pixfmt, dst_palette, src_palette, blend);
break;
case WUFFS_BASE__PIXEL_FORMAT__RGB:
func = wuffs_base__pixel_swizzler__prepare__rgb(
p, dst_pixfmt, dst_palette, src_palette, blend);
break;
case WUFFS_BASE__PIXEL_FORMAT__RGBA_NONPREMUL:
func = wuffs_base__pixel_swizzler__prepare__rgba_nonpremul(
p, dst_pixfmt, dst_palette, src_palette, blend);
break;
case WUFFS_BASE__PIXEL_FORMAT__RGBA_PREMUL:
func = wuffs_base__pixel_swizzler__prepare__rgba_premul(
p, dst_pixfmt, dst_palette, src_palette, blend);
break;
}
p->private_impl.func = func;
p->private_impl.transparent_black_func = transparent_black_func;
p->private_impl.dst_pixfmt_bytes_per_pixel = dst_pixfmt_bits_per_pixel / 8;
p->private_impl.src_pixfmt_bytes_per_pixel = src_pixfmt_bits_per_pixel / 8;
return wuffs_base__make_status(
func ? NULL : wuffs_base__error__unsupported_pixel_swizzler_option);
}
WUFFS_BASE__MAYBE_STATIC uint64_t
wuffs_base__pixel_swizzler__limited_swizzle_u32_interleaved_from_reader(
const wuffs_base__pixel_swizzler* p,
uint32_t up_to_num_pixels,
wuffs_base__slice_u8 dst,
wuffs_base__slice_u8 dst_palette,
const uint8_t** ptr_iop_r,
const uint8_t* io2_r) {
if (p && p->private_impl.func) {
const uint8_t* iop_r = *ptr_iop_r;
uint64_t src_len = wuffs_base__u64__min(
((uint64_t)up_to_num_pixels) *
((uint64_t)p->private_impl.src_pixfmt_bytes_per_pixel),
((uint64_t)(io2_r - iop_r)));
uint64_t n =
(*p->private_impl.func)(dst.ptr, dst.len, dst_palette.ptr,
dst_palette.len, iop_r, (size_t)src_len);
*ptr_iop_r += n * p->private_impl.src_pixfmt_bytes_per_pixel;
return n;
}
return 0;
}
WUFFS_BASE__MAYBE_STATIC uint64_t
wuffs_base__pixel_swizzler__swizzle_interleaved_from_reader(
const wuffs_base__pixel_swizzler* p,
wuffs_base__slice_u8 dst,
wuffs_base__slice_u8 dst_palette,
const uint8_t** ptr_iop_r,
const uint8_t* io2_r) {
if (p && p->private_impl.func) {
const uint8_t* iop_r = *ptr_iop_r;
uint64_t src_len = ((uint64_t)(io2_r - iop_r));
uint64_t n =
(*p->private_impl.func)(dst.ptr, dst.len, dst_palette.ptr,
dst_palette.len, iop_r, (size_t)src_len);
*ptr_iop_r += n * p->private_impl.src_pixfmt_bytes_per_pixel;
return n;
}
return 0;
}
WUFFS_BASE__MAYBE_STATIC uint64_t
wuffs_base__pixel_swizzler__swizzle_interleaved_from_slice(
const wuffs_base__pixel_swizzler* p,
wuffs_base__slice_u8 dst,
wuffs_base__slice_u8 dst_palette,
wuffs_base__slice_u8 src) {
if (p && p->private_impl.func) {
return (*p->private_impl.func)(dst.ptr, dst.len, dst_palette.ptr,
dst_palette.len, src.ptr, src.len);
}
return 0;
}
WUFFS_BASE__MAYBE_STATIC uint64_t
wuffs_base__pixel_swizzler__swizzle_interleaved_transparent_black(
const wuffs_base__pixel_swizzler* p,
wuffs_base__slice_u8 dst,
wuffs_base__slice_u8 dst_palette,
uint64_t num_pixels) {
if (p && p->private_impl.transparent_black_func) {
return (*p->private_impl.transparent_black_func)(
dst.ptr, dst.len, dst_palette.ptr, dst_palette.len, num_pixels,
p->private_impl.dst_pixfmt_bytes_per_pixel);
}
return 0;
}
#endif
#if !defined(WUFFS_CONFIG__MODULES) || defined(WUFFS_CONFIG__MODULE__BASE) || \
defined(WUFFS_CONFIG__MODULE__BASE__UTF8)
WUFFS_BASE__MAYBE_STATIC size_t
wuffs_base__utf_8__encode(wuffs_base__slice_u8 dst, uint32_t code_point) {
if (code_point <= 0x7F) {
if (dst.len >= 1) {
dst.ptr[0] = (uint8_t)(code_point);
return 1;
}
} else if (code_point <= 0x07FF) {
if (dst.len >= 2) {
dst.ptr[0] = (uint8_t)(0xC0 | ((code_point >> 6)));
dst.ptr[1] = (uint8_t)(0x80 | ((code_point >> 0) & 0x3F));
return 2;
}
} else if (code_point <= 0xFFFF) {
if ((dst.len >= 3) && ((code_point < 0xD800) || (0xDFFF < code_point))) {
dst.ptr[0] = (uint8_t)(0xE0 | ((code_point >> 12)));
dst.ptr[1] = (uint8_t)(0x80 | ((code_point >> 6) & 0x3F));
dst.ptr[2] = (uint8_t)(0x80 | ((code_point >> 0) & 0x3F));
return 3;
}
} else if (code_point <= 0x10FFFF) {
if (dst.len >= 4) {
dst.ptr[0] = (uint8_t)(0xF0 | ((code_point >> 18)));
dst.ptr[1] = (uint8_t)(0x80 | ((code_point >> 12) & 0x3F));
dst.ptr[2] = (uint8_t)(0x80 | ((code_point >> 6) & 0x3F));
dst.ptr[3] = (uint8_t)(0x80 | ((code_point >> 0) & 0x3F));
return 4;
}
}
return 0;
}
static const uint8_t wuffs_base__utf_8__byte_length_minus_1[256] = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,
0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,
0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,
0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,
0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,
0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,
0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,
0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,
0x80, 0x80, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
0x03, 0x03, 0x03, 0x03, 0x03, 0x80, 0x80, 0x80,
0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
};
WUFFS_BASE__MAYBE_STATIC wuffs_base__utf_8__next__output
wuffs_base__utf_8__next(const uint8_t* s_ptr, size_t s_len) {
if (s_len == 0) {
return wuffs_base__make_utf_8__next__output(0, 0);
}
uint32_t c = s_ptr[0];
switch (wuffs_base__utf_8__byte_length_minus_1[c & 0xFF]) {
case 0:
return wuffs_base__make_utf_8__next__output(c, 1);
case 1:
if (s_len < 2) {
break;
}
c = wuffs_base__peek_u16le__no_bounds_check(s_ptr);
if ((c & 0xC000) != 0x8000) {
break;
}
c = (0x0007C0 & (c << 6)) | (0x00003F & (c >> 8));
return wuffs_base__make_utf_8__next__output(c, 2);
case 2:
if (s_len < 3) {
break;
}
c = wuffs_base__peek_u24le__no_bounds_check(s_ptr);
if ((c & 0xC0C000) != 0x808000) {
break;
}
c = (0x00F000 & (c << 12)) | (0x000FC0 & (c >> 2)) |
(0x00003F & (c >> 16));
if ((c <= 0x07FF) || ((0xD800 <= c) && (c <= 0xDFFF))) {
break;
}
return wuffs_base__make_utf_8__next__output(c, 3);
case 3:
if (s_len < 4) {
break;
}
c = wuffs_base__peek_u32le__no_bounds_check(s_ptr);
if ((c & 0xC0C0C000) != 0x80808000) {
break;
}
c = (0x1C0000 & (c << 18)) | (0x03F000 & (c << 4)) |
(0x000FC0 & (c >> 10)) | (0x00003F & (c >> 24));
if ((c <= 0xFFFF) || (0x110000 <= c)) {
break;
}
return wuffs_base__make_utf_8__next__output(c, 4);
}
return wuffs_base__make_utf_8__next__output(
WUFFS_BASE__UNICODE_REPLACEMENT_CHARACTER, 1);
}
WUFFS_BASE__MAYBE_STATIC wuffs_base__utf_8__next__output
wuffs_base__utf_8__next_from_end(const uint8_t* s_ptr, size_t s_len) {
if (s_len == 0) {
return wuffs_base__make_utf_8__next__output(0, 0);
}
const uint8_t* ptr = &s_ptr[s_len - 1];
if (*ptr < 0x80) {
return wuffs_base__make_utf_8__next__output(*ptr, 1);
} else if (*ptr < 0xC0) {
const uint8_t* too_far = &s_ptr[(s_len > 4) ? (s_len - 4) : 0];
uint32_t n = 1;
while (ptr != too_far) {
ptr--;
n++;
if (*ptr < 0x80) {
break;
} else if (*ptr < 0xC0) {
continue;
}
wuffs_base__utf_8__next__output o = wuffs_base__utf_8__next(ptr, n);
if (o.byte_length != n) {
break;
}
return o;
}
}
return wuffs_base__make_utf_8__next__output(
WUFFS_BASE__UNICODE_REPLACEMENT_CHARACTER, 1);
}
WUFFS_BASE__MAYBE_STATIC size_t
wuffs_base__utf_8__longest_valid_prefix(const uint8_t* s_ptr, size_t s_len) {
size_t original_len = s_len;
while (s_len > 0) {
wuffs_base__utf_8__next__output o = wuffs_base__utf_8__next(s_ptr, s_len);
if ((o.code_point > 0x7F) && (o.byte_length == 1)) {
break;
}
s_ptr += o.byte_length;
s_len -= o.byte_length;
}
return original_len - s_len;
}
WUFFS_BASE__MAYBE_STATIC size_t
wuffs_base__ascii__longest_valid_prefix(const uint8_t* s_ptr, size_t s_len) {
const uint8_t* original_ptr = s_ptr;
const uint8_t* p = s_ptr;
const uint8_t* q = s_ptr + s_len;
for (; (p != q) && ((*p & 0x80) == 0); p++) {
}
return (size_t)(p - original_ptr);
}
#endif
#ifdef __cplusplus
}
#endif
#if !defined(WUFFS_CONFIG__MODULES) || defined(WUFFS_CONFIG__MODULE__ADLER32)
static wuffs_base__empty_struct
wuffs_adler32__hasher__up(
wuffs_adler32__hasher* self,
wuffs_base__slice_u8 a_x);
static wuffs_base__empty_struct
wuffs_adler32__hasher__up__choosy_default(
wuffs_adler32__hasher* self,
wuffs_base__slice_u8 a_x);
#if defined(WUFFS_BASE__CPU_ARCH__ARM_NEON)
static wuffs_base__empty_struct
wuffs_adler32__hasher__up_arm_neon(
wuffs_adler32__hasher* self,
wuffs_base__slice_u8 a_x);
#endif
#if defined(WUFFS_BASE__CPU_ARCH__X86_FAMILY)
static wuffs_base__empty_struct
wuffs_adler32__hasher__up_x86_sse42(
wuffs_adler32__hasher* self,
wuffs_base__slice_u8 a_x);
#endif
const wuffs_base__hasher_u32__func_ptrs
wuffs_adler32__hasher__func_ptrs_for__wuffs_base__hasher_u32 = {
(wuffs_base__empty_struct(*)(void*,
uint32_t,
bool))(&wuffs_adler32__hasher__set_quirk_enabled),
(uint32_t(*)(void*,
wuffs_base__slice_u8))(&wuffs_adler32__hasher__update_u32),
};
wuffs_base__status WUFFS_BASE__WARN_UNUSED_RESULT
wuffs_adler32__hasher__initialize(
wuffs_adler32__hasher* self,
size_t sizeof_star_self,
uint64_t wuffs_version,
uint32_t options){
if (!self) {
return wuffs_base__make_status(wuffs_base__error__bad_receiver);
}
if (sizeof(*self) != sizeof_star_self) {
return wuffs_base__make_status(wuffs_base__error__bad_sizeof_receiver);
}
if (((wuffs_version >> 32) != WUFFS_VERSION_MAJOR) ||
(((wuffs_version >> 16) & 0xFFFF) > WUFFS_VERSION_MINOR)) {
return wuffs_base__make_status(wuffs_base__error__bad_wuffs_version);
}
if ((options & WUFFS_INITIALIZE__ALREADY_ZEROED) != 0) {
#if !defined(__clang__) && defined(__GNUC__)
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wmaybe-uninitialized"
#endif
if (self->private_impl.magic != 0) {
return wuffs_base__make_status(wuffs_base__error__initialize_falsely_claimed_already_zeroed);
}
#if !defined(__clang__) && defined(__GNUC__)
#pragma GCC diagnostic pop
#endif
} else {
if ((options & WUFFS_INITIALIZE__LEAVE_INTERNAL_BUFFERS_UNINITIALIZED) == 0) {
memset(self, 0, sizeof(*self));
options |= WUFFS_INITIALIZE__ALREADY_ZEROED;
} else {
memset(&(self->private_impl), 0, sizeof(self->private_impl));
}
}
self->private_impl.choosy_up = &wuffs_adler32__hasher__up__choosy_default;
self->private_impl.magic = WUFFS_BASE__MAGIC;
self->private_impl.vtable_for__wuffs_base__hasher_u32.vtable_name =
wuffs_base__hasher_u32__vtable_name;
self->private_impl.vtable_for__wuffs_base__hasher_u32.function_pointers =
(const void*)(&wuffs_adler32__hasher__func_ptrs_for__wuffs_base__hasher_u32);
return wuffs_base__make_status(NULL);
}
wuffs_adler32__hasher*
wuffs_adler32__hasher__alloc() {
wuffs_adler32__hasher* x =
(wuffs_adler32__hasher*)(calloc(sizeof(wuffs_adler32__hasher), 1));
if (!x) {
return NULL;
}
if (wuffs_adler32__hasher__initialize(
x, sizeof(wuffs_adler32__hasher), WUFFS_VERSION, WUFFS_INITIALIZE__ALREADY_ZEROED).repr) {
free(x);
return NULL;
}
return x;
}
size_t
sizeof__wuffs_adler32__hasher() {
return sizeof(wuffs_adler32__hasher);
}
WUFFS_BASE__MAYBE_STATIC wuffs_base__empty_struct
wuffs_adler32__hasher__set_quirk_enabled(
wuffs_adler32__hasher* self,
uint32_t a_quirk,
bool a_enabled) {
return wuffs_base__make_empty_struct();
}
WUFFS_BASE__MAYBE_STATIC uint32_t
wuffs_adler32__hasher__update_u32(
wuffs_adler32__hasher* self,
wuffs_base__slice_u8 a_x) {
if (!self) {
return 0;
}
if (self->private_impl.magic != WUFFS_BASE__MAGIC) {
return 0;
}
if ( ! self->private_impl.f_started) {
self->private_impl.f_started = true;
self->private_impl.f_state = 1;
self->private_impl.choosy_up = (
#if defined(WUFFS_BASE__CPU_ARCH__ARM_NEON)
wuffs_base__cpu_arch__have_arm_neon() ? &wuffs_adler32__hasher__up_arm_neon :
#endif
#if defined(WUFFS_BASE__CPU_ARCH__X86_FAMILY)
wuffs_base__cpu_arch__have_x86_sse42() ? &wuffs_adler32__hasher__up_x86_sse42 :
#endif
self->private_impl.choosy_up);
}
wuffs_adler32__hasher__up(self, a_x);
return self->private_impl.f_state;
}
static wuffs_base__empty_struct
wuffs_adler32__hasher__up(
wuffs_adler32__hasher* self,
wuffs_base__slice_u8 a_x) {
return (*self->private_impl.choosy_up)(self, a_x);
}
static wuffs_base__empty_struct
wuffs_adler32__hasher__up__choosy_default(
wuffs_adler32__hasher* self,
wuffs_base__slice_u8 a_x) {
uint32_t v_s1 = 0;
uint32_t v_s2 = 0;
wuffs_base__slice_u8 v_remaining = {0};
wuffs_base__slice_u8 v_p = {0};
v_s1 = ((self->private_impl.f_state) & 0xFFFF);
v_s2 = ((self->private_impl.f_state) >> (32 - (16)));
while (((uint64_t)(a_x.len)) > 0) {
v_remaining = wuffs_base__slice_u8__subslice_j(a_x, 0);
if (((uint64_t)(a_x.len)) > 5552) {
v_remaining = wuffs_base__slice_u8__subslice_i(a_x, 5552);
a_x = wuffs_base__slice_u8__subslice_j(a_x, 5552);
}
{
wuffs_base__slice_u8 i_slice_p = a_x;
v_p.ptr = i_slice_p.ptr;
v_p.len = 1;
uint8_t* i_end0_p = v_p.ptr + (((i_slice_p.len - (size_t)(v_p.ptr - i_slice_p.ptr)) / 8) * 8);
while (v_p.ptr < i_end0_p) {
v_s1 += ((uint32_t)(v_p.ptr[0]));
v_s2 += v_s1;
v_p.ptr += 1;
v_s1 += ((uint32_t)(v_p.ptr[0]));
v_s2 += v_s1;
v_p.ptr += 1;
v_s1 += ((uint32_t)(v_p.ptr[0]));
v_s2 += v_s1;
v_p.ptr += 1;
v_s1 += ((uint32_t)(v_p.ptr[0]));
v_s2 += v_s1;
v_p.ptr += 1;
v_s1 += ((uint32_t)(v_p.ptr[0]));
v_s2 += v_s1;
v_p.ptr += 1;
v_s1 += ((uint32_t)(v_p.ptr[0]));
v_s2 += v_s1;
v_p.ptr += 1;
v_s1 += ((uint32_t)(v_p.ptr[0]));
v_s2 += v_s1;
v_p.ptr += 1;
v_s1 += ((uint32_t)(v_p.ptr[0]));
v_s2 += v_s1;
v_p.ptr += 1;
}
v_p.len = 1;
uint8_t* i_end1_p = i_slice_p.ptr + i_slice_p.len;
while (v_p.ptr < i_end1_p) {
v_s1 += ((uint32_t)(v_p.ptr[0]));
v_s2 += v_s1;
v_p.ptr += 1;
}
v_p.len = 0;
}
v_s1 %= 65521;
v_s2 %= 65521;
a_x = v_remaining;
}
self->private_impl.f_state = (((v_s2 & 65535) << 16) | (v_s1 & 65535));
return wuffs_base__make_empty_struct();
}
#if defined(WUFFS_BASE__CPU_ARCH__ARM_NEON)
static wuffs_base__empty_struct
wuffs_adler32__hasher__up_arm_neon(
wuffs_adler32__hasher* self,
wuffs_base__slice_u8 a_x) {
uint32_t v_s1 = 0;
uint32_t v_s2 = 0;
wuffs_base__slice_u8 v_remaining = {0};
wuffs_base__slice_u8 v_p = {0};
uint8x16_t v_p__left = {0};
uint8x16_t v_p_right = {0};
uint32x4_t v_v1 = {0};
uint32x4_t v_v2 = {0};
uint16x8_t v_col0 = {0};
uint16x8_t v_col1 = {0};
uint16x8_t v_col2 = {0};
uint16x8_t v_col3 = {0};
uint32x2_t v_sum1 = {0};
uint32x2_t v_sum2 = {0};
uint32x2_t v_sum12 = {0};
uint32_t v_num_iterate_bytes = 0;
uint64_t v_tail_index = 0;
v_s1 = ((self->private_impl.f_state) & 0xFFFF);
v_s2 = ((self->private_impl.f_state) >> (32 - (16)));
while ((((uint64_t)(a_x.len)) > 0) && ((15 & ((uint32_t)(0xFFF & (uintptr_t)(a_x.ptr)))) != 0)) {
v_s1 += ((uint32_t)(a_x.ptr[0]));
v_s2 += v_s1;
a_x = wuffs_base__slice_u8__subslice_i(a_x, 1);
}
v_s1 %= 65521;
v_s2 %= 65521;
while (((uint64_t)(a_x.len)) > 0) {
v_remaining = wuffs_base__slice_u8__subslice_j(a_x, 0);
if (((uint64_t)(a_x.len)) > 5536) {
v_remaining = wuffs_base__slice_u8__subslice_i(a_x, 5536);
a_x = wuffs_base__slice_u8__subslice_j(a_x, 5536);
}
v_num_iterate_bytes = ((uint32_t)((((uint64_t)(a_x.len)) & 4294967264)));
v_s2 += ((uint32_t)(v_s1 * v_num_iterate_bytes));
v_v1 = vdupq_n_u32(0);
v_v2 = vdupq_n_u32(0);
v_col0 = vdupq_n_u16(0);
v_col1 = vdupq_n_u16(0);
v_col2 = vdupq_n_u16(0);
v_col3 = vdupq_n_u16(0);
{
wuffs_base__slice_u8 i_slice_p = a_x;
v_p.ptr = i_slice_p.ptr;
v_p.len = 32;
uint8_t* i_end0_p = v_p.ptr + (((i_slice_p.len - (size_t)(v_p.ptr - i_slice_p.ptr)) / 32) * 32);
while (v_p.ptr < i_end0_p) {
v_p__left = vld1q_u8(v_p.ptr);
v_p_right = vld1q_u8(v_p.ptr + 16);
v_v2 = vaddq_u32(v_v2, v_v1);
v_v1 = vpadalq_u16(v_v1, vpadalq_u8(vpaddlq_u8(v_p__left), v_p_right));
v_col0 = vaddw_u8(v_col0, vget_low_u8(v_p__left));
v_col1 = vaddw_u8(v_col1, vget_high_u8(v_p__left));
v_col2 = vaddw_u8(v_col2, vget_low_u8(v_p_right));
v_col3 = vaddw_u8(v_col3, vget_high_u8(v_p_right));
v_p.ptr += 32;
}
v_p.len = 0;
}
v_v2 = vshlq_n_u32(v_v2, 5);
v_v2 = vmlal_u16(v_v2, vget_low_u16(v_col0), ((uint16x4_t){32, 31, 30, 29}));
v_v2 = vmlal_u16(v_v2, vget_high_u16(v_col0), ((uint16x4_t){28, 27, 26, 25}));
v_v2 = vmlal_u16(v_v2, vget_low_u16(v_col1), ((uint16x4_t){24, 23, 22, 21}));
v_v2 = vmlal_u16(v_v2, vget_high_u16(v_col1), ((uint16x4_t){20, 19, 18, 17}));
v_v2 = vmlal_u16(v_v2, vget_low_u16(v_col2), ((uint16x4_t){16, 15, 14, 13}));
v_v2 = vmlal_u16(v_v2, vget_high_u16(v_col2), ((uint16x4_t){12, 11, 10, 9}));
v_v2 = vmlal_u16(v_v2, vget_low_u16(v_col3), ((uint16x4_t){8, 7, 6, 5}));
v_v2 = vmlal_u16(v_v2, vget_high_u16(v_col3), ((uint16x4_t){4, 3, 2, 1}));
v_sum1 = vpadd_u32(vget_low_u32(v_v1), vget_high_u32(v_v1));
v_sum2 = vpadd_u32(vget_low_u32(v_v2), vget_high_u32(v_v2));
v_sum12 = vpadd_u32(v_sum1, v_sum2);
v_s1 += vget_lane_u32(v_sum12, 0);
v_s2 += vget_lane_u32(v_sum12, 1);
v_tail_index = (((uint64_t)(a_x.len)) & 18446744073709551584u);
if (v_tail_index < ((uint64_t)(a_x.len))) {
{
wuffs_base__slice_u8 i_slice_p = wuffs_base__slice_u8__subslice_i(a_x, v_tail_index);
v_p.ptr = i_slice_p.ptr;
v_p.len = 1;
uint8_t* i_end0_p = i_slice_p.ptr + i_slice_p.len;
while (v_p.ptr < i_end0_p) {
v_s1 += ((uint32_t)(v_p.ptr[0]));
v_s2 += v_s1;
v_p.ptr += 1;
}
v_p.len = 0;
}
}
v_s1 %= 65521;
v_s2 %= 65521;
a_x = v_remaining;
}
self->private_impl.f_state = (((v_s2 & 65535) << 16) | (v_s1 & 65535));
return wuffs_base__make_empty_struct();
}
#endif
#if defined(WUFFS_BASE__CPU_ARCH__X86_FAMILY)
WUFFS_BASE__MAYBE_ATTRIBUTE_TARGET("pclmul,popcnt,sse4.2")
static wuffs_base__empty_struct
wuffs_adler32__hasher__up_x86_sse42(
wuffs_adler32__hasher* self,
wuffs_base__slice_u8 a_x) {
uint32_t v_s1 = 0;
uint32_t v_s2 = 0;
wuffs_base__slice_u8 v_remaining = {0};
wuffs_base__slice_u8 v_p = {0};
__m128i v_zeroes = {0};
__m128i v_ones = {0};
__m128i v_weights__left = {0};
__m128i v_weights_right = {0};
__m128i v_q__left = {0};
__m128i v_q_right = {0};
__m128i v_v1 = {0};
__m128i v_v2 = {0};
__m128i v_v2j = {0};
__m128i v_v2k = {0};
uint32_t v_num_iterate_bytes = 0;
uint64_t v_tail_index = 0;
v_zeroes = _mm_set1_epi16((int16_t)(0));
v_ones = _mm_set1_epi16((int16_t)(1));
v_weights__left = _mm_set_epi8((int8_t)(17), (int8_t)(18), (int8_t)(19), (int8_t)(20), (int8_t)(21), (int8_t)(22), (int8_t)(23), (int8_t)(24), (int8_t)(25), (int8_t)(26), (int8_t)(27), (int8_t)(28), (int8_t)(29), (int8_t)(30), (int8_t)(31), (int8_t)(32));
v_weights_right = _mm_set_epi8((int8_t)(1), (int8_t)(2), (int8_t)(3), (int8_t)(4), (int8_t)(5), (int8_t)(6), (int8_t)(7), (int8_t)(8), (int8_t)(9), (int8_t)(10), (int8_t)(11), (int8_t)(12), (int8_t)(13), (int8_t)(14), (int8_t)(15), (int8_t)(16));
v_s1 = ((self->private_impl.f_state) & 0xFFFF);
v_s2 = ((self->private_impl.f_state) >> (32 - (16)));
while (((uint64_t)(a_x.len)) > 0) {
v_remaining = wuffs_base__slice_u8__subslice_j(a_x, 0);
if (((uint64_t)(a_x.len)) > 5536) {
v_remaining = wuffs_base__slice_u8__subslice_i(a_x, 5536);
a_x = wuffs_base__slice_u8__subslice_j(a_x, 5536);
}
v_num_iterate_bytes = ((uint32_t)((((uint64_t)(a_x.len)) & 4294967264)));
v_s2 += ((uint32_t)(v_s1 * v_num_iterate_bytes));
v_v1 = _mm_setzero_si128();
v_v2j = _mm_setzero_si128();
v_v2k = _mm_setzero_si128();
{
wuffs_base__slice_u8 i_slice_p = a_x;
v_p.ptr = i_slice_p.ptr;
v_p.len = 32;
uint8_t* i_end0_p = v_p.ptr + (((i_slice_p.len - (size_t)(v_p.ptr - i_slice_p.ptr)) / 32) * 32);
while (v_p.ptr < i_end0_p) {
v_q__left = _mm_lddqu_si128((const __m128i*)(const void*)(v_p.ptr));
v_q_right = _mm_lddqu_si128((const __m128i*)(const void*)(v_p.ptr + 16));
v_v2j = _mm_add_epi32(v_v2j, v_v1);
v_v1 = _mm_add_epi32(v_v1, _mm_sad_epu8(v_q__left, v_zeroes));
v_v1 = _mm_add_epi32(v_v1, _mm_sad_epu8(v_q_right, v_zeroes));
v_v2k = _mm_add_epi32(v_v2k, _mm_madd_epi16(v_ones, _mm_maddubs_epi16(v_q__left, v_weights__left)));
v_v2k = _mm_add_epi32(v_v2k, _mm_madd_epi16(v_ones, _mm_maddubs_epi16(v_q_right, v_weights_right)));
v_p.ptr += 32;
}
v_p.len = 0;
}
v_v1 = _mm_add_epi32(v_v1, _mm_shuffle_epi32(v_v1, (int32_t)(177)));
v_v1 = _mm_add_epi32(v_v1, _mm_shuffle_epi32(v_v1, (int32_t)(78)));
v_s1 += ((uint32_t)(_mm_cvtsi128_si32(v_v1)));
v_v2 = _mm_add_epi32(v_v2k, _mm_slli_epi32(v_v2j, (int32_t)(5)));
v_v2 = _mm_add_epi32(v_v2, _mm_shuffle_epi32(v_v2, (int32_t)(177)));
v_v2 = _mm_add_epi32(v_v2, _mm_shuffle_epi32(v_v2, (int32_t)(78)));
v_s2 += ((uint32_t)(_mm_cvtsi128_si32(v_v2)));
v_tail_index = (((uint64_t)(a_x.len)) & 18446744073709551584u);
if (v_tail_index < ((uint64_t)(a_x.len))) {
{
wuffs_base__slice_u8 i_slice_p = wuffs_base__slice_u8__subslice_i(a_x#endif #endif #if !defined(WUFFS_CONFIG__MODULES) || defined(WUFFS_CONFIG__MODULE__BMP)#define WUFFS_BMP__COMPRESSION_NONE …#define WUFFS_BMP__COMPRESSION_RLE8 …#define WUFFS_BMP__COMPRESSION_RLE4 …#define WUFFS_BMP__COMPRESSION_BITFIELDS …#define WUFFS_BMP__COMPRESSION_JPEG …#define WUFFS_BMP__COMPRESSION_PNG …#define WUFFS_BMP__COMPRESSION_ALPHABITFIELDS …#define WUFFS_BMP__COMPRESSION_LOW_BIT_DEPTH …#define WUFFS_BMP__RLE_STATE_NEUTRAL …#define WUFFS_BMP__RLE_STATE_RUN …#define WUFFS_BMP__RLE_STATE_ESCAPE …#define WUFFS_BMP__RLE_STATE_LITERAL …#define WUFFS_BMP__RLE_STATE_DELTA_X …#define WUFFS_BMP__RLE_STATE_DELTA_Y …#if !defined(__clang__) && defined(__GNUC__)#pragma GCC diagnostic push#pragma GCC diagnostic ignored "-Wmaybe-uninitialized"#endif#if !defined(__clang__) && defined(__GNUC__)#pragma GCC diagnostic pop#endif#if defined(__GNUC__)#pragma GCC diagnostic push#pragma GCC diagnostic ignored "-Wconversion"#endif#if defined(__GNUC__)#pragma GCC diagnostic pop#endif#if defined(__GNUC__)#pragma GCC diagnostic push#pragma GCC diagnostic ignored "-Wconversion"#endif#if defined(__GNUC__)#pragma GCC diagnostic pop#endif#endif #if !defined(WUFFS_CONFIG__MODULES) || defined(WUFFS_CONFIG__MODULE__BZIP2)#if !defined(__clang__) && defined(__GNUC__)#pragma GCC diagnostic push#pragma GCC diagnostic ignored "-Wmaybe-uninitialized"#endif#if !defined(__clang__) && defined(__GNUC__)#pragma GCC diagnostic pop#endif#if defined(__GNUC__)#pragma GCC diagnostic push#pragma GCC diagnostic ignored "-Wconversion"#endif#if defined(__GNUC__)#pragma GCC diagnostic pop#endif#endif #if !defined(WUFFS_CONFIG__MODULES) || defined(WUFFS_CONFIG__MODULE__CBOR)#if !defined(__clang__) && defined(__GNUC__)#pragma GCC diagnostic push#pragma GCC diagnostic ignored "-Wmaybe-uninitialized"#endif#if !defined(__clang__) && defined(__GNUC__)#pragma GCC diagnostic pop#endif#endif #if !defined(WUFFS_CONFIG__MODULES) || defined(WUFFS_CONFIG__MODULE__CRC32)#if defined(WUFFS_BASE__CPU_ARCH__ARM_CRC32)#endif #if defined(WUFFS_BASE__CPU_ARCH__X86_FAMILY)#endif #if defined(WUFFS_BASE__CPU_ARCH__X86_FAMILY)#endif #if !defined(__clang__) && defined(__GNUC__)#pragma GCC diagnostic push#pragma GCC diagnostic ignored "-Wmaybe-uninitialized"#endif#if !defined(__clang__) && defined(__GNUC__)#pragma GCC diagnostic pop#endif#if defined(WUFFS_BASE__CPU_ARCH__ARM_CRC32)#endif#if defined(WUFFS_BASE__CPU_ARCH__X86_FAMILY)#endif#if defined(WUFFS_BASE__CPU_ARCH__X86_FAMILY)#endif#if defined(WUFFS_BASE__CPU_ARCH__ARM_CRC32)#endif #if defined(WUFFS_BASE__CPU_ARCH__X86_FAMILY)#endif #if defined(WUFFS_BASE__CPU_ARCH__X86_FAMILY)#endif #endif #if !defined(WUFFS_CONFIG__MODULES) || defined(WUFFS_CONFIG__MODULE__DEFLATE)#define WUFFS_DEFLATE__HUFFS_TABLE_SIZE …#define WUFFS_DEFLATE__HUFFS_TABLE_MASK …#if defined(WUFFS_BASE__CPU_ARCH__X86_FAMILY)#endif #if !defined(__clang__) && defined(__GNUC__)#pragma GCC diagnostic push#pragma GCC diagnostic ignored "-Wmaybe-uninitialized"#endif#if !defined(__clang__) && defined(__GNUC__)#pragma GCC diagnostic pop#endif#if defined(WUFFS_BASE__CPU_ARCH__X86_FAMILY)#endif#if defined(__GNUC__)#pragma GCC diagnostic push#pragma GCC diagnostic ignored "-Wconversion"#endif#if defined(__GNUC__)#pragma GCC diagnostic pop#endif#if defined(__GNUC__)#pragma GCC diagnostic push#pragma GCC diagnostic ignored "-Wconversion"#endif#if defined(__GNUC__)#pragma GCC diagnostic pop#endif#if defined(__GNUC__)#pragma GCC diagnostic push#pragma GCC diagnostic ignored "-Wconversion"#endif#if defined(__GNUC__)#pragma GCC diagnostic pop#endif#if defined(WUFFS_BASE__CPU_ARCH__X86_FAMILY)#endif #endif #if !defined(WUFFS_CONFIG__MODULES) || defined(WUFFS_CONFIG__MODULE__LZW)#if !defined(__clang__) && defined(__GNUC__)#pragma GCC diagnostic push#pragma GCC diagnostic ignored "-Wmaybe-uninitialized"#endif#if !defined(__clang__) && defined(__GNUC__)#pragma GCC diagnostic pop#endif#endif #if !defined(WUFFS_CONFIG__MODULES) || defined(WUFFS_CONFIG__MODULE__GIF)#define WUFFS_GIF__QUIRKS_BASE …#define WUFFS_GIF__QUIRKS_COUNT …#if !defined(__clang__) && defined(__GNUC__)#pragma GCC diagnostic push#pragma GCC diagnostic ignored "-Wmaybe-uninitialized"#endif#if !defined(__clang__) && defined(__GNUC__)#pragma GCC diagnostic pop#endif#if defined(__GNUC__)#pragma GCC diagnostic push#pragma GCC diagnostic ignored "-Wconversion"#endif#if defined(__GNUC__)#pragma GCC diagnostic pop#endif#if defined(__GNUC__)#pragma GCC diagnostic push#pragma GCC diagnostic ignored "-Wconversion"#endif#if defined(__GNUC__)#pragma GCC diagnostic pop#endif#if defined(__GNUC__)#pragma GCC diagnostic push#pragma GCC diagnostic ignored "-Wconversion"#endif#if defined(__GNUC__)#pragma GCC diagnostic pop#endif#endif #if !defined(WUFFS_CONFIG__MODULES) || defined(WUFFS_CONFIG__MODULE__GZIP)#if !defined(__clang__) && defined(__GNUC__)#pragma GCC diagnostic push#pragma GCC diagnostic ignored "-Wmaybe-uninitialized"#endif#if !defined(__clang__) && defined(__GNUC__)#pragma GCC diagnostic pop#endif#endif #if !defined(WUFFS_CONFIG__MODULES) || defined(WUFFS_CONFIG__MODULE__JSON)#define WUFFS_JSON__DECODER_NUMBER_LENGTH_MAX_INCL …#define WUFFS_JSON__CLASS_WHITESPACE …#define WUFFS_JSON__CLASS_STRING …#define WUFFS_JSON__CLASS_COMMA …#define WUFFS_JSON__CLASS_COLON …#define WUFFS_JSON__CLASS_NUMBER …#define WUFFS_JSON__CLASS_OPEN_CURLY_BRACE …#define WUFFS_JSON__CLASS_CLOSE_CURLY_BRACE …#define WUFFS_JSON__CLASS_OPEN_SQUARE_BRACKET …#define WUFFS_JSON__CLASS_CLOSE_SQUARE_BRACKET …#define WUFFS_JSON__CLASS_FALSE …#define WUFFS_JSON__CLASS_TRUE …#define WUFFS_JSON__CLASS_NULL_NAN_INF …#define WUFFS_JSON__CLASS_COMMENT …#define WUFFS_JSON__EXPECT_VALUE …#define WUFFS_JSON__EXPECT_NON_STRING_VALUE …#define WUFFS_JSON__EXPECT_STRING …#define WUFFS_JSON__EXPECT_COMMA …#define WUFFS_JSON__EXPECT_COLON …#define WUFFS_JSON__EXPECT_NUMBER …#define WUFFS_JSON__EXPECT_CLOSE_CURLY_BRACE …#define WUFFS_JSON__EXPECT_CLOSE_SQUARE_BRACKET …#define WUFFS_JSON__QUIRKS_BASE …#define WUFFS_JSON__QUIRKS_COUNT …#if !defined(__clang__) && defined(__GNUC__)#pragma GCC diagnostic push#pragma GCC diagnostic ignored "-Wmaybe-uninitialized"#endif#if !defined(__clang__) && defined(__GNUC__)#pragma GCC diagnostic pop#endif#endif #if !defined(WUFFS_CONFIG__MODULES) || defined(WUFFS_CONFIG__MODULE__NIE)#if !defined(__clang__) && defined(__GNUC__)#pragma GCC diagnostic push#pragma GCC diagnostic ignored "-Wmaybe-uninitialized"#endif#if !defined(__clang__) && defined(__GNUC__)#pragma GCC diagnostic pop#endif#endif #if !defined(WUFFS_CONFIG__MODULES) || defined(WUFFS_CONFIG__MODULE__ZLIB)#define WUFFS_ZLIB__QUIRKS_BASE …#define WUFFS_ZLIB__QUIRKS_COUNT …#if !defined(__clang__) && defined(__GNUC__)#pragma GCC diagnostic push#pragma GCC diagnostic ignored "-Wmaybe-uninitialized"#endif#if !defined(__clang__) && defined(__GNUC__)#pragma GCC diagnostic pop#endif#endif #if !defined(WUFFS_CONFIG__MODULES) || defined(WUFFS_CONFIG__MODULE__PNG)#define WUFFS_PNG__ANCILLARY_BIT …#if defined(WUFFS_BASE__CPU_ARCH__ARM_NEON)#endif #if defined(WUFFS_BASE__CPU_ARCH__ARM_NEON)#endif #if defined(WUFFS_BASE__CPU_ARCH__ARM_NEON)#endif #if defined(WUFFS_BASE__CPU_ARCH__ARM_NEON)#endif #if defined(WUFFS_BASE__CPU_ARCH__X86_FAMILY)#endif #if defined(WUFFS_BASE__CPU_ARCH__X86_FAMILY)#endif #if defined(WUFFS_BASE__CPU_ARCH__X86_FAMILY)#endif #if defined(WUFFS_BASE__CPU_ARCH__X86_FAMILY)#endif #if !defined(__clang__) && defined(__GNUC__)#pragma GCC diagnostic push#pragma GCC diagnostic ignored "-Wmaybe-uninitialized"#endif#if !defined(__clang__) && defined(__GNUC__)#pragma GCC diagnostic pop#endif#if defined(WUFFS_BASE__CPU_ARCH__ARM_NEON)#endif #if defined(WUFFS_BASE__CPU_ARCH__ARM_NEON)#endif #if defined(WUFFS_BASE__CPU_ARCH__ARM_NEON)#endif #if defined(WUFFS_BASE__CPU_ARCH__ARM_NEON)#endif #if defined(WUFFS_BASE__CPU_ARCH__X86_FAMILY)#endif #if defined(WUFFS_BASE__CPU_ARCH__X86_FAMILY)#endif #if defined(WUFFS_BASE__CPU_ARCH__X86_FAMILY)#endif #if defined(WUFFS_BASE__CPU_ARCH__X86_FAMILY)#endif #if defined(WUFFS_BASE__CPU_ARCH__ARM_NEON)#endif#if defined(WUFFS_BASE__CPU_ARCH__X86_FAMILY)#endif#if defined(WUFFS_BASE__CPU_ARCH__ARM_NEON)#endif#if defined(WUFFS_BASE__CPU_ARCH__X86_FAMILY)#endif#if defined(WUFFS_BASE__CPU_ARCH__ARM_NEON)#endif#if defined(WUFFS_BASE__CPU_ARCH__X86_FAMILY)#endif#if defined(WUFFS_BASE__CPU_ARCH__ARM_NEON)#endif#if defined(WUFFS_BASE__CPU_ARCH__X86_FAMILY)#endif#if defined(__GNUC__)#pragma GCC diagnostic push#pragma GCC diagnostic ignored "-Wconversion"#endif#if defined(__GNUC__)#pragma GCC diagnostic pop#endif#endif #if !defined(WUFFS_CONFIG__MODULES) || defined(WUFFS_CONFIG__MODULE__TGA)#if !defined(__clang__) && defined(__GNUC__)#pragma GCC diagnostic push#pragma GCC diagnostic ignored "-Wmaybe-uninitialized"#endif#if !defined(__clang__) && defined(__GNUC__)#pragma GCC diagnostic pop#endif#endif #if !defined(WUFFS_CONFIG__MODULES) || defined(WUFFS_CONFIG__MODULE__WBMP)#if !defined(__clang__) && defined(__GNUC__)#pragma GCC diagnostic push#pragma GCC diagnostic ignored "-Wmaybe-uninitialized"#endif#if !defined(__clang__) && defined(__GNUC__)#pragma GCC diagnostic pop#endif#endif #if defined(__cplusplus) && defined(WUFFS_BASE__HAVE_UNIQUE_PTR)#if !defined(WUFFS_CONFIG__MODULES) || defined(WUFFS_CONFIG__MODULE__AUX__BASE)#endif #if !defined(WUFFS_CONFIG__MODULES) || defined(WUFFS_CONFIG__MODULE__AUX__CBOR)#include <utility>#endif #if !defined(WUFFS_CONFIG__MODULES) || defined(WUFFS_CONFIG__MODULE__AUX__IMAGE)#include <utility>#if !defined(WUFFS_CONFIG__MODULES) || defined(WUFFS_CONFIG__MODULE__BMP)#endif#if !defined(WUFFS_CONFIG__MODULES) || defined(WUFFS_CONFIG__MODULE__GIF)#endif#if !defined(WUFFS_CONFIG__MODULES) || defined(WUFFS_CONFIG__MODULE__NIE)#endif#if !defined(WUFFS_CONFIG__MODULES) || defined(WUFFS_CONFIG__MODULE__PNG)#endif#if !defined(WUFFS_CONFIG__MODULES) || defined(WUFFS_CONFIG__MODULE__TGA)#endif#if !defined(WUFFS_CONFIG__MODULES) || defined(WUFFS_CONFIG__MODULE__WBMP)#endif#endif #if !defined(WUFFS_CONFIG__MODULES) || defined(WUFFS_CONFIG__MODULE__AUX__JSON)#include <utility>#define WUFFS_AUX__DECODE_JSON__GET_THE_NEXT_TOKEN …#undef WUFFS_AUX__DECODE_JSON__GET_THE_NEXT_TOKEN#endif #endif #endif #if defined(__GNUC__)#pragma GCC diagnostic pop#elif defined(__clang__)#pragma clang diagnostic pop#endif#endif