[patch] stdint.h: [u]int_fast<N>_t types (Take 2)
Jeff Johnston
jjohnstn@redhat.com
Thu Oct 6 20:06:00 GMT 2005
Patch applied. Thanks.
-- Jeff J.
Ralf Corsepius wrote:
> Hi again,
>
> Take 2 at implementing [u]int_fast<N>_t types:
>
> * Working principle: Assume "int" to be the fastest type for all fixed
> size types with a size less than int.
>
> => Use "[signed|unsigned] int" for [u]int_fast<N>_t with N <= N(int).
>
> => Use "[u]int_least<N>_t" for [u]int_fast<N>_t with N > N(int).
>
>
> Ralf
>
>
>
> ------------------------------------------------------------------------
>
> 2005-10-05 Ralf Corsepius <ralf.corsepius@rtems.org>
>
> * libc/include/stdint.h: Add [u]int_fast<N>_t types.
>
> Index: stdint.h
> ===================================================================
> RCS file: /cvs/src/src/newlib/libc/include/stdint.h,v
> retrieving revision 1.6
> diff -u -r1.6 stdint.h
> --- stdint.h 4 Oct 2005 21:02:59 -0000 1.6
> +++ stdint.h 5 Oct 2005 02:35:24 -0000
> @@ -154,6 +154,73 @@
> #endif
> #endif
>
> +/*
> + * Fastest minimum-width integer types
> + *
> + * Assume int to be the fastest type for all types with a width
> + * less than __INT_MAX__ rsp. INT_MAX
> + */
> +#if __STDINT_EXP(INT_MAX) >= 0x7f
> + typedef signed int int_fast8_t;
> + typedef unsigned int uint_fast8_t;
> +#define __int_fast8_t_defined 1
> +#endif
> +
> +#if __STDINT_EXP(INT_MAX) >= 0x7fff
> + typedef signed int int_fast16_t;
> + typedef unsigned int uint_fast16_t;
> +#define __int_fast16_t_defined 1
> +#endif
> +
> +#if __STDINT_EXP(INT_MAX) >= 0x7fffffff
> + typedef signed int int_fast32_t;
> + typedef unsigned int uint_fast32_t;
> +#define __int_fast32_t_defined 1
> +#endif
> +
> +#if __STDINT_EXP(INT_MAX) > 0x7fffffff
> + typedef signed int int_fast64_t;
> + typedef unsigned int uint_fast64_t;
> +#define __int_fast64_t_defined 1
> +#endif
> +
> +/*
> + * Fall back to [u]int_least<N>_t for [u]int_fast<N>_t types
> + * not having been defined, yet.
> + * Leave undefined, if [u]int_least<N>_t should not be available.
> + */
> +#if !__int_fast8_t_defined
> +#if __int_least8_t_defined
> + typedef int_least8_t int_fast8_t;
> + typedef uint_least8_t uint_fast8_t;
> +#define __int_fast8_t_defined 1
> +#endif
> +#endif
> +
> +#if !__int_fast16_t_defined
> +#if __int_least16_t_defined
> + typedef int_least16_t int_fast16_t;
> + typedef uint_least16_t uint_fast16_t;
> +#define __int_fast16_t_defined 1
> +#endif
> +#endif
> +
> +#if !__int_fast32_t_defined
> +#if __int_least32_t_defined
> + typedef int_least32_t int_fast32_t;
> + typedef uint_least32_t uint_fast32_t;
> +#define __int_fast32_t_defined 1
> +#endif
> +#endif
> +
> +#if !__int_fast64_t_defined
> +#if __int_least64_t_defined
> + typedef int_least64_t int_fast64_t;
> + typedef uint_least64_t uint_fast64_t;
> +#define __int_fast64_t_defined 1
> +#endif
> +#endif
> +
> /* Greatest-width integer types */
> /* Modern GCCs provide __INTMAX_TYPE__ */
> #if defined(__INTMAX_TYPE__)
> @@ -257,6 +324,30 @@
> #endif
> #endif
>
> +#if __int_fast8_t_defined
> +#define INT_FAST8_MIN INT8_MIN
> +#define INT_FAST8_MAX INT8_MAX
> +#define UINT_FAST8_MAX UINT8_MAX
> +#endif
> +
> +#if __int_fast16_t_defined
> +#define INT_FAST16_MIN INT16_MIN
> +#define INT_FAST16_MAX INT16_MAX
> +#define UINT_FAST16_MAX UINT16_MAX
> +#endif
> +
> +#if __int_fast32_t_defined
> +#define INT_FAST32_MIN INT32_MIN
> +#define INT_FAST32_MAX INT32_MAX
> +#define UINT_FAST32_MAX UINT32_MAX
> +#endif
> +
> +#if __int_fast64_t_defined
> +#define INT_FAST64_MIN INT64_MIN
> +#define INT_FAST64_MAX INT64_MAX
> +#define UINT_FAST64_MAX UINT64_MAX
> +#endif
> +
> /* This must match size_t in stddef.h, currently long unsigned int */
> #define SIZE_MIN (-__STDINT_EXP(LONG_MAX) - 1L)
> #define SIZE_MAX __STDINT_EXP(LONG_MAX)
More information about the Newlib
mailing list