Purple  0.1
Standard Language Specification
number.h
Go to the documentation of this file.
1
8#ifndef NUMBER_H
9#define NUMBER_H
10
11#include <limits.h>
12
16typedef enum
17{
24
28static const int numberTypeByteSizes[] = {
29 1, 1, 2, 4, 8,
30};
31
35static const int numberTypeBitSizes[] = {1, 8, 16, 32, 64};
36
40static const unsigned long long int numberTypeMaxValues[] = {1, CHAR_MAX, SHRT_MAX, INT_MAX,
41 LONG_MAX};
42
46static const char* numberTypeFormatStrings[] = {"%d", "%d", "%d", "%d", "%ld"};
47
51typedef struct Number {
55 long long int value;
57
61#define NUMBER_BOOL(v) \
62 (Number) \
63 { \
64 .type = NT_INT1, .value = v \
65 }
66
70#define NUMBER_CHAR(v) \
71 (Number) \
72 { \
73 .type = NT_INT8, .value = v \
74 }
75
80#define NUMBER_SHORT(v) \
81 (Number) \
82 { \
83 .type = NT_INT16, .value = v \
84 }
85
89#define NUMBER_INT(v) \
90 (Number) \
91 { \
92 .type = NT_INT32, .value = v \
93 }
94
98#define NUMBER_LONG(v) \
99 (Number) \
100 { \
101 .type = NT_INT64, .value = v \
102 }
103
107#define NUMBER_FROM_TYPE_VAL(t, v) \
108 (Number) \
109 { \
110 .type = t, .value = v \
111 }
112
116#define NT_MAX(a, b) (a > b ? a : b)
117
121#define NT_MIN(a, b) (NT_MAX(a, b) == a ? b : a)
122
124int number_to_token_type(Number number);
125
126#endif /* NUMBER_H */
NumberType token_type_to_number_type(int token_type)
Convert a TokenType to a NumberType.
Definition: number.c:17
struct Number Number
Container for various kinds of number data.
static const char * numberTypeFormatStrings[]
Format strings for each data type.
Definition: number.h:46
int number_to_token_type(Number number)
Definition: number.c:43
static const int numberTypeByteSizes[]
Size of each NumberType.
Definition: number.h:28
static const unsigned long long int numberTypeMaxValues[]
Max value of each NumberType.
Definition: number.h:40
static const int numberTypeBitSizes[]
Bit size of each NumberType.
Definition: number.h:35
NumberType
Types of numbers supported by Purple.
Definition: number.h:17
@ NT_INT16
Definition: number.h:20
@ NT_INT64
Definition: number.h:22
@ NT_INT1
Definition: number.h:18
@ NT_INT32
Definition: number.h:21
@ NT_INT8
Definition: number.h:19
Container for various kinds of number data.
Definition: number.h:51
long long int value
Definition: number.h:55
NumberType type
Definition: number.h:53