r1708 - in trunk/incubator/ext: . src src/core/Base

From: <voxusAT@ATshadanakar.org>
Date: Fri, 16 Jun 2006 23:45:28 +0400 (MSD)

Author: voxus
Date: 2006-06-16 23:45:27 +0400 (Fri, 16 Jun 2006)
New Revision: 1708

Added:
   trunk/incubator/ext/src/core/Base/NamedObject.c
   trunk/incubator/ext/src/core/Base/NamedObject.h
Modified:
   trunk/incubator/ext/config.m4
   trunk/incubator/ext/src/core/Base/IdentifiableObject.c
   trunk/incubator/ext/src/onphp.c
   trunk/incubator/ext/src/onphp.h
   trunk/incubator/ext/src/onphp_core.c
Log:
* NamedObject implemented

Modified: trunk/incubator/ext/config.m4
===================================================================
--- trunk/incubator/ext/config.m4 2006-06-16 16:17:32 UTC (rev 1707)
+++ trunk/incubator/ext/config.m4 2006-06-16 19:45:27 UTC (rev 1708)
@@ -11,8 +11,9 @@
                 src/core/Base/Identifiable.c \
                 src/core/Base/Identifier.c \
                 src/core/Base/IdentifiableObject.c \
+ src/core/Base/Stringable.c \
                 src/core/Base/Named.c \
- src/core/Base/Stringable.c \
+ src/core/Base/NamedObject.c \
         "
 
         ONPHP_INCLUDES="-I./src/"

Modified: trunk/incubator/ext/src/core/Base/IdentifiableObject.c
===================================================================
--- trunk/incubator/ext/src/core/Base/IdentifiableObject.c 2006-06-16 16:17:32 UTC (rev 1707)
+++ trunk/incubator/ext/src/core/Base/IdentifiableObject.c 2006-06-16 19:45:27 UTC (rev 1708)
@@ -37,10 +37,8 @@
                 Z_TYPE_P(id) == IS_OBJECT
                 && instanceof_function(Z_OBJCE_P(id), onphp_ce_Identifier TSRMLS_CC)
         ) {
- zval *final = ONPHP_READ_PROPERTY(id, "final");
-
                 if (
- zval_is_true(final)
+ zval_is_true(ONPHP_READ_PROPERTY(id, "final"))
                 ) {
                         id = ONPHP_READ_PROPERTY(id, "id");
                 }

Added: trunk/incubator/ext/src/core/Base/NamedObject.c
===================================================================
--- trunk/incubator/ext/src/core/Base/NamedObject.c (rev 0)
+++ trunk/incubator/ext/src/core/Base/NamedObject.c 2006-06-16 19:45:27 UTC (rev 1708)
@@ -0,0 +1,102 @@
+/* $Id$ */
+
+#include "ext/standard/php_smart_str.h"
+
+#include "onphp.h"
+
+#include "core/Base/NamedObject.h"
+
+PHPAPI zend_class_entry *onphp_ce_NamedObject;
+
+ONPHP_METHOD(NamedObject, getName)
+{
+ zval *this = getThis(), *name;
+
+ onphp_named_object *object = (onphp_named_object *) zend_object_store_get_object(
+ this TSRMLS_CC
+ );
+
+ name = ONPHP_READ_PROPERTY(this, "name");
+
+ RETURN_ZVAL(name, 1, 0);
+}
+
+ONPHP_METHOD(NamedObject, setName)
+{
+ zval *this = getThis(), *name;
+
+ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "z", &name) == SUCCESS) {
+ ONPHP_UPDATE_PROPERTY(this, "name", name);
+ }
+
+ RETURN_ZVAL(this, 1, 0);
+}
+
+void onphp_append_zval_to_smart_string(smart_str *string, zval *value)
+{
+ zval copy;
+
+ if (Z_TYPE_P(value) == IS_STRING) {
+ smart_str_appends(string, Z_STRVAL_P(value));
+ } else {
+ int use_copy;
+
+ zend_make_printable_zval(value, &copy, &use_copy);
+ smart_str_appends(string, Z_STRVAL(copy));
+
+ if (use_copy) {
+ zval_dtor(&copy);
+ }
+ }
+}
+
+ONPHP_METHOD(NamedObject, toString)
+{
+ zval *this = getThis(), *id, *name;
+ zval id_copy, name_copy;
+ int use_id_copy, use_name_copy;
+ smart_str string = {0};
+
+ onphp_append_zval_to_smart_string(&string, ONPHP_READ_PROPERTY(this, "id"));
+ smart_str_appends(&string, ": ");
+ onphp_append_zval_to_smart_string(&string, ONPHP_READ_PROPERTY(this, "name"));
+ smart_str_0(&string);
+
+ RETURN_STRINGL(string.c, string.len, 0);
+}
+
+ONPHP_METHOD(NamedObject, compareNames)
+{
+ zval *first, *second;
+
+ if (
+ (ZEND_NUM_ARGS() != 2)
+ || zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "zz", &first, &second) == FAILURE
+ ) {
+ WRONG_PARAM_COUNT;
+ }
+
+ if (
+ Z_TYPE_P(first) != IS_OBJECT
+ || Z_TYPE_P(second) != IS_OBJECT
+ || !instanceof_function(Z_OBJCE_P(first), onphp_ce_NamedObject TSRMLS_CC)
+ || !instanceof_function(Z_OBJCE_P(second), onphp_ce_NamedObject TSRMLS_CC)
+ ) {
+ zend_error(E_ERROR, "NamedObject::compareNames() expects two NamedObject instances");
+ }
+
+ RETURN_LONG(
+ strcasecmp(
+ Z_STRVAL_P(ONPHP_READ_PROPERTY(first, "name")),
+ Z_STRVAL_P(ONPHP_READ_PROPERTY(second, "name"))
+ )
+ );
+}
+
+zend_function_entry onphp_funcs_NamedObject[] = {
+ ONPHP_ME(NamedObject, getName, NULL, ZEND_ACC_PUBLIC)
+ ONPHP_ME(NamedObject, setName, arginfo_name, ZEND_ACC_PUBLIC)
+ ONPHP_ME(NamedObject, compareNames, arginfo_two_named_objects, ZEND_ACC_PUBLIC | ZEND_ACC_STATIC)
+ ONPHP_ME(NamedObject, toString, NULL, ZEND_ACC_PUBLIC)
+ {NULL, NULL, NULL}
+};

