Resource and persistent handle factory API
A facility to manage possibly persistent resources with a comprehensible API. Provides simliar functionality like the zend_list API, but with more flexiblity and freedom.
php_raphf.h
Go to the documentation of this file.
1 /*
2  +--------------------------------------------------------------------+
3  | PECL :: raphf |
4  +--------------------------------------------------------------------+
5  | Redistribution and use in source and binary forms, with or without |
6  | modification, are permitted provided that the conditions mentioned |
7  | in the accompanying LICENSE file are met. |
8  +--------------------------------------------------------------------+
9  | Copyright (c) 2013, Michael Wallner <mike@php.net> |
10  +--------------------------------------------------------------------+
11 */
12 
13 #ifndef PHP_RAPHF_H
14 #define PHP_RAPHF_H
15 
16 #ifndef DOXYGEN
17 
18 extern zend_module_entry raphf_module_entry;
19 #define phpext_raphf_ptr &raphf_module_entry
20 
21 #define PHP_RAPHF_VERSION "1.1.0"
22 
23 #ifdef PHP_WIN32
24 # define PHP_RAPHF_API __declspec(dllexport)
25 #elif defined(__GNUC__) && __GNUC__ >= 4
26 # define PHP_RAPHF_API extern __attribute__ ((visibility("default")))
27 #else
28 # define PHP_RAPHF_API extern
29 #endif
30 
31 #ifdef ZTS
32 # include "TSRM.h"
33 #endif
34 
35 #endif
36 
44 typedef void *(*php_resource_factory_handle_ctor_t)(void *opaque,
45  void *init_arg TSRMLS_DC);
46 
53 typedef void *(*php_resource_factory_handle_copy_t)(void *opaque,
54  void *handle TSRMLS_DC);
55 
62 typedef void (*php_resource_factory_handle_dtor_t)(void *opaque,
63  void *handle TSRMLS_DC);
64 
71 typedef struct php_resource_factory_ops {
79 
83 typedef struct php_resource_factory {
87  void *data;
89  void (*dtor)(void *data);
91  unsigned refcount;
93 
110  void (*dtor)(void *data));
111 
118 PHP_RAPHF_API unsigned php_resource_factory_addref(php_resource_factory_t *rf);
119 
128 
137 PHP_RAPHF_API void php_resource_factory_free(php_resource_factory_t **f);
138 
147  void *init_arg TSRMLS_DC);
148 
157  void *handle TSRMLS_DC);
158 
166  void *handle TSRMLS_DC);
167 
173  HashTable free;
175  ulong used;
177 
189 
196 
198 
203  php_persistent_handle_factory_t *f, void **handle TSRMLS_DC);
208  php_persistent_handle_factory_t *f, void **handle TSRMLS_DC);
209 
224 
226  struct {
228  char *str;
230  size_t len;
231  } ident;
232 
234  unsigned free_on_abandon:1;
235 };
236 
257 PHP_RAPHF_API int /* SUCCESS|FAILURE */ php_persistent_handle_provide(
258  const char *name_str, size_t name_len, php_resource_factory_ops_t *fops,
259  void *data, void (*dtor)(void *) TSRMLS_DC);
260 
281  php_persistent_handle_factory_t *a, const char *name_str,
282  size_t name_len, const char *ident_str, size_t ident_len,
284  php_persistent_handle_retire_t retire TSRMLS_DC);
285 
295 PHP_RAPHF_API void php_persistent_handle_abandon(
297 
311 PHP_RAPHF_API void *php_persistent_handle_acquire(
312  php_persistent_handle_factory_t *a, void *init_arg TSRMLS_DC);
313 
327 PHP_RAPHF_API void php_persistent_handle_release(
328  php_persistent_handle_factory_t *a, void *handle TSRMLS_DC);
329 
338 PHP_RAPHF_API void *php_persistent_handle_accrete(
339  php_persistent_handle_factory_t *a, void *handle TSRMLS_DC);
340 
373 PHP_RAPHF_API php_resource_factory_ops_t *
375 
385 PHP_RAPHF_API php_resource_factory_t *
388 
394 PHP_RAPHF_API zend_bool php_resource_factory_is_persistent(
396 
421 PHP_RAPHF_API void php_persistent_handle_cleanup(const char *name_str,
422  size_t name_len, const char *ident_str, size_t ident_len TSRMLS_DC);
423 
439 PHP_RAPHF_API HashTable *php_persistent_handle_statall(HashTable *ht TSRMLS_DC);
440 
441 #endif /* PHP_RAPHF_H */
442 
443 
444 /*
445  * Local variables:
446  * tab-width: 4
447  * c-basic-offset: 4
448  * End:
449  * vim600: noet sw=4 ts=4 fdm=marker
450  * vim<600: noet sw=4 ts=4
451  */
void(* dtor)(void *data)
User data destructor.
Definition: php_raphf.h:89
void * data
Opaque user data.
Definition: php_raphf.h:87
php_resource_factory_handle_copy_t copy
The resource's copy constructor.
Definition: php_raphf.h:75
ulong used
Count of acquired resources.
Definition: php_raphf.h:175
php_persistent_handle_list_t list
The list of free handles.
Definition: php_raphf.h:188
void php_resource_factory_free(php_resource_factory_t **f)
Destroy and free the resource factory.
void(* php_persistent_handle_retire_t)(php_persistent_handle_factory_t *f, void **handle)
Retire the persistent handle on release.
Definition: php_raphf.h:207
void *(* php_resource_factory_handle_ctor_t)(void *opaque, void *init_arg)
A resource constructor.
Definition: php_raphf.h:44
php_resource_factory_handle_dtor_t dtor
The resource's destructor.
Definition: php_raphf.h:77
zend_bool php_resource_factory_is_persistent(php_resource_factory_t *a)
Check whether a resource factory is a persistent handle resource factory.
php_persistent_handle_factory_t * php_persistent_handle_concede(php_persistent_handle_factory_t *a, const char *name_str, size_t name_len, const char *ident_str, size_t ident_len, php_persistent_handle_wakeup_t wakeup, php_persistent_handle_retire_t retire)
Retrieve a persistent handle factory at runtime.
unsigned php_resource_factory_addref(php_resource_factory_t *rf)
Increase the refcount of the resource factory.
php_resource_factory_t * php_resource_factory_init(php_resource_factory_t *f, php_resource_factory_ops_t *fops, void *data, void(*dtor)(void *data))
Initialize a resource factory.
void php_persistent_handle_release(php_persistent_handle_factory_t *a, void *handle)
Release a persistent handle.
The resource ops consisting of a ctor, a copy ctor and a dtor.
Definition: php_raphf.h:71
unsigned refcount
How often this factory is referenced.
Definition: php_raphf.h:91
void php_resource_factory_handle_dtor(php_resource_factory_t *f, void *handle)
Destroy (and free) the resource.
struct php_resource_factory_ops php_resource_factory_ops_t
The resource ops consisting of a ctor, a copy ctor and a dtor.
void php_resource_factory_dtor(php_resource_factory_t *f)
Destroy the resource factory.
void *(* php_resource_factory_handle_copy_t)(void *opaque, void *handle)
The copy constructor of a resource.
Definition: php_raphf.h:53
Persistent handles storage.
Definition: php_raphf.h:171
php_persistent_handle_retire_t retire
The persistent handle retire routine; may be NULL.
Definition: php_raphf.h:223
HashTable * php_persistent_handle_statall(HashTable *ht)
Retrieve statistics about the current process/thread's persistent handles.
HashTable free
Storage of free resources.
Definition: php_raphf.h:173
Definition of a persistent handle factory.
Definition: php_raphf.h:217
void(* php_resource_factory_handle_dtor_t)(void *opaque, void *handle)
The destructor of a resource.
Definition: php_raphf.h:62
php_resource_factory_t * php_persistent_handle_resource_factory_init(php_resource_factory_t *a, php_persistent_handle_factory_t *pf)
Create a resource factory for persistent handles.
Definition of a persistent handle provider.
Definition: php_raphf.h:182
struct php_resource_factory php_resource_factory_t
The resource factory.
php_persistent_handle_provider_t * provider
The persistent handle provider.
Definition: php_raphf.h:219
void(* php_persistent_handle_wakeup_t)(php_persistent_handle_factory_t *f, void **handle)
Wakeup the persistent handle on re-acquisition.
Definition: php_raphf.h:202
void * php_resource_factory_handle_copy(php_resource_factory_t *f, void *handle)
Create a copy of the resource handle.
php_resource_factory_t rf
The resource factory.
Definition: php_raphf.h:194
void * php_persistent_handle_accrete(php_persistent_handle_factory_t *a, void *handle)
Copy a persistent handle.
struct php_persistent_handle_provider php_persistent_handle_provider_t
Definition of a persistent handle provider.
php_resource_factory_handle_ctor_t ctor
The resource constructor.
Definition: php_raphf.h:73
void * php_persistent_handle_acquire(php_persistent_handle_factory_t *a, void *init_arg)
Acquire a persistent handle.
void * php_resource_factory_handle_ctor(php_resource_factory_t *f, void *init_arg)
Construct a resource by the resource factory f.
The resource factory.
Definition: php_raphf.h:83
php_resource_factory_ops_t * php_persistent_handle_get_resource_factory_ops(void)
Retrieve persistent handle resource factory ops.
struct php_persistent_handle_list php_persistent_handle_list_t
Persistent handles storage.
void php_persistent_handle_cleanup(const char *name_str, size_t name_len, const char *ident_str, size_t ident_len)
Clean persistent handles up.
int php_persistent_handle_provide(const char *name_str, size_t name_len, php_resource_factory_ops_t *fops, void *data, void(*dtor)(void *))
Register a persistent handle provider in MINIT.
void php_persistent_handle_abandon(php_persistent_handle_factory_t *a)
Abandon the persistent handle factory.
unsigned free_on_abandon
Whether it has to be free'd on php_persistent_handle_abandon()
Definition: php_raphf.h:234
php_resource_factory_ops_t fops
The resource ops.
Definition: php_raphf.h:85
struct php_persistent_handle_factory::@0 ident
The ident for which this factory manages resources.
php_persistent_handle_wakeup_t wakeup
The persistent handle wakeup routine; may be NULL.
Definition: php_raphf.h:221