-
Notifications
You must be signed in to change notification settings - Fork 187
/
IntegerType.h
47 lines (39 loc) · 1.23 KB
/
IntegerType.h
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
/*
* IntegerType.h
*
* This file is part of Mozzi.
*
* Copyright 2021-2024 Thomas Friedrichsmeier and the Mozzi Team
*
* Mozzi is licensed under the GNU Lesser General Public Licence (LGPL) Version 2.1 or later.
*
*/
#ifndef INTTYPE_H_
#define INTTYPE_H_
#include <Arduino.h>
/** @ingroup util
Provides appropriate integer types that can bit the given number of bytes on this platform (at most 64).
*/
template<uint8_t BYTES> struct IntegerType {
// at an odd value, such as 3 bytes? Add one more byte (up to at most 8 bytes)..
typedef typename IntegerType<(BYTES < 8) ? (BYTES+1) : 8>::unsigned_type unsigned_type;
typedef typename IntegerType<(BYTES < 8) ? (BYTES+1) : 8>::signed_type signed_type;
};
// These are the specializations for the types that we actually assume to exist:
template<> struct IntegerType<1> {
typedef uint8_t unsigned_type;
typedef int8_t signed_type;
};
template<> struct IntegerType<2> {
typedef uint16_t unsigned_type;
typedef int16_t signed_type;
};
template<> struct IntegerType<4> {
typedef uint32_t unsigned_type;
typedef int32_t signed_type;
};
template<> struct IntegerType<8> {
typedef uint64_t unsigned_type;
typedef int64_t signed_type;
};
#endif /* INTTYPE_H_ */