diff options
author | Emiel Bruijntjes <emiel.bruijntjes@copernica.com> | 2013-08-31 15:41:04 -0700 |
---|---|---|
committer | Emiel Bruijntjes <emiel.bruijntjes@copernica.com> | 2013-08-31 15:41:04 -0700 |
commit | d762ee103bee45bcd18df457c2c7a9f36991c75f (patch) | |
tree | bd8937a36a205a8755ac485c4ede65c10078b375 /src | |
parent | 708e9cf9da9571a38ac8d2529d016cd78ce8ec54 (diff) |
Work in progress on a simpler api
Diffstat (limited to 'src')
-rw-r--r-- | src/extension.cpp | 60 | ||||
-rw-r--r-- | src/function.cpp | 17 |
2 files changed, 33 insertions, 44 deletions
diff --git a/src/extension.cpp b/src/extension.cpp index ee22794..2ed4fa7 100644 --- a/src/extension.cpp +++ b/src/extension.cpp @@ -65,11 +65,6 @@ static ZEND_DECLARE_MODULE_GLOBALS(phpcpp) */ static void php_phpcpp_init_globals(zend_phpcpp_globals *globals) {} -/** - * The extension is a sort of singleton, so we keep one pointer to it here - * @var Extension - */ -static Extension *extension = nullptr; /** @@ -149,37 +144,40 @@ static int request_shutdown(INIT_FUNC_ARGS) */ Extension::Extension(const char *name, const char *version, const Functions &functions) { + // allocate memory + _entry = new zend_module_entry; + // assign all members (apart from the globals) - _entry.size = sizeof(zend_module_entry); // size of the data - _entry.zend_api = ZEND_MODULE_API_NO; // api number - _entry.zend_debug = ZEND_DEBUG; // debug mode enabled? - _entry.zts = USING_ZTS; // is thread safety enabled? - _entry.ini_entry = NULL; // the php.ini record - _entry.deps = NULL; // dependencies on other modules - _entry.name = HiddenPointer<Extension>(this, name); // extension name, with a hidden pointer to the extension object - _entry.functions = functions.internal(); // functions supported by this module - _entry.module_startup_func = extension_startup; // startup function for the whole extension - _entry.module_shutdown_func = extension_shutdown; // shutdown function for the whole extension - _entry.request_startup_func = request_startup; // startup function per request - _entry.request_shutdown_func = request_shutdown; // shutdown function per request - _entry.info_func = NULL; // information for retrieving info - _entry.version = version; // version string - _entry.globals_size = 0; // size of the global variables - _entry.globals_ptr = NULL; // pointer to the globals - _entry.globals_ctor = NULL; // constructor for global variables - _entry.globals_dtor = NULL; // destructor for global variables - _entry.post_deactivate_func = NULL; // unknown function - _entry.module_started = 0; // module is not yet started - _entry.type = 0; // temporary or persistent module, will be filled by Zend engine - _entry.handle = NULL; // dlopen() handle, will be filled by Zend engine - _entry.module_number = 0; // module number will be filled in by Zend engine - _entry.build_id = ZEND_MODULE_BUILD_ID; // check if extension and zend engine are compatible + _entry->size = sizeof(zend_module_entry); // size of the data + _entry->zend_api = ZEND_MODULE_API_NO; // api number + _entry->zend_debug = ZEND_DEBUG; // debug mode enabled? + _entry->zts = USING_ZTS; // is thread safety enabled? + _entry->ini_entry = NULL; // the php.ini record + _entry->deps = NULL; // dependencies on other modules + _entry->name = HiddenPointer<Extension>(this, name); // extension name, with a hidden pointer to the extension object + _entry->functions = functions.internal(); // functions supported by this module + _entry->module_startup_func = extension_startup; // startup function for the whole extension + _entry->module_shutdown_func = extension_shutdown; // shutdown function for the whole extension + _entry->request_startup_func = request_startup; // startup function per request + _entry->request_shutdown_func = request_shutdown; // shutdown function per request + _entry->info_func = NULL; // information for retrieving info + _entry->version = version; // version string + _entry->globals_size = 0; // size of the global variables + _entry->globals_ptr = NULL; // pointer to the globals + _entry->globals_ctor = NULL; // constructor for global variables + _entry->globals_dtor = NULL; // destructor for global variables + _entry->post_deactivate_func = NULL; // unknown function + _entry->module_started = 0; // module is not yet started + _entry->type = 0; // temporary or persistent module, will be filled by Zend engine + _entry->handle = NULL; // dlopen() handle, will be filled by Zend engine + _entry->module_number = 0; // module number will be filled in by Zend engine + _entry->build_id = ZEND_MODULE_BUILD_ID; // check if extension and zend engine are compatible // things that only need to be initialized #ifdef ZTS - _entry.globals_id_ptr = NULL; + _entry->globals_id_ptr = NULL; #else - _entry.globals_ptr = NULL; + _entry->globals_ptr = NULL; #endif } diff --git a/src/function.cpp b/src/function.cpp index 54f0717..cb56d78 100644 --- a/src/function.cpp +++ b/src/function.cpp @@ -20,25 +20,16 @@ namespace PhpCpp { */ Function::Function(const std::string &name, const std::initializer_list<Argument> &arguments) { - // one reference to the callable - _refcount = new int(1); + // create callable object _callable = new Callable(name, arguments); } /** - * Remove one reference + * Destructor */ -void Function::cleanup() +Function::~Function() { - // decrease number of references - (*_refcount)--; - - // leap out if there are still other references - if (*_refcount > 0) return; - - // release memory - delete _refcount; - delete _callable; + if (_callable) delete _callable; } /** |