X-Git-Url: https://git.m6w6.name/?a=blobdiff_plain;f=php_raphf.h;h=2c356ec940ff83234165734615543cee96c67af3;hb=a8ac64570a2287dec91756bdfef3ee351842727d;hp=b75c737128743dbe069eabf3f35e8cfba12f86a1;hpb=216a8cea4f9fb1424acafe98701d4ae09da4c02d;p=m6w6%2Fext-raphf diff --git a/php_raphf.h b/php_raphf.h index b75c737..2c356ec 100644 --- a/php_raphf.h +++ b/php_raphf.h @@ -10,15 +10,13 @@ +--------------------------------------------------------------------+ */ -/* $Id$ */ - #ifndef PHP_RAPHF_H #define PHP_RAPHF_H extern zend_module_entry raphf_module_entry; #define phpext_raphf_ptr &raphf_module_entry -#define PHP_RAPHF_VERSION "1.0.0dev" +#define PHP_RAPHF_VERSION "0.1.0" #ifdef PHP_WIN32 # define PHP_RAPHF_API __declspec(dllexport) @@ -60,8 +58,26 @@ PHP_RAPHF_API void *php_resource_factory_handle_ctor(php_resource_factory_t *f, PHP_RAPHF_API void *php_resource_factory_handle_copy(php_resource_factory_t *f, void *handle TSRMLS_DC); PHP_RAPHF_API void php_resource_factory_handle_dtor(php_resource_factory_t *f, void *handle TSRMLS_DC); -typedef struct php_persistent_handle_factory { - void *provider; +typedef struct php_persistent_handle_list { + HashTable free; + ulong used; +} php_persistent_handle_list_t; + +typedef struct php_persistent_handle_provider { + php_persistent_handle_list_t list; /* "ident" => array(handles) entries */ + php_resource_factory_t rf; +} php_persistent_handle_provider_t; + +typedef struct php_persistent_handle_factory php_persistent_handle_factory_t; + +typedef void (*php_persistent_handle_wakeup_t)(php_persistent_handle_factory_t *f, void **handle TSRMLS_DC); +typedef void (*php_persistent_handle_retire_t)(php_persistent_handle_factory_t *f, void **handle TSRMLS_DC); + +struct php_persistent_handle_factory { + php_persistent_handle_provider_t *provider; + + php_persistent_handle_wakeup_t wakeup; + php_persistent_handle_retire_t retire; struct { char *str; @@ -69,19 +85,15 @@ typedef struct php_persistent_handle_factory { } ident; unsigned free_on_abandon:1; -} php_persistent_handle_factory_t; +}; struct php_persistent_handle_globals { ulong limit; - struct { - ulong h; - char *s; - size_t l; - } ident; + HashTable hash; }; -PHP_RAPHF_API int /* SUCCESS|FAILURE */ php_persistent_handle_provide(const char *name_str, size_t name_len, php_resource_factory_ops_t *fops, void *data, void (*dtor)(void *)); -PHP_RAPHF_API 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 TSRMLS_DC); +PHP_RAPHF_API int /* SUCCESS|FAILURE */ php_persistent_handle_provide(const char *name_str, size_t name_len, php_resource_factory_ops_t *fops, void *data, void (*dtor)(void *) TSRMLS_DC); +PHP_RAPHF_API 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 TSRMLS_DC); PHP_RAPHF_API void php_persistent_handle_abandon(php_persistent_handle_factory_t *a); PHP_RAPHF_API void *php_persistent_handle_acquire(php_persistent_handle_factory_t *a, void *init_arg TSRMLS_DC); PHP_RAPHF_API void php_persistent_handle_release(php_persistent_handle_factory_t *a, void *handle TSRMLS_DC);