source: trunk/xcache.h @ 1027

Last change on this file since 1027 was 1027, checked in by moo, 21 months ago

refactor: improve build, kill warning

  • Property svn:eol-style set to native
File size: 5.7 KB
Line 
1#ifndef __XCACHE_H
2#define __XCACHE_H
3#define XCACHE_NAME       "XCache"
4#ifndef XCACHE_VERSION
5#   define XCACHE_VERSION "2.1.0"
6#endif
7#define XCACHE_AUTHOR     "mOo"
8#define XCACHE_COPYRIGHT  "Copyright (c) 2005-2012"
9#define XCACHE_URL        "http://xcache.lighttpd.net"
10#define XCACHE_WIKI_URL   XCACHE_URL "/wiki"
11
12#include <php.h>
13
14#ifdef HAVE_CONFIG_H
15#include <config.h>
16#endif
17#include "xcache/xc_shm.h"
18#include "xcache/xc_lock.h"
19#include "xcache/xc_compatibility.h"
20
21#define ECALLOC_N(x, n) ((x) = ecalloc(n, sizeof((x)[0])))
22#define ECALLOC_ONE(x) ECALLOC_N(x, 1)
23
24typedef ulong xc_hash_value_t;
25typedef struct {
26    size_t bits;
27    size_t size;
28    xc_hash_value_t mask;
29} xc_hash_t;
30
31typedef zend_op_array *(zend_compile_file_t)(zend_file_handle *h, int type TSRMLS_DC);
32
33typedef struct _xc_entry_t xc_entry_t;
34typedef struct _xc_entry_data_php_t xc_entry_data_php_t;
35/* {{{ xc_cache_t */
36typedef struct {
37    int cacheid;
38    xc_hash_t  *hcache; /* hash to cacheid */
39
40    time_t     compiling;
41    zend_ulong updates;
42    zend_ulong hits;
43    zend_ulong clogs;
44    zend_ulong ooms;
45    zend_ulong errors;
46    xc_lock_t  *lck;
47    xc_shm_t   *shm; /* which shm contains us */
48    xc_mem_t   *mem; /* which mem contains us */
49
50    xc_entry_t **entries;
51    int entries_count;
52    xc_entry_data_php_t **phps;
53    int phps_count;
54    xc_entry_t *deletes;
55    int deletes_count;
56    xc_hash_t  *hentry; /* hash settings to entry */
57    xc_hash_t  *hphp;   /* hash settings to php */
58
59    time_t     last_gc_deletes;
60    time_t     last_gc_expires;
61
62    time_t     hits_by_hour_cur_time;
63    zend_uint  hits_by_hour_cur_slot;
64    zend_ulong hits_by_hour[24];
65    time_t     hits_by_second_cur_time;
66    zend_uint  hits_by_second_cur_slot;
67    zend_ulong hits_by_second[5];
68} xc_cache_t;
69/* }}} */
70/* {{{ xc_op_array_info_detail_t */
71typedef struct {
72    zend_uint index;
73    zend_uint info;
74} xc_op_array_info_detail_t;
75/* }}} */
76/* {{{ xc_op_array_info_t */
77typedef struct {
78#ifdef ZEND_ENGINE_2_4
79    zend_uint literalinfo_cnt;
80    xc_op_array_info_detail_t *literalinfos;
81#else
82    zend_uint oplineinfo_cnt;
83    xc_op_array_info_detail_t *oplineinfos;
84#endif
85} xc_op_array_info_t;
86/* }}} */
87/* {{{ xc_classinfo_t */
88typedef struct {
89#ifdef IS_UNICODE
90    zend_uchar   type;
91#endif
92    const24_zstr key;
93    zend_uint    key_size;
94    ulong        h;
95    zend_uint  methodinfo_cnt;
96    xc_op_array_info_t *methodinfos;
97    xc_cest_t    cest;
98#ifndef ZEND_COMPILE_DELAYED_BINDING
99    int          oplineno;
100#endif
101} xc_classinfo_t;
102/* }}} */
103#ifdef HAVE_XCACHE_CONSTANT
104/* {{{ xc_constinfo_t */
105typedef struct {
106#ifdef IS_UNICODE
107    zend_uchar    type;
108#endif
109    const24_zstr  key;
110    zend_uint     key_size;
111    ulong         h;
112    zend_constant constant;
113} xc_constinfo_t;
114/* }}} */
115#endif
116/* {{{ xc_funcinfo_t */
117typedef struct {
118#ifdef IS_UNICODE
119    zend_uchar     type;
120#endif
121    const24_zstr   key;
122    zend_uint      key_size;
123    ulong          h;
124    xc_op_array_info_t op_array_info;
125    zend_function func;
126} xc_funcinfo_t;
127/* }}} */
128#ifdef ZEND_ENGINE_2_1
129/* {{{ xc_autoglobal_t */
130typedef struct {
131#ifdef IS_UNICODE
132    zend_uchar   type;
133#endif
134    const24_zstr key;
135    zend_uint    key_len;
136    ulong        h;
137} xc_autoglobal_t;
138/* }}} */
139#endif
140typedef struct {
141    char digest[16];
142} xc_md5sum_t;
143/* {{{ xc_compilererror_t */
144typedef struct {
145    int type;
146    uint lineno;
147    int error_len;
148    char *error;
149} xc_compilererror_t;
150/* }}} */
151/* {{{ xc_entry_data_php_t */
152struct _xc_entry_data_php_t {
153    xc_entry_data_php_t *next;
154    xc_hash_value_t      hvalue;
155
156    xc_md5sum_t md5;        /* md5sum of the source */
157    zend_ulong  refcount;   /* count of entries referencing to this data */
158
159    zend_ulong hits;        /* hits of this php */
160    size_t     size;
161
162    xc_op_array_info_t op_array_info;
163    zend_op_array *op_array;
164
165#ifdef HAVE_XCACHE_CONSTANT
166    zend_uint constinfo_cnt;
167    xc_constinfo_t *constinfos;
168#endif
169
170    zend_uint funcinfo_cnt;
171    xc_funcinfo_t *funcinfos;
172
173    zend_uint classinfo_cnt;
174    xc_classinfo_t *classinfos;
175#ifndef ZEND_COMPILE_DELAYED_BINDING
176    zend_bool have_early_binding;
177#endif
178
179#ifdef ZEND_ENGINE_2_1
180    zend_uint autoglobal_cnt;
181    xc_autoglobal_t *autoglobals;
182#endif
183
184#ifdef E_STRICT
185    zend_uint compilererror_cnt;
186    xc_compilererror_t *compilererrors;
187#endif
188
189    zend_bool  have_references;
190};
191/* }}} */
192typedef zvalue_value xc_entry_name_t;
193/* {{{ xc_entry_t */
194struct _xc_entry_t {
195    xc_entry_t *next;
196
197    size_t     size;
198    time_t     ctime;           /* creation ctime of this entry */
199    time_t     atime;           /*   access atime of this entry */
200    time_t     dtime;           /*  deletion time of this entry */
201    zend_ulong hits;
202    zend_ulong ttl;
203
204    xc_entry_name_t name;
205};
206
207typedef struct {
208    xc_entry_t entry;
209    xc_entry_data_php_t *php;
210
211    zend_ulong refcount;    /* count of php instances holding this entry */
212    time_t file_mtime;
213    size_t file_size;
214    int file_device;
215    int file_inode;
216
217    int    filepath_len;
218    ZEND_24(NOTHING, const) char *filepath;
219    int    dirpath_len;
220    char  *dirpath;
221#ifdef IS_UNICODE
222    int    ufilepath_len;
223    UChar *ufilepath;
224    int    udirpath_len;
225    UChar *udirpath;
226#endif
227} xc_entry_php_t;
228
229typedef struct {
230    xc_entry_t entry;
231#ifdef IS_UNICODE
232    zend_uchar name_type;
233#endif
234    zval      *value;
235    zend_bool  have_references;
236} xc_entry_var_t;
237/* }}} */
238typedef struct xc_entry_hash_t { /* {{{ */
239    xc_hash_value_t cacheid;
240    xc_hash_value_t entryslotid;
241} xc_entry_hash_t;
242/* }}} */
243
244extern zend_module_entry xcache_module_entry;
245#define phpext_xcache_ptr &xcache_module_entry
246
247int xc_is_rw(const void *p);
248int xc_is_ro(const void *p);
249int xc_is_shm(const void *p);
250/* {{{ xc_gc_op_array_t */
251typedef struct {
252#ifdef ZEND_ENGINE_2
253    zend_uint num_args;
254    zend_arg_info *arg_info;
255#endif
256    zend_op *opcodes;
257} xc_gc_op_array_t;
258/* }}} */
259void xc_gc_add_op_array(xc_gc_op_array_t *gc_op_array TSRMLS_DC);
260void xc_fix_op_array_info(const xc_entry_php_t *xce, const xc_entry_data_php_t *php, zend_op_array *op_array, int shallow_copy, const xc_op_array_info_t *op_array_info TSRMLS_DC);
261
262#endif /* __XCACHE_H */
Note: See TracBrowser for help on using the repository browser.