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
  
  
  

Reply via email to