Property changes on: trunk/incubator/ext/src/core/Base/NamedObject.c
___________________________________________________________________
Name: svn:keywords
   + Id
Name: svn:eol-style
   + native

Added: trunk/incubator/ext/src/core/Base/NamedObject.h
===================================================================
--- trunk/incubator/ext/src/core/Base/NamedObject.h (rev 0)
+++ trunk/incubator/ext/src/core/Base/NamedObject.h 2006-06-16 19:45:27 UTC (rev 1708)
@@ -0,0 +1,20 @@
+/* $Id$ */
+
+#ifndef ONPHP_CORE_NAMED_OBJECT_H
+#define ONPHP_CORE_NAMED_OBJECT_H
+
+#include "onphp_core.h"
+
+extern PHPAPI zend_class_entry *onphp_ce_NamedObject;
+
+typedef struct _onphp_empty_object onphp_named_object;
+
+extern zend_function_entry onphp_funcs_NamedObject[];
+
+static
+ZEND_BEGIN_ARG_INFO(arginfo_two_named_objects, 0)
+ ZEND_ARG_INFO(0, named)
+ ZEND_ARG_INFO(0, named)
+ZEND_END_ARG_INFO()
+
+#endif /* ONPHP_CORE_NAMED_OBJECT_H */

Property changes on: trunk/incubator/ext/src/core/Base/NamedObject.h
___________________________________________________________________
Name: svn:keywords
   + Id
Name: svn:eol-style
   + native

Modified: trunk/incubator/ext/src/onphp.c
===================================================================
--- trunk/incubator/ext/src/onphp.c 2006-06-16 16:17:32 UTC (rev 1707)
+++ trunk/incubator/ext/src/onphp.c 2006-06-16 19:45:27 UTC (rev 1708)
@@ -3,16 +3,19 @@
 #include "onphp.h"
 
 #include "onphp_core.h"
+#include "core/Base/Identifier.h"
+#include "core/Base/Identifiable.h"
 #include "core/Base/IdentifiableObject.h"
-#include "core/Base/Identifiable.h"
-#include "core/Base/Identifier.h"
+#include "core/Base/Stringable.h"
 #include "core/Base/Named.h"
