uSTL_2.3/include/utypes.h

65 lines
2.0 KiB
C

// This file is part of the uSTL library, an STL implementation.
//
// Copyright (c) 2005 by Mike Sharov <msharov@users.sourceforge.net>
// This file is free software, distributed under the MIT License.
#pragma once
#include "config.h"
#ifndef STDC_HEADERS
#error "This library requires standard C and C++ headers to compile."
#endif
#ifndef STDUNIX_HEADERS
#error "This library compiles only on UNIX systems."
#endif
#define __STDC_LIMIT_MACROS // For WCHAR_MIN and WCHAR_MAX in stdint.
#define __STDC_CONSTANT_MACROS // For UINT??_C macros to avoid using L and UL suffixes on constants.
#if HAVE_STDINT_H
#include <stdint.h>
#elif HAVE_INTTYPES_H
#include <inttypes.h>
#else
#error "Need standard integer types definitions, usually in stdint.h"
#endif
#if HAVE_SYS_TYPES_H
#include <sys/types.h>
#endif
#include <stddef.h> // For ptrdiff_t, size_t
#include <limits.h>
#include <float.h>
#include <unistd.h>
#ifndef SIZE_MAX
#define SIZE_MAX UINT_MAX
#endif
#if sun || __sun // Solaris defines UINTPTR_MAX as empty.
#undef UINTPTR_MAX
#define UINTPTR_MAX ULONG_MAX
#endif
#ifndef WCHAR_MAX
#ifdef __WCHAR_MAX__
#define WCHAR_MAX __WCHAR_MAX__
#else
#define WCHAR_MAX CHAR_MAX
#endif
#endif
#if HAVE_LONG_LONG
#ifndef LLONG_MAX
#define ULLONG_MAX UINT64_C(0xFFFFFFFFFFFFFFFF)
#define LLONG_MAX INT64_C(0x7FFFFFFFFFFFFFFF)
#define LLONG_MIN ULLONG_MAX
#endif
#endif
#ifndef BYTE_ORDER
#define LITTLE_ENDIAN USTL_LITTLE_ENDIAN
#define BIG_ENDIAN USTL_BIG_ENDIAN
#define BYTE_ORDER USTL_BYTE_ORDER
#endif
typedef size_t uoff_t; ///< A type for storing offsets into blocks measured by size_t.
typedef uint32_t hashvalue_t; ///< Value type returned by the hash functions.
typedef size_t streamsize; ///< Size of stream data
typedef uoff_t streamoff; ///< Offset into a stream
#if !defined(UINTPTR_MAX) || !defined(UINT32_C)
#error "If you include stdint.h before ustl.h, define __STDC_LIMIT_MACROS and __STDC_CONSTANT_MACROS first"
#endif