diff options
author | Marcus Boerger <helly@php.net> | 2003-05-29 21:08:08 +0000 |
---|---|---|
committer | Marcus Boerger <helly@php.net> | 2003-05-29 21:08:08 +0000 |
commit | 283f52f415ce644c1a1ae626d34a3f76983fd3df (patch) | |
tree | 9140f5edf27eb9dd68363f37e55c88a79e9a760f /ext/spl/spl_engine.c | |
parent | 499f902a30fd8353aae4e8e9b105ec9d251401fa (diff) | |
download | php-git-283f52f415ce644c1a1ae626d34a3f76983fd3df.tar.gz |
Optimize interface checks
Diffstat (limited to 'ext/spl/spl_engine.c')
-rwxr-xr-x | ext/spl/spl_engine.c | 33 |
1 files changed, 13 insertions, 20 deletions
diff --git a/ext/spl/spl_engine.c b/ext/spl/spl_engine.c index 02be8d000d..1f4bb78f47 100755 --- a/ext/spl/spl_engine.c +++ b/ext/spl/spl_engine.c @@ -144,34 +144,27 @@ int spl_is_instance_of(zval **obj, zend_class_entry *ce TSRMLS_DC) zend_class_entry *instance_ce; if (obj && (instance_ce = spl_get_class_entry(*obj TSRMLS_CC)) != NULL) { - if (instanceof_function(instance_ce, ce TSRMLS_CC)) { - return 1; - } + return instanceof_function(instance_ce, ce TSRMLS_CC); } return 0; } /* }}} */ /* {{{ spl_implements */ -int spl_implements(zval **obj, zend_class_entry *ce TSRMLS_DC) +spl_is_a spl_implements(zend_class_entry *ce) { - /* Ensure everything needed is available before checking for the type. - */ - zend_class_entry *instance_ce; - - if (obj && (instance_ce = spl_get_class_entry(*obj TSRMLS_CC)) != NULL) { - int i; - - while (instance_ce) { - for (i = 0; i < instance_ce->num_interfaces; i++) { - if (instance_ce->interfaces[i] == ce) { - return 1; - } - } - instance_ce = instance_ce->parent; - } + register spl_is_a is_a = 0; + register int i = ce->num_interfaces; + register zend_class_entry **pce = ce->interfaces; + + while (i--) { + if (*pce == spl_ce_iterator) is_a |= SPL_IS_A_ITERATOR; + else if (*pce == spl_ce_forward) is_a |= SPL_IS_A_FORWARD; + else if (*pce == spl_ce_assoc) is_a |= SPL_IS_A_ASSOC; + else if (*pce == spl_ce_sequence) is_a |= SPL_IS_A_SEQUENCE; + pce++; } - return spl_is_instance_of(obj, ce TSRMLS_CC); + return is_a; } /* }}} */ |