Annotation of embedaddon/php/Zend/zend_objects_API.h, revision 1.1.1.1
1.1 misho 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: Andi Gutmans <andi@zend.com> |
16: | Zeev Suraski <zeev@zend.com> |
17: +----------------------------------------------------------------------+
18: */
19:
20: /* $Id: zend_objects_API.h 321634 2012-01-01 13:15:04Z felipe $ */
21:
22: #ifndef ZEND_OBJECTS_API_H
23: #define ZEND_OBJECTS_API_H
24:
25: #include "zend.h"
26:
27: typedef void (*zend_objects_store_dtor_t)(void *object, zend_object_handle handle TSRMLS_DC);
28: typedef void (*zend_objects_free_object_storage_t)(void *object TSRMLS_DC);
29: typedef void (*zend_objects_store_clone_t)(void *object, void **object_clone TSRMLS_DC);
30:
31: typedef struct _zend_object_store_bucket {
32: zend_bool destructor_called;
33: zend_bool valid;
34: union _store_bucket {
35: struct _store_object {
36: void *object;
37: zend_objects_store_dtor_t dtor;
38: zend_objects_free_object_storage_t free_storage;
39: zend_objects_store_clone_t clone;
40: const zend_object_handlers *handlers;
41: zend_uint refcount;
42: gc_root_buffer *buffered;
43: } obj;
44: struct {
45: int next;
46: } free_list;
47: } bucket;
48: } zend_object_store_bucket;
49:
50: typedef struct _zend_objects_store {
51: zend_object_store_bucket *object_buckets;
52: zend_uint top;
53: zend_uint size;
54: int free_list_head;
55: } zend_objects_store;
56:
57: /* Global store handling functions */
58: BEGIN_EXTERN_C()
59: ZEND_API void zend_objects_store_init(zend_objects_store *objects, zend_uint init_size);
60: ZEND_API void zend_objects_store_call_destructors(zend_objects_store *objects TSRMLS_DC);
61: ZEND_API void zend_objects_store_mark_destructed(zend_objects_store *objects TSRMLS_DC);
62: ZEND_API void zend_objects_store_destroy(zend_objects_store *objects);
63:
64: /* Store API functions */
65: ZEND_API zend_object_handle zend_objects_store_put(void *object, zend_objects_store_dtor_t dtor, zend_objects_free_object_storage_t storage, zend_objects_store_clone_t clone TSRMLS_DC);
66:
67: ZEND_API void zend_objects_store_add_ref(zval *object TSRMLS_DC);
68: ZEND_API void zend_objects_store_del_ref(zval *object TSRMLS_DC);
69: ZEND_API void zend_objects_store_add_ref_by_handle(zend_object_handle handle TSRMLS_DC);
70: ZEND_API void zend_objects_store_del_ref_by_handle_ex(zend_object_handle handle, const zend_object_handlers *handlers TSRMLS_DC);
71: static inline void zend_objects_store_del_ref_by_handle(zend_object_handle handle TSRMLS_DC) {
72: zend_objects_store_del_ref_by_handle_ex(handle, NULL TSRMLS_CC);
73: }
74: ZEND_API zend_uint zend_objects_store_get_refcount(zval *object TSRMLS_DC);
75: ZEND_API zend_object_value zend_objects_store_clone_obj(zval *object TSRMLS_DC);
76: ZEND_API void *zend_object_store_get_object(const zval *object TSRMLS_DC);
77: ZEND_API void *zend_object_store_get_object_by_handle(zend_object_handle handle TSRMLS_DC);
78: /* See comment in zend_objects_API.c before you use this */
79: ZEND_API void zend_object_store_set_object(zval *zobject, void *object TSRMLS_DC);
80: ZEND_API void zend_object_store_ctor_failed(zval *zobject TSRMLS_DC);
81:
82: ZEND_API void zend_objects_store_free_object_storage(zend_objects_store *objects TSRMLS_DC);
83:
84: #define ZEND_OBJECTS_STORE_HANDLERS zend_objects_store_add_ref, zend_objects_store_del_ref, zend_objects_store_clone_obj
85:
86: ZEND_API zval *zend_object_create_proxy(zval *object, zval *member TSRMLS_DC);
87:
88: ZEND_API zend_object_handlers *zend_get_std_object_handlers(void);
89: END_EXTERN_C()
90:
91: #endif /* ZEND_OBJECTS_H */
92:
93: /*
94: * Local variables:
95: * tab-width: 4
96: * c-basic-offset: 4
97: * indent-tabs-mode: t
98: * End:
99: */
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>