1*0b57cec5SDimitry Andric// -*- C++ -*- 2*0b57cec5SDimitry Andric//===--------------------------- cstddef ----------------------------------===// 3*0b57cec5SDimitry Andric// 4*0b57cec5SDimitry Andric// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 5*0b57cec5SDimitry Andric// See https://llvm.org/LICENSE.txt for license information. 6*0b57cec5SDimitry Andric// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 7*0b57cec5SDimitry Andric// 8*0b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 9*0b57cec5SDimitry Andric 10*0b57cec5SDimitry Andric#ifndef _LIBCPP_CSTDDEF 11*0b57cec5SDimitry Andric#define _LIBCPP_CSTDDEF 12*0b57cec5SDimitry Andric 13*0b57cec5SDimitry Andric/* 14*0b57cec5SDimitry Andric cstddef synopsis 15*0b57cec5SDimitry Andric 16*0b57cec5SDimitry AndricMacros: 17*0b57cec5SDimitry Andric 18*0b57cec5SDimitry Andric offsetof(type,member-designator) 19*0b57cec5SDimitry Andric NULL 20*0b57cec5SDimitry Andric 21*0b57cec5SDimitry Andricnamespace std 22*0b57cec5SDimitry Andric{ 23*0b57cec5SDimitry Andric 24*0b57cec5SDimitry AndricTypes: 25*0b57cec5SDimitry Andric 26*0b57cec5SDimitry Andric ptrdiff_t 27*0b57cec5SDimitry Andric size_t 28*0b57cec5SDimitry Andric max_align_t 29*0b57cec5SDimitry Andric nullptr_t 30*0b57cec5SDimitry Andric byte // C++17 31*0b57cec5SDimitry Andric 32*0b57cec5SDimitry Andric} // std 33*0b57cec5SDimitry Andric 34*0b57cec5SDimitry Andric*/ 35*0b57cec5SDimitry Andric 36*0b57cec5SDimitry Andric#include <__config> 37*0b57cec5SDimitry Andric#include <version> 38*0b57cec5SDimitry Andric 39*0b57cec5SDimitry Andric#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) 40*0b57cec5SDimitry Andric#pragma GCC system_header 41*0b57cec5SDimitry Andric#endif 42*0b57cec5SDimitry Andric 43*0b57cec5SDimitry Andric// Don't include our own <stddef.h>; we don't want to declare ::nullptr_t. 44*0b57cec5SDimitry Andric#include_next <stddef.h> 45*0b57cec5SDimitry Andric#include <__nullptr> 46*0b57cec5SDimitry Andric 47*0b57cec5SDimitry Andric_LIBCPP_BEGIN_NAMESPACE_STD 48*0b57cec5SDimitry Andric 49*0b57cec5SDimitry Andricusing ::ptrdiff_t; 50*0b57cec5SDimitry Andricusing ::size_t; 51*0b57cec5SDimitry Andric 52*0b57cec5SDimitry Andric#if defined(__CLANG_MAX_ALIGN_T_DEFINED) || defined(_GCC_MAX_ALIGN_T) || \ 53*0b57cec5SDimitry Andric defined(__DEFINED_max_align_t) || defined(__NetBSD__) 54*0b57cec5SDimitry Andric// Re-use the compiler's <stddef.h> max_align_t where possible. 55*0b57cec5SDimitry Andricusing ::max_align_t; 56*0b57cec5SDimitry Andric#else 57*0b57cec5SDimitry Andrictypedef long double max_align_t; 58*0b57cec5SDimitry Andric#endif 59*0b57cec5SDimitry Andric 60*0b57cec5SDimitry Andric_LIBCPP_END_NAMESPACE_STD 61*0b57cec5SDimitry Andric 62*0b57cec5SDimitry Andric#if _LIBCPP_STD_VER > 14 63*0b57cec5SDimitry Andricnamespace std // purposefully not versioned 64*0b57cec5SDimitry Andric{ 65*0b57cec5SDimitry Andricenum class byte : unsigned char {}; 66*0b57cec5SDimitry Andric 67*0b57cec5SDimitry Andricconstexpr byte operator| (byte __lhs, byte __rhs) noexcept 68*0b57cec5SDimitry Andric{ 69*0b57cec5SDimitry Andric return static_cast<byte>( 70*0b57cec5SDimitry Andric static_cast<unsigned char>( 71*0b57cec5SDimitry Andric static_cast<unsigned int>(__lhs) | static_cast<unsigned int>(__rhs) 72*0b57cec5SDimitry Andric )); 73*0b57cec5SDimitry Andric} 74*0b57cec5SDimitry Andric 75*0b57cec5SDimitry Andricconstexpr byte& operator|=(byte& __lhs, byte __rhs) noexcept 76*0b57cec5SDimitry Andric{ return __lhs = __lhs | __rhs; } 77*0b57cec5SDimitry Andric 78*0b57cec5SDimitry Andricconstexpr byte operator& (byte __lhs, byte __rhs) noexcept 79*0b57cec5SDimitry Andric{ 80*0b57cec5SDimitry Andric return static_cast<byte>( 81*0b57cec5SDimitry Andric static_cast<unsigned char>( 82*0b57cec5SDimitry Andric static_cast<unsigned int>(__lhs) & static_cast<unsigned int>(__rhs) 83*0b57cec5SDimitry Andric )); 84*0b57cec5SDimitry Andric} 85*0b57cec5SDimitry Andric 86*0b57cec5SDimitry Andricconstexpr byte& operator&=(byte& __lhs, byte __rhs) noexcept 87*0b57cec5SDimitry Andric{ return __lhs = __lhs & __rhs; } 88*0b57cec5SDimitry Andric 89*0b57cec5SDimitry Andricconstexpr byte operator^ (byte __lhs, byte __rhs) noexcept 90*0b57cec5SDimitry Andric{ 91*0b57cec5SDimitry Andric return static_cast<byte>( 92*0b57cec5SDimitry Andric static_cast<unsigned char>( 93*0b57cec5SDimitry Andric static_cast<unsigned int>(__lhs) ^ static_cast<unsigned int>(__rhs) 94*0b57cec5SDimitry Andric )); 95*0b57cec5SDimitry Andric} 96*0b57cec5SDimitry Andric 97*0b57cec5SDimitry Andricconstexpr byte& operator^=(byte& __lhs, byte __rhs) noexcept 98*0b57cec5SDimitry Andric{ return __lhs = __lhs ^ __rhs; } 99*0b57cec5SDimitry Andric 100*0b57cec5SDimitry Andricconstexpr byte operator~ (byte __b) noexcept 101*0b57cec5SDimitry Andric{ 102*0b57cec5SDimitry Andric return static_cast<byte>( 103*0b57cec5SDimitry Andric static_cast<unsigned char>( 104*0b57cec5SDimitry Andric ~static_cast<unsigned int>(__b) 105*0b57cec5SDimitry Andric )); 106*0b57cec5SDimitry Andric} 107*0b57cec5SDimitry Andric 108*0b57cec5SDimitry Andric} 109*0b57cec5SDimitry Andric 110*0b57cec5SDimitry Andric#include <type_traits> // rest of byte 111*0b57cec5SDimitry Andric#endif 112*0b57cec5SDimitry Andric 113*0b57cec5SDimitry Andric#endif // _LIBCPP_CSTDDEF 114