1: /*
2: +----------------------------------------------------------------------+
3: | Zend Engine |
4: +----------------------------------------------------------------------+
5: | Copyright (c) 1998-2012 Zend Technologies Ltd. (http://www.zend.com) |
6: +----------------------------------------------------------------------+
7: | This source file is subject to version 2.00 of the Zend license, |
8: | that is bundled with this package in the file LICENSE, and is |
9: | available through the world-wide-web at the following url: |
10: | http://www.zend.com/license/2_00.txt. |
11: | If you did not receive a copy of the Zend license and are unable to |
12: | obtain it through the world-wide-web, please send a note to |
13: | license@zend.com so we can mail you a copy immediately. |
14: +----------------------------------------------------------------------+
15: | Authors: Dmitry Stogov <dmitry@zend.com> |
16: +----------------------------------------------------------------------+
17: */
18:
19: /* $Id: zend_string.h,v 1.1.1.1 2012/05/29 12:34:36 misho Exp $ */
20:
21: #ifndef ZEND_STRING_H
22: #define ZEND_STRING_H
23:
24: #include "zend.h"
25:
26: ZEND_API extern const char *(*zend_new_interned_string)(const char *str, int len, int free_src TSRMLS_DC);
27: ZEND_API extern void (*zend_interned_strings_snapshot)(TSRMLS_D);
28: ZEND_API extern void (*zend_interned_strings_restore)(TSRMLS_D);
29:
30: void zend_interned_strings_init(TSRMLS_D);
31: void zend_interned_strings_dtor(TSRMLS_D);
32:
33: #ifndef ZTS
34:
35: #define IS_INTERNED(s) \
36: (((s) >= CG(interned_strings_start)) && ((s) < CG(interned_strings_end)))
37:
38: #else
39:
40: #define IS_INTERNED(s) \
41: (0)
42:
43: #endif
44:
45: #define INTERNED_LEN(s) \
46: (((Bucket*)(((char*)(s))-sizeof(Bucket)))->nKeyLength)
47:
48: #define INTERNED_HASH(s) \
49: (((Bucket*)(((char*)(s))-sizeof(Bucket)))->h)
50:
51: #define str_efree(s) do { \
52: if (!IS_INTERNED(s)) { \
53: efree((char*)s); \
54: } \
55: } while (0)
56:
57: #define str_free(s) do { \
58: if (!IS_INTERNED(s)) { \
59: free((char*)s); \
60: } \
61: } while (0)
62:
63: #endif /* ZEND_STRING_H */
64:
65: /*
66: * Local variables:
67: * tab-width: 4
68: * c-basic-offset: 4
69: * indent-tabs-mode: t
70: * End:
71: */
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>