summaryrefslogtreecommitdiff
path: root/ext/satellite/struct.c
diff options
context:
space:
mode:
Diffstat (limited to 'ext/satellite/struct.c')
-rw-r--r--ext/satellite/struct.c330
1 files changed, 0 insertions, 330 deletions
diff --git a/ext/satellite/struct.c b/ext/satellite/struct.c
deleted file mode 100644
index 9e37e5314a..0000000000
--- a/ext/satellite/struct.c
+++ /dev/null
@@ -1,330 +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
- */
-
-/* -----------------------------------------------------------------------
- *
- * OrbitStruct class
- *
- * There are three ways to create a structure
- *
- * (1) OrbitStruct_Constructor, for new OrbitStruct(...) in PHP
- * (2) OrbitStruct_Create, used when a CORBA method returns a struct
- * (3) OrbitStruct_Wakeup, used on "unserialization"
- * -----------------------------------------------------------------------
- */
-#include "struct.h"
-#include "common.h"
-#include "typemanager.h"
-#include "hashtable.h"
-
-/*
- * enable/disable incomplete serialization support
- */
-#define SERIALIZABLE_STRUCT 0
-
-struct _OrbitStruct
-{
- HashTable mMembers;
- zend_bool mIsException; /* otherwise normal struct */
- union
- {
- StructType * mpStructType;
- ExceptionType * mpExceptionType;
- } u;
-};
-
-#if SERIALIZABLE_STRUCT
-
-static void OrbitStruct_Wakeup(INTERNAL_FUNCTION_PARAMETERS);
-static void OrbitStruct_Sleep(INTERNAL_FUNCTION_PARAMETERS);
-
-static zend_function_entry OrbitStruct_class_functions[] =
-{
- {"__sleep", OrbitStruct_Sleep},
- {"__wakeup", OrbitStruct_Wakeup},
- {NULL, NULL}
-};
-
-#define MY_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_EX(name, flags, ##name##_class_functions, _##name##_FunctionCall, _##name##_GetProperty, _##name##_PutProperty)\
-IMPLEMENT_DATA_HELPERS(name, flags)
-
-MY_IMPLEMENT_CLASS(OrbitStruct, NO_FUNCTIONS);
-
-#else /* !SERIALIZABLE_STRUCT */
-
-IMPLEMENT_CLASS(OrbitStruct, NO_FUNCTIONS);
-
-#endif /* SERIALIZABLE_STRUCT */
-
-#if SERIALIZABLE_STRUCT
-
-/*
- * prepare for serialization
- */
-static void OrbitStruct_Sleep(INTERNAL_FUNCTION_PARAMETERS)
-{
- /* get struct data */
- OrbitStruct * p_struct = OrbitStruct_RetrieveData(this_ptr);
-
- /* validate data */
- if (p_struct == NULL)
- {
- goto error;
- }
-
-#if 0
- /* add property to zval */
- add_property_string(this_ptr, IOR_PROPERTY_KEY, p_ior, TRUE);
-
- /* create array */
- array_init(return_value);
-
- /* add name of property IOR to array */
- add_next_index_string(return_value, IOR_PROPERTY_KEY, TRUE);
-#endif
-
- return;
-
-error:
- RETURN_NULL();
-}
-
-static void OrbitStruct_Wakeup(INTERNAL_FUNCTION_PARAMETERS)
-{
-}
-
-#endif /* SERIALIZABLE_STRUCT */
-
-char * OrbitStruct_GetRepositoryId(OrbitStruct * pStruct)
-{
- if (pStruct->mIsException)
- return ExceptionType_GetRepositoryId(pStruct->u.mpExceptionType);
- else
- return StructType_GetRepositoryId(pStruct->u.mpStructType);
-}
-
-static zend_bool OrbitStruct_InitializeMembers(OrbitStruct * pStruct)
-{
- MemberType * p_member = NULL;
-
- if (pStruct->mIsException)
- p_member = ExceptionType_GetFirstMember(pStruct->u.mpExceptionType);
- else
- p_member = StructType_GetFirstMember(pStruct->u.mpStructType);
-
- zend_hash_init(
- &pStruct->mMembers, /* hash table */
- 0, /* size */
- NULL, /* hash function */
- ZVAL_DESTRUCTOR, /* destructor */
- 0); /* persistent */
-
- if (!MemberType_IsValid(p_member))
- return TRUE; /* no members */
-
- do
- {
- zval * p_value = NULL;
- char * p_name = MemberType_GetName(p_member);
-
- ALLOC_ZVAL(p_value);
- ZVAL_NULL(p_value);
-
- zend_hash_add(
- &pStruct->mMembers,
- p_name,
- strlen(p_name)+1, /* important: include terminating zero byte */
- p_value,
- sizeof(zval),
- NULL
- );
- } while (MemberType_GetNext(p_member));
-
- return TRUE;
-}
-
-static zend_bool OrbitStruct_Initialize(const char * pId, OrbitStruct * pStruct)
-{
- /* find type info */
- pStruct->u.mpStructType = TypeManager_FindStruct(pId);
-
- if (pStruct->u.mpStructType == NULL)
- {
- /* not a struct -- maybe an exception? */
- pStruct->u.mpExceptionType = TypeManager_FindException(pId);
- if (pStruct->u.mpExceptionType == NULL)
- {
- zend_error(E_WARNING, "(Satellite) unknown struct or exception '%s'", pId);
-
- goto error;
- }
-
- pStruct->mIsException = TRUE;
- }
-
- /* initialize members */
- if (!OrbitStruct_InitializeMembers(pStruct))
- goto error;
-
- return TRUE;
-
-error:
- return FALSE;
-}
-
-/*
- * used by orbit_namedvalue_to_zval_struct(...)
- */
-zend_bool OrbitStruct_Create(const char * pId, zval * pDestination)
-{
- /* allocate buffer */
- OrbitStruct * p_struct = orbit_new(OrbitStruct);
-
- /* initialize struct */
- if (!OrbitStruct_Initialize(pId, p_struct))
- goto error;
-
- /* set zval members */
- pDestination->type = IS_OBJECT;
- pDestination->is_ref = 1;
- pDestination->refcount = 1;
-
- pDestination->value.obj.ce = &OrbitStruct_class_entry;
- pDestination->value.obj.properties = orbit_new(HashTable);
-
- zend_hash_init(
- pDestination->value.obj.properties, /* hash table */
- 0, /* size */
- NULL, /* hash function */
- ZVAL_PTR_DTOR, /* destructor */
- 0); /* persistent */
-
- /* save orbit data */
- OrbitStruct_SaveData(pDestination, p_struct);
-
- return TRUE;
-
-error:
- orbit_delete(p_struct);
- return FALSE;
-}
-
-/*
- * Constructor
- *
- * Parameters: Repository ID of struct
- */
-zend_bool OrbitStruct_Constructor(OrbitStruct ** ppStruct,
- int parameterCount, const zval ** ppParameters)
-{
- /* allocate buffer */
- OrbitStruct * p_struct = orbit_new(OrbitStruct);
-
- /* check parameter count */
- if (parameterCount != 1)
- {
- wrong_param_count();
- goto error;
- }
-
- /* validate parameter types */
- if (ppParameters[0]->type != IS_STRING)
- goto error;
-
- /* initialize struct */
- if (!OrbitStruct_Initialize(ppParameters[0]->value.str.val, p_struct))
- goto error;
-
- *ppStruct = p_struct;
- return TRUE;
-
-error:
- OrbitStruct_Destructor(p_struct);
- *ppStruct = NULL;
- return FALSE;
-}
-
-zend_bool OrbitStruct_Destructor(OrbitStruct * pStruct)
-{
- if (pStruct->mIsException)
- ExceptionType_release(pStruct->u.mpExceptionType);
- else
- StructType_release(pStruct->u.mpStructType);
-
- /* will crash on uninitialized members structure :-( */
- zend_hash_destroy(&pStruct->mMembers);
- orbit_delete(pStruct);
-
- return TRUE;
-}
-
-/* not used */
-zend_bool OrbitStruct_CallFunction(OrbitStruct * pStruct,
- const char * pFunctionName, int parameterCount, const zval ** ppParameters, zval * pResult)
-{
- return FALSE;
-}
-
-zend_bool OrbitStruct_PutProperty(OrbitStruct * pStruct,
- const char * pPropertyName, const zval * pValue)
-{
- zend_bool result;
-
- result = orbit_store_by_key(&pStruct->mMembers, pPropertyName, pValue);
-
- if (!result)
- {
- zend_error(E_WARNING, "(Satellite) unknown member '%s' in struct '%s'",
- pPropertyName, OrbitStruct_GetRepositoryId(pStruct));
- }
-
- return result;
-}
-
-zend_bool OrbitStruct_GetProperty(OrbitStruct * pStruct,
- const char * pPropertyName, zval * pReturnValue)
-{
- zval * p_value = orbit_find_by_key(&pStruct->mMembers, pPropertyName);
-
- if (p_value == NULL)
- {
- zend_error(E_WARNING, "(Satellite) unknown member '%s' in struct '%s'",
- pPropertyName, OrbitStruct_GetRepositoryId(pStruct));
-
- ZVAL_NULL(pReturnValue);
- return FALSE;
- }
- else
- {
- memcpy(pReturnValue, p_value, sizeof(zval)); /* raw data copy */
- zval_copy_ctor(pReturnValue); /* smart data copy */
- INIT_PZVAL(pReturnValue); /* set reference count */
- return TRUE;
- }
-}
-