+#include "core/Base/NamedObject.h"
 
 #define ONPHP_ADD_CLASS(class_name, z_list, sub, allow, ce_flags) \
         spl_add_classes(&onphp_ce_ ## class_name, z_list, sub, allow, ce_flags TSRMLS_CC)
 
 #define ONPHP_LIST_CLASSES(z_list, sub, allow, ce_flags) \
         ONPHP_ADD_CLASS(Named, z_list, sub, allow, ce_flags); \
+ ONPHP_ADD_CLASS(NamedObject, z_list, sub, allow, ce_flags); \
         ONPHP_ADD_CLASS(Identifiable, z_list, sub, allow, ce_flags); \
         ONPHP_ADD_CLASS(IdentifiableObject, z_list, sub, allow, ce_flags);
 

Modified: trunk/incubator/ext/src/onphp.h
===================================================================
--- trunk/incubator/ext/src/onphp.h 2006-06-16 16:17:32 UTC (rev 1707)
+++ trunk/incubator/ext/src/onphp.h 2006-06-16 19:45:27 UTC (rev 1708)
@@ -23,14 +23,17 @@
 #define REGISTER_ONPHP_STD_CLASS_EX(class_name, obj_ctor, funcs) \
         spl_register_std_class(&onphp_ce_ ## class_name, # class_name, obj_ctor, funcs TSRMLS_CC);
 
+#define REGISTER_ONPHP_SUB_CLASS_EX(class_name, parent_class_name, obj_ctor, funcs) \
+ spl_register_sub_class(&onphp_ce_ ## class_name, onphp_ce_ ## parent_class_name, # class_name, obj_ctor, funcs TSRMLS_CC);
+
 #define REGISTER_ONPHP_PROPERTY(class_name, prop_name, prop_flags) \
         zend_declare_property_null(onphp_ce_ ## class_name, prop_name, strlen(prop_name), prop_flags TSRMLS_CC);
 
 #define ONPHP_READ_PROPERTY(class, property) \
- zend_read_property(Z_OBJCE_P(class), class, property, strlen(property), 1 TSRMLS_CC);
+ zend_read_property(Z_OBJCE_P(class), class, property, strlen(property), 1 TSRMLS_CC)
 
 #define ONPHP_UPDATE_PROPERTY(class, property, value) \
- zend_update_property(Z_OBJCE_P(class), class, property, strlen(property), value TSRMLS_CC);
+ zend_update_property(Z_OBJCE_P(class), class, property, strlen(property), value TSRMLS_CC)
 
 #define ONPHP_METHOD(class_name, function_name) \
         PHP_METHOD(onphp_ ## class_name, function_name)

Modified: trunk/incubator/ext/src/onphp_core.c
===================================================================
--- trunk/incubator/ext/src/onphp_core.c 2006-06-16 16:17:32 UTC (rev 1707)
+++ trunk/incubator/ext/src/onphp_core.c 2006-06-16 19:45:27 UTC (rev 1708)
@@ -3,12 +3,12 @@
 #include "zend_interfaces.h"
 
 #include "onphp_core.h"
-
+#include "core/Base/Identifier.h"
+#include "core/Base/Identifiable.h"
 #include "core/Base/IdentifiableObject.h"
-#include "core/Base/Identifiable.h"
-#include "core/Base/Identifier.h"
 #include "core/Base/Stringable.h"
 #include "core/Base/Named.h"
+#include "core/Base/NamedObject.h"
 
 static zend_object_handlers zend_std_obj_handlers;
 
@@ -77,7 +77,7 @@
         );
         REGISTER_ONPHP_PROPERTY(Identifier, "id", ZEND_ACC_PRIVATE);
         REGISTER_ONPHP_PROPERTY(Identifier, "final", ZEND_ACC_PRIVATE);
- onphp_ce_Identifier->ce_flags |= ZEND_ACC_FINAL;
+ onphp_ce_Identifier->ce_flags |= ZEND_ACC_FINAL_CLASS;
         
         REGISTER_ONPHP_STD_CLASS_EX(
                 IdentifiableObject,
@@ -88,6 +88,17 @@
         
         REGISTER_ONPHP_IMPLEMENTS(Identifier, Identifiable);
         REGISTER_ONPHP_IMPLEMENTS(IdentifiableObject, Identifiable);
+
+ REGISTER_ONPHP_SUB_CLASS_EX(
+ NamedObject,
+ IdentifiableObject,
+ onphp_empty_object_new,
+ onphp_funcs_NamedObject
+ );
+ REGISTER_ONPHP_PROPERTY(NamedObject, "name", ZEND_ACC_PROTECTED);
+ onphp_ce_NamedObject->ce_flags |= ZEND_ACC_EXPLICIT_ABSTRACT_CLASS;
+
+ REGISTER_ONPHP_IMPLEMENTS(NamedObject, Named);
         
         memcpy(&zend_std_obj_handlers, zend_get_std_object_handlers(), sizeof(zend_object_handlers));
 }
Received on Fri Jun 16 2006 - 23:45:28 MSD

This archive was generated by hypermail 2.2.0 : Sat Oct 27 2007 - 20:10:12 MSD