xref: /freebsd/contrib/llvm-project/libcxx/include/cstddef (revision 0b57cec536236d46e3dba9bd041533462f33dbb7)
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