ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/libecb/ecb.h
(Generate patch)

Comparing libecb/ecb.h (file contents):
Revision 1.182 by root, Mon Jan 20 13:41:18 2020 UTC vs.
Revision 1.186 by root, Tue Jan 21 23:51:21 2020 UTC

1/* 1/*
2 * libecb - http://software.schmorp.de/pkg/libecb 2 * libecb - http://software.schmorp.de/pkg/libecb
3 * 3 *
4 * Copyright (©) 2009-2015 Marc Alexander Lehmann <libecb@schmorp.de> 4 * Copyright (©) 2009-2015,2018-2020 Marc Alexander Lehmann <libecb@schmorp.de>
5 * Copyright (©) 2011 Emanuele Giaquinta 5 * Copyright (©) 2011 Emanuele Giaquinta
6 * All rights reserved. 6 * All rights reserved.
7 * 7 *
8 * Redistribution and use in source and binary forms, with or without modifica- 8 * Redistribution and use in source and binary forms, with or without modifica-
9 * tion, are permitted provided that the following conditions are met: 9 * tion, are permitted provided that the following conditions are met:
41#ifndef ECB_H 41#ifndef ECB_H
42#define ECB_H 42#define ECB_H
43 43
44/* 16 bits major, 16 bits minor */ 44/* 16 bits major, 16 bits minor */
45#define ECB_VERSION 0x00010008 45#define ECB_VERSION 0x00010008
46
47#include <string.h> /* for memcpy */
46 48
47#ifdef _WIN32 49#ifdef _WIN32
48 typedef signed char int8_t; 50 typedef signed char int8_t;
49 typedef unsigned char uint8_t; 51 typedef unsigned char uint8_t;
50 typedef signed char int_fast8_t; 52 typedef signed char int_fast8_t;
634 636
635inline uint8_t ecb_bitrev (uint8_t v) { return ecb_bitrev8 (v); } 637inline uint8_t ecb_bitrev (uint8_t v) { return ecb_bitrev8 (v); }
636inline uint16_t ecb_bitrev (uint16_t v) { return ecb_bitrev16 (v); } 638inline uint16_t ecb_bitrev (uint16_t v) { return ecb_bitrev16 (v); }
637inline uint32_t ecb_bitrev (uint32_t v) { return ecb_bitrev32 (v); } 639inline uint32_t ecb_bitrev (uint32_t v) { return ecb_bitrev32 (v); }
638 640
639inline uint8_t ecb_rotl (uint8_t v) { return ecb_rotl8 (v); } 641inline uint8_t ecb_rotl (uint8_t v, unsigned int count) { return ecb_rotl8 (v, count); }
640inline uint16_t ecb_rotl (uint16_t v) { return ecb_rotl16 (v); } 642inline uint16_t ecb_rotl (uint16_t v, unsigned int count) { return ecb_rotl16 (v, count); }
641inline uint32_t ecb_rotl (uint32_t v) { return ecb_rotl32 (v); } 643inline uint32_t ecb_rotl (uint32_t v, unsigned int count) { return ecb_rotl32 (v, count); }
642inline uint64_t ecb_rotl (uint64_t v) { return ecb_rotl64 (v); } 644inline uint64_t ecb_rotl (uint64_t v, unsigned int count) { return ecb_rotl64 (v, count); }
643 645
644inline uint8_t ecb_rotr (uint8_t v) { return ecb_rotr8 (v); } 646inline uint8_t ecb_rotr (uint8_t v, unsigned int count) { return ecb_rotr8 (v, count); }
645inline uint16_t ecb_rotr (uint16_t v) { return ecb_rotr16 (v); } 647inline uint16_t ecb_rotr (uint16_t v, unsigned int count) { return ecb_rotr16 (v, count); }
646inline uint32_t ecb_rotr (uint32_t v) { return ecb_rotr32 (v); } 648inline uint32_t ecb_rotr (uint32_t v, unsigned int count) { return ecb_rotr32 (v, count); }
647inline uint64_t ecb_rotr (uint64_t v) { return ecb_rotr64 (v); } 649inline uint64_t ecb_rotr (uint64_t v, unsigned int count) { return ecb_rotr64 (v, count); }
648 650
649#endif 651#endif
650 652
651#if ECB_GCC_VERSION(4,3) || (ECB_CLANG_BUILTIN(__builtin_bswap32) && ECB_CLANG_BUILTIN(__builtin_bswap64)) 653#if ECB_GCC_VERSION(4,3) || (ECB_CLANG_BUILTIN(__builtin_bswap32) && ECB_CLANG_BUILTIN(__builtin_bswap64))
652 #if ECB_GCC_VERSION(4,8) || ECB_CLANG_BUILTIN(__builtin_bswap16) 654 #if ECB_GCC_VERSION(4,8) || ECB_CLANG_BUILTIN(__builtin_bswap16)
769 771
770ecb_inline void ecb_poke_le_u16_u (void *ptr, uint_fast16_t v) { ecb_poke_u16_u (ptr, ecb_host_to_le_u16 (v)); } 772ecb_inline void ecb_poke_le_u16_u (void *ptr, uint_fast16_t v) { ecb_poke_u16_u (ptr, ecb_host_to_le_u16 (v)); }
771ecb_inline void ecb_poke_le_u32_u (void *ptr, uint_fast32_t v) { ecb_poke_u32_u (ptr, ecb_host_to_le_u32 (v)); } 773ecb_inline void ecb_poke_le_u32_u (void *ptr, uint_fast32_t v) { ecb_poke_u32_u (ptr, ecb_host_to_le_u32 (v)); }
772ecb_inline void ecb_poke_le_u64_u (void *ptr, uint_fast64_t v) { ecb_poke_u64_u (ptr, ecb_host_to_le_u64 (v)); } 774ecb_inline void ecb_poke_le_u64_u (void *ptr, uint_fast64_t v) { ecb_poke_u64_u (ptr, ecb_host_to_le_u64 (v)); }
773 775
774#ifdef ECB_CPP 776#if ECB_CPP
775 777
776inline uint8_t ecb_bswap (uint8_t v) { return v; } 778inline uint8_t ecb_bswap (uint8_t v) { return v; }
777inline uint16_t ecb_bswap (uint16_t v) { return ecb_bswap16 (v); } 779inline uint16_t ecb_bswap (uint16_t v) { return ecb_bswap16 (v); }
778inline uint32_t ecb_bswap (uint32_t v) { return ecb_bswap32 (v); } 780inline uint32_t ecb_bswap (uint32_t v) { return ecb_bswap32 (v); }
779inline uint64_t ecb_bswap (uint64_t v) { return ecb_bswap64 (v); } 781inline uint64_t ecb_bswap (uint64_t v) { return ecb_bswap64 (v); }
781template<typename T> inline T ecb_be_to_host (T v) { return ecb_little_endian () ? ecb_bswap (v) : v; } 783template<typename T> inline T ecb_be_to_host (T v) { return ecb_little_endian () ? ecb_bswap (v) : v; }
782template<typename T> inline T ecb_le_to_host (T v) { return ecb_big_endian () ? ecb_bswap (v) : v; } 784template<typename T> inline T ecb_le_to_host (T v) { return ecb_big_endian () ? ecb_bswap (v) : v; }
783template<typename T> inline T ecb_peek (const void *ptr) { return *(const T *)ptr; } 785template<typename T> inline T ecb_peek (const void *ptr) { return *(const T *)ptr; }
784template<typename T> inline T ecb_peek_be (const void *ptr) { return ecb_be_to_host (ecb_peek <T> (ptr)); } 786template<typename T> inline T ecb_peek_be (const void *ptr) { return ecb_be_to_host (ecb_peek <T> (ptr)); }
785template<typename T> inline T ecb_peek_le (const void *ptr) { return ecb_le_to_host (ecb_peek <T> (ptr)); } 787template<typename T> inline T ecb_peek_le (const void *ptr) { return ecb_le_to_host (ecb_peek <T> (ptr)); }
786template<typename T> inline T ecb_peek_u (const void *ptr) { T v; std::memcpy (&v, ptr, sizeof (v)); return v; } 788template<typename T> inline T ecb_peek_u (const void *ptr) { T v; memcpy (&v, ptr, sizeof (v)); return v; }
787template<typename T> inline T ecb_peek_be_u (const void *ptr) { return ecb_be_to_host (ecb_peek_u<T> (ptr)); } 789template<typename T> inline T ecb_peek_be_u (const void *ptr) { return ecb_be_to_host (ecb_peek_u<T> (ptr)); }
788template<typename T> inline T ecb_peek_le_u (const void *ptr) { return ecb_le_to_host (ecb_peek_u<T> (ptr)); } 790template<typename T> inline T ecb_peek_le_u (const void *ptr) { return ecb_le_to_host (ecb_peek_u<T> (ptr)); }
789 791
790template<typename T> inline T ecb_host_to_be (T v) { return ecb_little_endian () ? ecb_bswap (v) : v; } 792template<typename T> inline T ecb_host_to_be (T v) { return ecb_little_endian () ? ecb_bswap (v) : v; }
791template<typename T> inline T ecb_host_to_le (T v) { return ecb_big_endian () ? ecb_bswap (v) : v; } 793template<typename T> inline T ecb_host_to_le (T v) { return ecb_big_endian () ? ecb_bswap (v) : v; }
792template<typename T> inline void ecb_poke (void *ptr, T v) { *(T *)ptr = v; } 794template<typename T> inline void ecb_poke (void *ptr, T v) { *(T *)ptr = v; }
793template<typename T> inline void ecb_poke_be (void *ptr, T v) { return ecb_poke <T> (ptr, ecb_host_to_be (v)); } 795template<typename T> inline void ecb_poke_be (void *ptr, T v) { return ecb_poke <T> (ptr, ecb_host_to_be (v)); }
794template<typename T> inline void ecb_poke_le (void *ptr, T v) { return ecb_poke <T> (ptr, ecb_host_to_le (v)); } 796template<typename T> inline void ecb_poke_le (void *ptr, T v) { return ecb_poke <T> (ptr, ecb_host_to_le (v)); }
795template<typename T> inline void ecb_poke_u (void *ptr, T v) { std::memcpy (ptr, &v, sizeof (v)); } 797template<typename T> inline void ecb_poke_u (void *ptr, T v) { memcpy (ptr, &v, sizeof (v)); }
796template<typename T> inline void ecb_poke_be_u (void *ptr, T v) { return ecb_poke_u<T> (ptr, ecb_host_to_be (v)); } 798template<typename T> inline void ecb_poke_be_u (void *ptr, T v) { return ecb_poke_u<T> (ptr, ecb_host_to_be (v)); }
797template<typename T> inline void ecb_poke_le_u (void *ptr, T v) { return ecb_poke_u<T> (ptr, ecb_host_to_le (v)); } 799template<typename T> inline void ecb_poke_le_u (void *ptr, T v) { return ecb_poke_u<T> (ptr, ecb_host_to_le (v)); }
798 800
799#endif 801#endif
800 802
950 || defined __sh__ \ 952 || defined __sh__ \
951 || defined _M_IX86 || defined ECB_MSVC_AMD64 || defined _M_IA64 \ 953 || defined _M_IX86 || defined ECB_MSVC_AMD64 || defined _M_IA64 \
952 || (defined __arm__ && (defined __ARM_EABI__ || defined __EABI__ || defined __VFP_FP__ || defined _WIN32_WCE || defined __ANDROID__)) \ 954 || (defined __arm__ && (defined __ARM_EABI__ || defined __EABI__ || defined __VFP_FP__ || defined _WIN32_WCE || defined __ANDROID__)) \
953 || defined __aarch64__ 955 || defined __aarch64__
954 #define ECB_STDFP 1 956 #define ECB_STDFP 1
955 #include <string.h> /* for memcpy */
956#else 957#else
957 #define ECB_STDFP 0 958 #define ECB_STDFP 0
958#endif 959#endif
959 960
960#ifndef ECB_NO_LIBM 961#ifndef ECB_NO_LIBM

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines