xref: /unit/src/nxt_types.h (revision 0)
1*0Sigor@sysoev.ru 
2*0Sigor@sysoev.ru /*
3*0Sigor@sysoev.ru  * Copyright (C) Igor Sysoev
4*0Sigor@sysoev.ru  * Copyright (C) NGINX, Inc.
5*0Sigor@sysoev.ru  */
6*0Sigor@sysoev.ru 
7*0Sigor@sysoev.ru #ifndef _NXT_TYPES_H_INCLUDED_
8*0Sigor@sysoev.ru #define _NXT_TYPES_H_INCLUDED_
9*0Sigor@sysoev.ru 
10*0Sigor@sysoev.ru 
11*0Sigor@sysoev.ru /*
12*0Sigor@sysoev.ru  * nxt_int_t corresponds to the most efficient integer type,
13*0Sigor@sysoev.ru  * an architecture word.  It is usually the long type,
14*0Sigor@sysoev.ru  * but on Win64 the long is int32_t, so pointer size suits better.
15*0Sigor@sysoev.ru  * nxt_int_t must be no less than int32_t.
16*0Sigor@sysoev.ru  */
17*0Sigor@sysoev.ru 
18*0Sigor@sysoev.ru #if (__amd64__)
19*0Sigor@sysoev.ru /*
20*0Sigor@sysoev.ru  * AMD64 64-bit multiplication and division operations
21*0Sigor@sysoev.ru  * are slower and 64-bit instructions are longer.
22*0Sigor@sysoev.ru  */
23*0Sigor@sysoev.ru #define NXT_INT_T_SIZE       4
24*0Sigor@sysoev.ru typedef int                  nxt_int_t;
25*0Sigor@sysoev.ru typedef u_int                nxt_uint_t;
26*0Sigor@sysoev.ru 
27*0Sigor@sysoev.ru #else
28*0Sigor@sysoev.ru #define NXT_INT_T_SIZE       NXT_PTR_SIZE
29*0Sigor@sysoev.ru typedef intptr_t             nxt_int_t;
30*0Sigor@sysoev.ru typedef uintptr_t            nxt_uint_t;
31*0Sigor@sysoev.ru #endif
32*0Sigor@sysoev.ru 
33*0Sigor@sysoev.ru 
34*0Sigor@sysoev.ru typedef nxt_uint_t           nxt_bool_t;
35*0Sigor@sysoev.ru 
36*0Sigor@sysoev.ru 
37*0Sigor@sysoev.ru /*
38*0Sigor@sysoev.ru  * nxt_off_t corresponds to OS's off_t, a file offset type.
39*0Sigor@sysoev.ru  * Although Linux, Solaris, and HP-UX define both off_t and off64_t,
40*0Sigor@sysoev.ru  * setting _FILE_OFFSET_BITS to 64 defines off_t as off64_t.
41*0Sigor@sysoev.ru  */
42*0Sigor@sysoev.ru typedef off_t                nxt_off_t;
43*0Sigor@sysoev.ru 
44*0Sigor@sysoev.ru 
45*0Sigor@sysoev.ru /*
46*0Sigor@sysoev.ru  * nxt_time_t corresponds to OS's time_t, time in seconds.  nxt_time_t is
47*0Sigor@sysoev.ru  * a signed integer.  OS's time_t may be an integer or real-floating type,
48*0Sigor@sysoev.ru  * though it is usually a signed 32-bit or 64-bit integer depending on
49*0Sigor@sysoev.ru  * platform bit count.  There are however exceptions, e.g., time_t is:
50*0Sigor@sysoev.ru  *   32-bit on 64-bit NetBSD prior to 6.0 version;
51*0Sigor@sysoev.ru  *   64-bit on 32-bit NetBSD 6.0;
52*0Sigor@sysoev.ru  *   32-bit on 64-bit OpenBSD;
53*0Sigor@sysoev.ru  *   64-bit in Linux x32 ABI;
54*0Sigor@sysoev.ru  *   64-bit in 32-bit Visual Studio C++ 2005.
55*0Sigor@sysoev.ru  */
56*0Sigor@sysoev.ru #if (NXT_QNX)
57*0Sigor@sysoev.ru /*
58*0Sigor@sysoev.ru  * QNX defines time_t as uint32_t.
59*0Sigor@sysoev.ru  * Y2038 fix: "typedef int64_t  nxt_time_t".
60*0Sigor@sysoev.ru  */
61*0Sigor@sysoev.ru typedef int32_t              nxt_time_t;
62*0Sigor@sysoev.ru 
63*0Sigor@sysoev.ru #else
64*0Sigor@sysoev.ru /* Y2038, if time_t is 32-bit integer. */
65*0Sigor@sysoev.ru typedef time_t               nxt_time_t;
66*0Sigor@sysoev.ru #endif
67*0Sigor@sysoev.ru 
68*0Sigor@sysoev.ru 
69*0Sigor@sysoev.ru #if (NXT_PTR_SIZE == 8)
70*0Sigor@sysoev.ru #define NXT_64BIT            1
71*0Sigor@sysoev.ru #define NXT_32BIT            0
72*0Sigor@sysoev.ru 
73*0Sigor@sysoev.ru #else
74*0Sigor@sysoev.ru #define NXT_64BIT            0
75*0Sigor@sysoev.ru #define NXT_32BIT            1
76*0Sigor@sysoev.ru #endif
77*0Sigor@sysoev.ru 
78*0Sigor@sysoev.ru 
79*0Sigor@sysoev.ru #define NXT_INT64_T_LEN      (sizeof("-9223372036854775808") - 1)
80*0Sigor@sysoev.ru #define NXT_INT32_T_LEN      (sizeof("-2147483648") - 1)
81*0Sigor@sysoev.ru 
82*0Sigor@sysoev.ru #define NXT_INT64_T_HEXLEN   (sizeof("fffffffffffffffff") - 1)
83*0Sigor@sysoev.ru #define NXT_INT32_T_HEXLEN   (sizeof("ffffffff") - 1)
84*0Sigor@sysoev.ru 
85*0Sigor@sysoev.ru #define NXT_INT64_T_MAX      0x7fffffffffffffffLL
86*0Sigor@sysoev.ru #define NXT_INT32_T_MAX      0x7fffffff
87*0Sigor@sysoev.ru 
88*0Sigor@sysoev.ru 
89*0Sigor@sysoev.ru #if (NXT_INT_T_SIZE == 8)
90*0Sigor@sysoev.ru #define NXT_INT_T_LEN        NXT_INT64_T_LEN
91*0Sigor@sysoev.ru #define NXT_INT_T_HEXLEN     NXT_INT64_T_HEXLEN
92*0Sigor@sysoev.ru #define NXT_INT_T_MAX        NXT_INT64_T_MAX
93*0Sigor@sysoev.ru 
94*0Sigor@sysoev.ru #else
95*0Sigor@sysoev.ru #define NXT_INT_T_LEN        NXT_INT32_T_LEN
96*0Sigor@sysoev.ru #define NXT_INT_T_HEXLEN     NXT_INT32_T_HEXLEN
97*0Sigor@sysoev.ru #define NXT_INT_T_MAX        NXT_INT32_T_MAX
98*0Sigor@sysoev.ru #endif
99*0Sigor@sysoev.ru 
100*0Sigor@sysoev.ru 
101*0Sigor@sysoev.ru #if (NXT_64BIT)
102*0Sigor@sysoev.ru #define NXT_ATOMIC_T_LEN     NXT_INT64_T_LEN
103*0Sigor@sysoev.ru #define NXT_ATOMIC_T_HEXLEN  NXT_INT64_T_HEXLEN
104*0Sigor@sysoev.ru #define NXT_ATOMIC_T_MAX     NXT_INT64_T_MAX
105*0Sigor@sysoev.ru 
106*0Sigor@sysoev.ru #else
107*0Sigor@sysoev.ru #define NXT_ATOMIC_T_LEN     NXT_INT32_T_LEN
108*0Sigor@sysoev.ru #define NXT_ATOMIC_T_HEXLEN  NXT_INT32_T_HEXLEN
109*0Sigor@sysoev.ru #define NXT_ATOMIC_T_MAX     NXT_INT32_T_MAX
110*0Sigor@sysoev.ru #endif
111*0Sigor@sysoev.ru 
112*0Sigor@sysoev.ru 
113*0Sigor@sysoev.ru #if (NXT_OFF_T_SIZE == 8)
114*0Sigor@sysoev.ru typedef uint64_t             nxt_uoff_t;
115*0Sigor@sysoev.ru #define NXT_OFF_T_LEN        NXT_INT64_T_LEN
116*0Sigor@sysoev.ru #define NXT_OFF_T_HEXLEN     NXT_INT64_T_HEXLEN
117*0Sigor@sysoev.ru #define NXT_OFF_T_MAX        NXT_INT64_T_MAX
118*0Sigor@sysoev.ru 
119*0Sigor@sysoev.ru #else
120*0Sigor@sysoev.ru typedef uint32_t             nxt_uoff_t;
121*0Sigor@sysoev.ru #define NXT_OFF_T_LEN        NXT_INT32_T_LEN
122*0Sigor@sysoev.ru #define NXT_OFF_T_HEXLEN     NXT_INT32_T_HEXLEN
123*0Sigor@sysoev.ru #define NXT_OFF_T_MAX        NXT_INT32_T_MAX
124*0Sigor@sysoev.ru #endif
125*0Sigor@sysoev.ru 
126*0Sigor@sysoev.ru 
127*0Sigor@sysoev.ru #if (NXT_SIZE_T_SIZE == 8)
128*0Sigor@sysoev.ru #define NXT_SIZE_T_LEN       NXT_INT64_T_LEN
129*0Sigor@sysoev.ru #define NXT_SIZE_T_HEXLEN    NXT_INT64_T_HEXLEN
130*0Sigor@sysoev.ru #define NXT_SIZE_T_MAX       NXT_INT64_T_MAX
131*0Sigor@sysoev.ru 
132*0Sigor@sysoev.ru #else
133*0Sigor@sysoev.ru #define NXT_SIZE_T_LEN       NXT_INT32_T_LEN
134*0Sigor@sysoev.ru #define NXT_SIZE_T_HEXLEN    NXT_INT32_T_HEXLEN
135*0Sigor@sysoev.ru #define NXT_SIZE_T_MAX       NXT_INT32_T_MAX
136*0Sigor@sysoev.ru #endif
137*0Sigor@sysoev.ru 
138*0Sigor@sysoev.ru 
139*0Sigor@sysoev.ru #if (NXT_TIME_T_SIZE == 8)
140*0Sigor@sysoev.ru #define NXT_TIME_T_LEN       NXT_INT64_T_LEN
141*0Sigor@sysoev.ru #define NXT_TIME_T_HEXLEN    NXT_INT64_T_HEXLEN
142*0Sigor@sysoev.ru #define NXT_TIME_T_MAX       NXT_INT64_T_MAX
143*0Sigor@sysoev.ru 
144*0Sigor@sysoev.ru #else
145*0Sigor@sysoev.ru #define NXT_TIME_T_LEN       NXT_INT32_T_LEN
146*0Sigor@sysoev.ru #define NXT_TIME_T_HEXLEN    NXT_INT32_T_HEXLEN
147*0Sigor@sysoev.ru #define NXT_TIME_T_MAX       NXT_INT32_T_MAX
148*0Sigor@sysoev.ru #endif
149*0Sigor@sysoev.ru 
150*0Sigor@sysoev.ru 
151*0Sigor@sysoev.ru #endif /* _NXT_TYPES_H_INCLUDED_ */
152