foobar2000 SDK  2015-01-14
int_types.h
Go to the documentation of this file.
1 #include <stdint.h>
2 typedef int64_t t_int64;
3 typedef uint64_t t_uint64;
4 typedef int32_t t_int32;
5 typedef uint32_t t_uint32;
6 typedef int16_t t_int16;
7 typedef uint16_t t_uint16;
8 typedef int8_t t_int8;
9 typedef uint8_t t_uint8;
10 
11 typedef int t_int;
12 typedef unsigned int t_uint;
13 
14 typedef float t_float32;
15 typedef double t_float64;
16 
17 
18 
19 namespace pfc {
20  template<unsigned t_bytes>
21  class sized_int_t;
22 
23  template<> class sized_int_t<1> {
24  public:
26  typedef t_int8 t_signed;
27  };
28 
29  template<> class sized_int_t<2> {
30  public:
32  typedef t_int16 t_signed;
33  };
34 
35  template<> class sized_int_t<4> {
36  public:
38  typedef t_int32 t_signed;
39  };
40 
41  template<> class sized_int_t<8> {
42  public:
44  typedef t_int64 t_signed;
45  };
46 }
47 
48 typedef size_t t_size;
50 
51 
52 inline t_size MulDiv_Size(t_size x,t_size y,t_size z) {return (t_size) ( ((t_uint64)x * (t_uint64)y) / (t_uint64)z );}
53 
54 #define pfc_infinite (~0)
55 
56 namespace pfc {
57  const t_uint16 infinite16 = (t_uint16)(~0);
58  const t_uint32 infinite32 = (t_uint32)(~0);
59  const t_uint64 infinite64 = (t_uint64)(~0);
60  const t_size infinite_size = (t_size)(~0);
61 
62  template<typename T> class int_specs_t;
63 
64  template<typename T>
66  public:
67  inline static T get_min() {return ((T)1<<(sizeof(T)*8-1));}
68  inline static T get_max() {return ~((T)1<<(sizeof(T)*8-1));}
69  enum {is_signed = true};
70  };
71 
72  template<typename T>
74  public:
75  inline static T get_min() {return (T)0;}
76  inline static T get_max() {return (T)~0;}
77  enum {is_signed = false};
78  };
79 
80  template<> class int_specs_t<char> : public int_specs_signed_t<char> {};
81  template<> class int_specs_t<unsigned char> : public int_specs_unsigned_t<unsigned char> {};
82  template<> class int_specs_t<short> : public int_specs_signed_t<short> {};
83  template<> class int_specs_t<unsigned short> : public int_specs_unsigned_t<unsigned short> {};
84  template<> class int_specs_t<int> : public int_specs_signed_t<int> {};
85  template<> class int_specs_t<unsigned int> : public int_specs_unsigned_t<unsigned int> {};
86  template<> class int_specs_t<long> : public int_specs_signed_t<long> {};
87  template<> class int_specs_t<unsigned long> : public int_specs_unsigned_t<unsigned long> {};
88  template<> class int_specs_t<long long> : public int_specs_signed_t<long long> {};
89  template<> class int_specs_t<unsigned long long> : public int_specs_unsigned_t<unsigned long long> {};
90 
91  template<> class int_specs_t<wchar_t> : public int_specs_unsigned_t<wchar_t> {};
92 
93 };
uint8_t t_uint8
Definition: int_types.h:9
uint64_t t_uint64
Definition: int_types.h:3
const t_uint64 infinite64
Definition: int_types.h:59
t_size MulDiv_Size(t_size x, t_size y, t_size z)
Definition: int_types.h:52
const t_uint32 infinite32
Definition: int_types.h:58
int16_t t_int16
Definition: int_types.h:6
unsigned int t_uint
Definition: int_types.h:12
int t_int
Definition: int_types.h:11
double t_float64
Definition: int_types.h:15
int32_t t_int32
Definition: int_types.h:4
size_t t_size
Definition: int_types.h:48
uint16_t t_uint16
Definition: int_types.h:7
pfc::sized_int_t< sizeof(size_t) >::t_signed t_ssize
Definition: int_types.h:49
const t_size infinite_size
Definition: int_types.h:60
float t_float32
Definition: int_types.h:14
const t_uint16 infinite16
Definition: int_types.h:57
uint32_t t_uint32
Definition: int_types.h:5
int64_t t_int64
Definition: int_types.h:2
int8_t t_int8
Definition: int_types.h:8