diff options
Diffstat (limited to 'ext/satellite/class.h')
-rw-r--r-- | ext/satellite/class.h | 219 |
1 files changed, 0 insertions, 219 deletions
diff --git a/ext/satellite/class.h b/ext/satellite/class.h deleted file mode 100644 index 189362c744..0000000000 --- a/ext/satellite/class.h +++ /dev/null @@ -1,219 +0,0 @@ -/* - +----------------------------------------------------------------------+ - | PHP version 4.0 | - +----------------------------------------------------------------------+ - | Copyright (c) 1997-2001 The PHP Group | - +----------------------------------------------------------------------+ - | This source file is subject to version 2.02 of the PHP license, | - | that is bundled with this package in the file LICENSE, and is | - | available at through the world-wide-web at | - | http://www.php.net/license/2_02.txt. | - | If you did not receive a copy of the PHP license and are unable to | - | obtain it through the world-wide-web, please send a note to | - | license@php.net so we can mail you a copy immediately. | - +----------------------------------------------------------------------+ - | Author: David Eriksson <david@2good.com> | - +----------------------------------------------------------------------+ - */ - -/* - * $Id$ - * vim: syntax=c tabstop=2 shiftwidth=2 - */ - -/* ----------------------------------------------------------------------- - * - * Macros and things to simplify making PHP classes - * - * ----------------------------------------------------------------------- - */ -#ifndef __orbit_class_h__ -#define __orbit_class_h__ - -#include <zend.h> -#include <zend_API.h> - -#define CONSTRUCTOR 1 -#define DESTRUCTOR 2 -#define CALL_FUNCTION 4 -#define PUT_PROPERTY 8 -#define GET_PROPERTY 16 -#define NO_FUNCTIONS (CONSTRUCTOR|DESTRUCTOR|PUT_PROPERTY|GET_PROPERTY) -#define NO_PROPERTIES (CONSTRUCTOR|DESTRUCTOR|CALL_FUNCTION) - -/* - * sorry everyone but the constructor itself has to allocate the data - * structure for member variables! - * - * it also has to deallocate this in the destructor... - */ -typedef zend_bool (*Class_Constructor) - (void ** ppObject, int parameterCount, zval ** ppParameters); -typedef zend_bool (*Class_Destructor) - (void * pObject); -typedef zend_bool (*Class_CallFunction) - (void * pObject, const char * pFunctionName, int parameterCount, zval ** ppParameters, zval * pReturnValue); -typedef zend_bool (*Class_PutProperty) - (void * pObject, const char * pPropertyName, const zval * pValue); -typedef zend_bool (*Class_GetProperty) - (void * pObject, const char * pPropertyName, zval * pReturnValue); - - /* put/get data connected to php object */ -void orbit_save_data(zval * pPhpObject, int type, void * pData); -void * orbit_retrieve_data(const zval * pPhpObject, int type); - -void orbit_class_function_call( - zend_class_entry * pClass, - int dataType, - zend_property_reference *pPropertyReference, - Class_Constructor pConstructor, - Class_CallFunction pCallFunction, - INTERNAL_FUNCTION_PARAMETERS); - -/* - * use this macro in the header file - */ -#define DECLARE_CLASS(name) \ -typedef struct _##name name##; \ -zend_bool name##_Init(int module_number); \ -void name##_SaveData(zval * pPhpObject, ##name * pData);\ -##name * name##_RetrieveData(const zval * pPhpObject);\ -zend_bool name##_PutProperty(##name * pObject, const char * pPropertyName, const zval * pValue);\ -zend_bool name##_GetProperty(##name * pObject, const char * pPropertyName, zval * pReturnValue);\ -/* end small macro */ - -/* - * Wrapper for a function call - */ -#define IMPLEMENT_FUNCTION_CALL(name, flags)\ -static void _##name##_FunctionCall(INTERNAL_FUNCTION_PARAMETERS, zend_property_reference * pPropertyReference) \ -{ \ - orbit_class_function_call( \ - &name##_class_entry, \ - name##_data_type, \ - pPropertyReference, \ - ((flags) & CONSTRUCTOR) ? (Class_Constructor)name##_Constructor : NULL, \ - ((flags) & CALL_FUNCTION) ? (Class_CallFunction)name##_CallFunction : NULL, \ - INTERNAL_FUNCTION_PARAM_PASSTHRU\ - );\ -} - -/* - * wrapper for PutProperty - */ -#define IMPLEMENT_PUT_PROPERTY(name, flags)\ -static int _##name##_PutProperty(zend_property_reference * pPropertyReference, zval * pValue)\ -{\ - int result = 0;\ - if ((flags) & PUT_PROPERTY)\ - {\ - ##name * p_data = (##name *)orbit_retrieve_data(pPropertyReference->object, name##_data_type);\ - /* get variable name element */\ - zend_overloaded_element * p_attribute_element = \ - (zend_overloaded_element *)pPropertyReference->elements_list->tail->data;\ - /* get variable name */\ - char * p_attribute_name = p_attribute_element->element.value.str.val;\ - if (p_data)\ - result = ##name##_PutProperty(p_data, p_attribute_name, pValue) ? SUCCESS : FAILURE;\ - else\ - result = FAILURE;\ - }\ - else\ - {\ - zend_error(E_WARNING, "(Satellite) Can't set members in class");\ - }\ - return result;\ -} - -/* - * wrapper for GetProperty - */ -#define IMPLEMENT_GET_PROPERTY(name, flags)\ -static zval _##name##_GetProperty(zend_property_reference * pPropertyReference)\ -{\ - zval value;\ - ZVAL_NULL(&value);\ - if ((flags) & GET_PROPERTY)\ - {\ - ##name * p_data = (##name *)orbit_retrieve_data(pPropertyReference->object, name##_data_type);\ - /* get variable name element */\ - zend_overloaded_element * p_attribute_element = \ - (zend_overloaded_element *)pPropertyReference->elements_list->tail->data;\ - /* get variable name */\ - char * p_attribute_name = p_attribute_element->element.value.str.val;\ - if (p_data)\ - ##name##_GetProperty(p_data, p_attribute_name, &value);\ - }\ - else\ - {\ - zend_error(E_WARNING, "(Satellite) Can't get members in class");\ - }\ - return value;\ -} - - -#define IMPLEMENT_INIT_EX(name, flags, functions, functioncall, getproperty, putproperty)\ -zend_bool name##_Init(int module_number) \ -{ \ - /* register data type */ \ - name##_data_type = register_list_destructors(name##_Destructor, NULL); \ -\ - /* register class */ \ - INIT_OVERLOADED_CLASS_ENTRY( \ - name##_class_entry, \ - #name, \ - functions, \ - functioncall, \ - getproperty, \ - putproperty \ - ); \ -\ - zend_register_internal_class(&name##_class_entry);\ - return TRUE;\ -} - -/* - * initialize object, must be called from PHP_MINIT_FUNCTION etc - */ -#define IMPLEMENT_INIT(name, flags) \ -IMPLEMENT_INIT_EX(name, flags, NULL, _##name##_FunctionCall, _##name##_GetProperty, _##name##_PutProperty) - - -/* - * functions to save and retrieve data for the object - */ -#define IMPLEMENT_DATA_HELPERS(name, flags)\ -void name##_SaveData(zval * pPhpObject, ##name * pData)\ -{\ - orbit_save_data(pPhpObject, name##_data_type, pData);\ -}\ -##name * name##_RetrieveData(const zval * pPhpObject)\ -{\ - return (##name *)orbit_retrieve_data(pPhpObject, name##_data_type);\ -} - -/* - * static declarations for class - */ -#define IMPLEMENT_DECLARATIONS(name, flags)\ -static zend_bool name##_Constructor(##name ** ppObject, int parameterCount, const zval ** ppParameters);\ -static zend_bool name##_Destructor(##name * pObject);\ -static zend_bool name##_CallFunction(##name * pObject, const char * pFunctionName, int parameterCount, const zval ** ppParameters, zval * pResult); \ -\ -static int name##_data_type = 0; \ -static zend_class_entry name##_class_entry; - -/* - * use this macro in the source file - */ -#define IMPLEMENT_CLASS(name, flags) \ -IMPLEMENT_DECLARATIONS(name, flags) \ -IMPLEMENT_FUNCTION_CALL(name, flags) \ -IMPLEMENT_PUT_PROPERTY(name, flags) \ -IMPLEMENT_GET_PROPERTY(name, flags) \ -IMPLEMENT_INIT(name, flags) \ -IMPLEMENT_DATA_HELPERS(name, flags) - - -#endif /* __orbit_class_h__ */ - |