BLOG | DOCUMENTATION | TRAC

Home --> Documentations --> PJLIB Reference

types.h
Go to the documentation of this file.
1 /* $Id: types.h 4359 2013-02-21 11:18:36Z bennylp $ */
2 /*
3  * Copyright (C) 2008-2011 Teluu Inc. (http://www.teluu.com)
4  * Copyright (C) 2003-2008 Benny Prijono <benny@prijono.org>
5  *
6  * This program is free software; you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License as published by
8  * the Free Software Foundation; either version 2 of the License, or
9  * (at your option) any later version.
10  *
11  * This program is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14  * GNU General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License
17  * along with this program; if not, write to the Free Software
18  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
19  */
20 #ifndef __PJ_TYPES_H__
21 #define __PJ_TYPES_H__
22 
23 
33 #include <pj/config.h>
34 
36 
37 /* ************************************************************************* */
38 
40 typedef int pj_int32_t;
41 
43 typedef unsigned int pj_uint32_t;
44 
46 typedef short pj_int16_t;
47 
49 typedef unsigned short pj_uint16_t;
50 
52 typedef signed char pj_int8_t;
53 
55 typedef unsigned char pj_uint8_t;
56 
58 typedef size_t pj_size_t;
59 
61 typedef long pj_ssize_t;
62 
64 typedef int pj_status_t;
65 
67 typedef int pj_bool_t;
68 
71 #if defined(PJ_NATIVE_STRING_IS_UNICODE) && PJ_NATIVE_STRING_IS_UNICODE!=0
72  typedef wchar_t pj_char_t;
73 #else
74  typedef char pj_char_t;
75 #endif
76 
79 #if defined(PJ_NATIVE_STRING_IS_UNICODE) && PJ_NATIVE_STRING_IS_UNICODE!=0
80 # define PJ_T(literal_str) L##literal_str
81 #else
82 # define PJ_T(literal_str) literal_str
83 #endif
84 
85 
87 #define PJ_SUCCESS 0
88 
90 #define PJ_TRUE 1
91 
93 #define PJ_FALSE 0
94 
98 #if defined(PJ_HAS_INT64) && PJ_HAS_INT64!=0
99 typedef pj_int64_t pj_off_t;
100 #else
102 #endif
103 
104 /* ************************************************************************* */
105 /*
106  * Data structure types.
107  */
112 struct pj_str_t
113 {
115  char *ptr;
116 
119 };
120 
126 typedef union pj_timestamp
127 {
128  struct
129  {
130 #if defined(PJ_IS_LITTLE_ENDIAN) && PJ_IS_LITTLE_ENDIAN!=0
131  pj_uint32_t lo;
132  pj_uint32_t hi;
133 #else
136 #endif
137  } u32;
139 #if PJ_HAS_INT64
140  pj_uint64_t u64;
141 #endif
142 } pj_timestamp;
143 
144 
145 
150 typedef void pj_list_type;
151 
155 typedef struct pj_list pj_list;
156 
161 
166 
172 typedef struct pj_hash_iterator_t
173 {
177 
178 
182 typedef struct pj_pool_factory pj_pool_factory;
183 
187 typedef struct pj_pool_t pj_pool_t;
188 
192 typedef struct pj_caching_pool pj_caching_pool;
193 
198 typedef struct pj_str_t pj_str_t;
199 
203 typedef struct pj_ioqueue_t pj_ioqueue_t;
204 
210 
215 
219 typedef struct pj_atomic_t pj_atomic_t;
220 
224 typedef PJ_ATOMIC_VALUE_TYPE pj_atomic_value_t;
225 
226 /* ************************************************************************* */
227 
229 typedef struct pj_thread_t pj_thread_t;
230 
232 typedef struct pj_lock_t pj_lock_t;
233 
236 
238 typedef struct pj_mutex_t pj_mutex_t;
239 
241 typedef struct pj_sem_t pj_sem_t;
242 
244 typedef struct pj_event_t pj_event_t;
245 
247 typedef struct pj_pipe_t pj_pipe_t;
248 
250 typedef void *pj_oshandle_t;
251 
253 typedef long pj_sock_t;
254 
256 typedef void pj_sockaddr_t;
257 
259 typedef struct pj_sockaddr_in pj_sockaddr_in;
260 
262 typedef unsigned int pj_color_t;
263 
265 typedef int pj_exception_id_t;
266 
267 /* ************************************************************************* */
268 
270 #define PJ_ARRAY_SIZE(a) (sizeof(a)/sizeof(a[0]))
271 
273 #define PJ_MAXINT32 0x7FFFFFFFL
274 
278 #define PJ_MAX_OBJ_NAME 32
279 
280 /* ************************************************************************* */
281 /*
282  * General.
283  */
296 PJ_DECL(pj_status_t) pj_init(void);
297 
298 
302 PJ_DECL(void) pj_shutdown(void);
303 
307 typedef void (*pj_exit_callback)(void);
308 
317 PJ_DECL(pj_status_t) pj_atexit(pj_exit_callback func);
318 
319 
320 
329 {
330  pj_uint8_t *p = (pj_uint8_t*)&val16;
331  pj_uint8_t tmp = *p;
332  *p = *(p+1);
333  *(p+1) = tmp;
334  return val16;
335 }
336 
345 {
346  pj_uint8_t *p = (pj_uint8_t*)&val32;
347  pj_uint8_t tmp = *p;
348  *p = *(p+3);
349  *(p+3) = tmp;
350  tmp = *(p+1);
351  *(p+1) = *(p+2);
352  *(p+2) = tmp;
353  return val32;
354 }
355 
356 
371 typedef struct pj_time_val
372 {
374  long sec;
375 
377  long msec;
378 
379 } pj_time_val;
380 
385 PJ_DECL(void) pj_time_val_normalize(pj_time_val *t);
386 
396 #define PJ_TIME_VAL_MSEC(t) ((t).sec * 1000 + (t).msec)
397 
406 #define PJ_TIME_VAL_EQ(t1, t2) ((t1).sec==(t2).sec && (t1).msec==(t2).msec)
407 
416 #define PJ_TIME_VAL_GT(t1, t2) ((t1).sec>(t2).sec || \
417  ((t1).sec==(t2).sec && (t1).msec>(t2).msec))
418 
427 #define PJ_TIME_VAL_GTE(t1, t2) (PJ_TIME_VAL_GT(t1,t2) || \
428  PJ_TIME_VAL_EQ(t1,t2))
429 
438 #define PJ_TIME_VAL_LT(t1, t2) (!(PJ_TIME_VAL_GTE(t1,t2)))
439 
448 #define PJ_TIME_VAL_LTE(t1, t2) (!PJ_TIME_VAL_GT(t1, t2))
449 
458 #define PJ_TIME_VAL_ADD(t1, t2) do { \
459  (t1).sec += (t2).sec; \
460  (t1).msec += (t2).msec; \
461  pj_time_val_normalize(&(t1)); \
462  } while (0)
463 
464 
473 #define PJ_TIME_VAL_SUB(t1, t2) do { \
474  (t1).sec -= (t2).sec; \
475  (t1).msec -= (t2).msec; \
476  pj_time_val_normalize(&(t1)); \
477  } while (0)
478 
479 
484 typedef struct pj_parsed_time
485 {
487  int wday;
488 
489  /* This represents day of the year, 0-365, where zero means
490  * 1st of January.
491  */
492  /*int yday; */
493 
495  int day;
496 
498  int mon;
499 
503  int year;
504 
506  int sec;
507 
509  int min;
510 
512  int hour;
513 
515  int msec;
516 
518 
519 
524 /* ************************************************************************* */
525 /*
526  * Terminal.
527  */
531 enum {
536 };
537 
538 
539 
540 
542 
543 
544 #endif /* __PJ_TYPES_H__ */
545 

 


PJLIB Open Source, high performance, small footprint, and very very portable framework
Copyright (C) 2006-2009 Teluu Inc.