Newsgroups: php.internals Path: news.php.net Xref: news.php.net php.internals:21874 Return-Path: Mailing-List: contact internals-help@lists.php.net; run by ezmlm Delivered-To: mailing list internals@lists.php.net Received: (qmail 27956 invoked by uid 1010); 15 Feb 2006 22:30:24 -0000 Delivered-To: ezmlm-scan-internals@lists.php.net Delivered-To: ezmlm-internals@lists.php.net Received: (qmail 27939 invoked from network); 15 Feb 2006 22:30:24 -0000 Received: from unknown (HELO lists.php.net) (127.0.0.1) by localhost with SMTP; 15 Feb 2006 22:30:24 -0000 X-Host-Fingerprint: 69.15.229.169 unknown Received: from ([69.15.229.169:15225] helo=localhost.localdomain) by pb1.pair.com (ecelerity 2.0 beta r(6323M)) with SMTP id 39/C1-15151-08BA3F34 for ; Wed, 15 Feb 2006 17:30:24 -0500 Message-ID: <39.C1.15151.08BA3F34@pb1.pair.com> To: internals@lists.php.net Reply-To: "l0t3k" References: <49.81.03593.F1463F34@pb1.pair.com> <1355657626.20060215225041@marcus-boerger.de> Date: Wed, 15 Feb 2006 17:28:15 -0500 Lines: 68 X-Priority: 3 X-MSMail-Priority: Normal X-Newsreader: Microsoft Outlook Express 6.00.2900.2180 X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2900.2180 X-RFC2646: Format=Flowed; Original X-Posted-By: 69.15.229.169 Subject: Re: [PHP-DEV] C Level Iterators and Userland Classes From: cshmoove@hotmail.com ("l0t3k") "Marcus Boerger" wrote in message news:1355657626.20060215225041@marcus-boerger.de... > Hello l0t3k, > > first of all your question does not make any sense to me whatsoever. What im trying to allow for is sorting by iterator as well as standard arrays, for example : // assume en_US as default locale $coll = new Collator("en_US"); $iter = new TextIterator("The rain in Spain drop gently on the Plains", TextIterator::WORD); var_dump( $coll->sort($iter)); // returns the sorted list of words $expr = new Regex($patttern, $input, $flags); var_dump($coll->sort($expr, SORT_DESC)); // Sorts matches in descending order > Anyway looking at the code you seem to be using a c-level iterator > manually instead of using it inside foreach() construct. see above... > The first thing i can see is that you use the iterator index while the > source code (zend_interface.h) says: > ulong index; /* private to fe_reset/fe_fetch opcodes */ > Unil now noone tried to emulate this stuff so i am not sure whether this > is correct or not. i wrote this more than ayear ago and i remember copying it from engine code. > The second thing is that you did not use the dtor() handler so you have > a memory leak. which dtor handler ? > To try to answer what i think you want to know: What ever object you use. > If it implements Traversable or derived its zend_class_entry has a > get_iterator function that gets you access to an iteator struct and the > handler table. You should never touch the data member of that iterator > struct and the handlers are documented. In your case there is no need to > use handler invalidate_current(). That helps. Thanks a lot.... clayton > hope this helps > marcus > > Wednesday, February 15, 2006, 6:23:44 PM, you wrote: > >> A quick question about using iterators in C code: > >> If it sufficient to use the interface gotten from >> zend_class_entry->get_iterator to handle userland classes which >> implement >> Iterator ? >> The attachment is part of code i'm using to do Unicode based collation. >> Will >> this work for userland iterators as well ? > >> l0t3k > > Best regards, > Marcus