cvsuser 03/10/08 06:40:18
Modified: classes key.pmc
t/pmc key.t
Log:
iterator interface for keys
Revision Changes Path
1.13 +24 -1 parrot/classes/key.pmc
Index: key.pmc
===================================================================
RCS file: /cvs/public/parrot/classes/key.pmc,v
retrieving revision 1.12
retrieving revision 1.13
diff -u -w -r1.12 -r1.13
--- key.pmc 8 Oct 2003 12:58:26 -0000 1.12
+++ key.pmc 8 Oct 2003 13:40:12 -0000 1.13
@@ -1,6 +1,6 @@
/* key.pmc
* Copyright: 2001-2003 The Perl Foundation. All Rights Reserved.
- * CVS Info $Id: key.pmc,v 1.12 2003/10/08 12:58:26 leo Exp $
+ * CVS Info $Id: key.pmc,v 1.13 2003/10/08 13:40:12 leo Exp $
* Overview:
* These are the vtable functions for the default PMC class
* Data Structure and Algorithms:
@@ -115,4 +115,27 @@
return key_next(INTERP, SELF);
}
+ /* iterator interface */
+ PMC* get_pmc_keyed (PMC* key) {
+ return key;
+ }
+
+ PMC* nextkey_keyed (PMC* key, INTVAL what) {
+ PMC *ret = SELF;
+
+ switch (what) {
+ case ITERATE_FROM_START: /* reset key */
+ break;
+ case ITERATE_GET_NEXT:
+ if (PMC_data(key))
+ ret = key_next(interpreter, key);
+ else
+ ret->cache.int_val = -1;
+ break;
+ default:
+ internal_exception(1, "Key can't iterate backwards");
+ break;
+ }
+ return ret;
+ }
}
1.2 +26 -2 parrot/t/pmc/key.t
Index: key.t
===================================================================
RCS file: /cvs/public/parrot/t/pmc/key.t,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -w -r1.1 -r1.2
--- key.t 8 Oct 2003 12:58:20 -0000 1.1
+++ key.t 8 Oct 2003 13:40:18 -0000 1.2
@@ -1,6 +1,6 @@
#! perl -w
-use Parrot::Test tests => 1;
+use Parrot::Test tests => 2;
use Test::More;
output_is(<<'CODE', <<'OUT', 'traverse key chain');
@@ -38,5 +38,29 @@
123
OUT
+output_is(<<'CODE', <<'OUT', 'iter key chain');
+ new P0, .Key
+ set P0, "1"
+ new P1, .Key
+ set P1, "2"
+ push P0, P1
+ new P2, .Key
+ set P2, "3"
+ push P1, P2
-
+ .include "iterator.pasm"
+ new P5, .Iterator, P0
+ print "ok 1\n"
+ set P5, .ITERATE_FROM_START
+lp:
+ unless P5, end
+ shift P4, P5
+ print P4
+ branch lp
+end:
+ print "\n"
+ end
+CODE
+ok 1
+123
+OUT