summaryrefslogtreecommitdiffhomepage
path: root/Private/NewKit/Defines.hpp
blob: cc8c141d591967eba7f6ea4edfbb155546e31a9d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
/*
 *	========================================================
 *
 *	HCore
 * 	Copyright Mahrouss Logic, all rights reserved.
 *
 * 	========================================================
 */

#pragma once

#include <NewKit/Macros.hpp>

#define NEWKIT_VERSION "1.0.0"

#if !defined(_INC_NO_STDC_HEADERS) && defined(__GNUC__)
#include <CRT/__cxxkit_defines.hxx>
#endif

#ifdef __has_feature
#if !__has_feature(cxx_nullptr)
#error You must at least have nullptr featured on your C++ compiler.
#endif
#endif

namespace HCore {
using voidPtr = void *;
using VoidPtr = void *;
using nullPtr = decltype(nullptr);
using NullPtr = decltype(nullptr);

using Int = int;
using Int32 = int;
using UShort = unsigned short;
using UInt16 = unsigned short;
using Short = short;
using Int16 = short;
using UInt = unsigned int;
using UInt32 = unsigned int;
using Long = long int;
using Int64 = long int;
using ULong = unsigned long int;
using UInt64 = unsigned long int;
using Boolean = bool;
using Bool = bool;
using Char = char;
using UChar = unsigned char;
using UInt8 = unsigned char;

using SSize = Int64;
using SSizeT = Int64;
using Size = __SIZE_TYPE__;
using SizeT = __SIZE_TYPE__;
using IntPtr = __INTPTR_TYPE__;
using UIntPtr = __UINTPTR_TYPE__;
using IntFast = __INT_FAST32_TYPE__;
using IntFast64 = __INT_FAST64_TYPE__;
using PtrDiff = __PTRDIFF_TYPE__;

using Utf8Char = char8_t;
using Utf16Char = char16_t;
using WideChar = wchar_t;
using Utf32Char = char32_t;

using Void = void;

using Lba = SSizeT;

enum class Endian : UChar { kLittle, kBig };

template <typename Args>
Args &&forward(Args &arg) {
  return static_cast<Args &&>(arg);
}

template <typename Args>
Args &&move(Args &&arg) {
  return static_cast<Args &&>(arg);
}
}  // namespace HCore

#define DEDUCE_ENDIAN(address, value)                         \
  (((reinterpret_cast<HCore::Char *>(address)[0]) == (value)) \
       ? (HCore::Endian::kBig)                                \
       : (HCore::Endian::kLittle))

#define Yes (true)
#define No (false)

#define VoidStar HCore::voidPtr