summaryrefslogtreecommitdiffhomepage
path: root/dev/LibSCI/Macros.h
blob: ccdfb4850292ca648b36046e7c4e602227f19e05 (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
/* -------------------------------------------

Copyright (C) 2024-2025, Amlal EL Mahrouss, all rights reserved.

File: Macros.h
Purpose: LibSCI Macros header.

------------------------------------------- */

#pragma once

/***********************************************************************************/
/// @file LibSCI/Macros.h
/// @brief Macros and core types.
/***********************************************************************************/

#include <LibSCI/CompilerHint.h>

#define ATTRIBUTE(X) __attribute__((X))

#define IMPORT_CXX extern "C++"
#define IMPORT_C   extern "C"

#define DEPRECATED ATTRIBUTE(deprecated)

#define EXIT_SUCCESS 0
#define EXIT_FAILURE 1

#define FILE_MAX_LEN 256

typedef bool Bool;
typedef bool BOOL;
typedef bool Boolean;
typedef void Void;

#ifndef __cplusplus
#define true  1
#define false 0
#endif

#define YES true
#define NO	false

typedef __UINT64_TYPE__ UInt64;
typedef __UINT32_TYPE__ UInt32;
typedef __UINT16_TYPE__ UInt16;
typedef __UINT8_TYPE__	UInt8;

typedef __SIZE_TYPE__ SizeT;

typedef __INT64_TYPE__ SInt64;
typedef __INT32_TYPE__ SInt32;
typedef __INT16_TYPE__ SInt16;
typedef __INT8_TYPE__  SInt8;

typedef void*			 VoidPtr;
typedef __UINTPTR_TYPE__ UIntPtr;
typedef char			 Char;

#ifdef __cplusplus
typedef decltype(nullptr) nullPtr;
typedef nullPtr			  NullPtr;

#define SCI_COPY_DELETE(KLASS)               \
	KLASS& operator=(const KLASS&) = delete; \
	KLASS(const KLASS&)			   = delete;

#define SCI_COPY_DEFAULT(KLASS)               \
	KLASS& operator=(const KLASS&) = default; \
	KLASS(const KLASS&)			   = default;

#define SCI_MOVE_DELETE(KLASS)          \
	KLASS& operator=(KLASS&&) = delete; \
	KLASS(KLASS&&)			  = delete;

#define SCI_MOVE_DEFAULT(KLASS)          \
	KLASS& operator=(KLASS&&) = default; \
	KLASS(KLASS&&)			  = default;

#endif

IMPORT_C void _rtl_assert(Bool expr, const Char* origin);

#define MUST_PASS(X) _rtl_assert(X, __FILE__)

#ifndef ARRAY_SIZE
#define ARRAY_SIZE(a)              \
	(((sizeof(a) / sizeof(*(a))) / \
	  (static_cast<SizeT>(!(sizeof(a) % sizeof(*(a)))))))
#endif