BLOG | DOCUMENTATION | TRAC

Home --> Documentations --> PJLIB Reference

pool_alt.h
1 /* $Id: pool_alt.h 5061 2015-04-10 13:19:47Z riza $ */
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_POOL_ALT_H__
21 #define __PJ_POOL_ALT_H__
22 
23 #define __PJ_POOL_H__
24 
26 
33 typedef void pj_pool_callback(pj_pool_t *pool, pj_size_t size);
34 
36 {
37  struct pj_pool_mem *next;
38 
39  /* data follows immediately */
40 };
41 
42 
43 struct pj_pool_t
44 {
45  struct pj_pool_mem *first_mem;
47  char obj_name[32];
48  pj_size_t used_size;
49  pj_pool_callback *cb;
50 };
51 
52 
53 #define PJ_POOL_SIZE (sizeof(struct pj_pool_t))
54 
59 extern int PJ_NO_MEMORY_EXCEPTION;
60 
61 
62 
63 /*
64  * Declare all pool API as macro that calls the implementation
65  * function.
66  */
67 #define pj_pool_create(fc,nm,init,inc,cb) \
68  pj_pool_create_imp(__FILE__, __LINE__, fc, nm, init, inc, cb)
69 
70 #define pj_pool_release(pool) pj_pool_release_imp(pool)
71 #define pj_pool_getobjname(pool) pj_pool_getobjname_imp(pool)
72 #define pj_pool_reset(pool) pj_pool_reset_imp(pool)
73 #define pj_pool_get_capacity(pool) pj_pool_get_capacity_imp(pool)
74 #define pj_pool_get_used_size(pool) pj_pool_get_used_size_imp(pool)
75 #define pj_pool_alloc(pool,sz) \
76  pj_pool_alloc_imp(__FILE__, __LINE__, pool, sz)
77 
78 #define pj_pool_calloc(pool,cnt,elem) \
79  pj_pool_calloc_imp(__FILE__, __LINE__, pool, cnt, elem)
80 
81 #define pj_pool_zalloc(pool,sz) \
82  pj_pool_zalloc_imp(__FILE__, __LINE__, pool, sz)
83 
84 
85 
86 /*
87  * Declare prototypes for pool implementation API.
88  */
89 
90 /* Create pool */
91 PJ_DECL(pj_pool_t*) pj_pool_create_imp(const char *file, int line,
92  void *factory,
93  const char *name,
94  pj_size_t initial_size,
95  pj_size_t increment_size,
96  pj_pool_callback *callback);
97 
98 /* Release pool */
99 PJ_DECL(void) pj_pool_release_imp(pj_pool_t *pool);
100 
101 /* Get pool name */
102 PJ_DECL(const char*) pj_pool_getobjname_imp(pj_pool_t *pool);
103 
104 /* Reset pool */
105 PJ_DECL(void) pj_pool_reset_imp(pj_pool_t *pool);
106 
107 /* Get capacity */
108 PJ_DECL(pj_size_t) pj_pool_get_capacity_imp(pj_pool_t *pool);
109 
110 /* Get total used size */
111 PJ_DECL(pj_size_t) pj_pool_get_used_size_imp(pj_pool_t *pool);
112 
113 /* Allocate memory from the pool */
114 PJ_DECL(void*) pj_pool_alloc_imp(const char *file, int line,
115  pj_pool_t *pool, pj_size_t sz);
116 
117 /* Allocate memory from the pool and zero the memory */
118 PJ_DECL(void*) pj_pool_calloc_imp(const char *file, int line,
119  pj_pool_t *pool, unsigned cnt,
120  unsigned elemsz);
121 
122 /* Allocate memory from the pool and zero the memory */
123 PJ_DECL(void*) pj_pool_zalloc_imp(const char *file, int line,
124  pj_pool_t *pool, pj_size_t sz);
125 
126 
127 #define PJ_POOL_ZALLOC_T(pool,type) \
128  ((type*)pj_pool_zalloc(pool, sizeof(type)))
129 #define PJ_POOL_ALLOC_T(pool,type) \
130  ((type*)pj_pool_alloc(pool, sizeof(type)))
131 #ifndef PJ_POOL_ALIGNMENT
132 # define PJ_POOL_ALIGNMENT 4
133 #endif
134 
138 typedef struct pj_pool_factory_policy
139 {
149  void* (*block_alloc)(pj_pool_factory *factory, pj_size_t size);
150 
158  void (*block_free)(pj_pool_factory *factory, void *mem, pj_size_t size);
159 
164 
168  unsigned flags;
169 
171 
172 struct pj_pool_factory
173 {
175  int dummy;
176 };
177 
178 struct pj_caching_pool
179 {
181 
182  /* just to make it compilable */
183  unsigned used_count;
184  unsigned used_size;
185  unsigned peak_used_size;
186 };
187 
188 /* just to make it compilable */
189 typedef struct pj_pool_block
190 {
191  int dummy;
192 } pj_pool_block;
193 
194 #define pj_caching_pool_init( cp, pol, mac)
195 #define pj_caching_pool_destroy(cp)
196 #define pj_pool_factory_dump(pf, detail)
197 
199 
200 #endif /* __PJ_POOL_ALT_H__ */
201 
Definition: pool.h:808
pj_pool_factory_policy policy
Definition: pool.h:656
Definition: pool_alt.h:35
pj_size_t used_count
Definition: pool.h:833
Definition: pool.h:651
pj_pool_factory factory
Definition: pool.h:811
int PJ_NO_MEMORY_EXCEPTION
Definition: pool.h:621
#define PJ_END_DECL
Definition: config.h:1096
Definition: pool.h:300
#define PJ_BEGIN_DECL
Definition: config.h:1095
Definition: pool.h:313
Definition: pool.h:580
unsigned flags
Definition: pool.h:610
char obj_name[PJ_MAX_OBJ_NAME]
Definition: pool.h:318
void pj_pool_callback(pj_pool_t *pool, pj_size_t size)
Definition: pool.h:294
pj_size_t used_size
Definition: pool.h:838
void(* block_free)(pj_pool_factory *factory, void *mem, pj_size_t size)
Definition: pool.h:600
pj_pool_callback * callback
Definition: pool.h:605
pj_size_t peak_used_size
Definition: pool.h:844
size_t pj_size_t
Definition: types.h:58
pj_pool_factory * factory
Definition: pool.h:321

 


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