cvsuser     03/08/19 07:42:46

  Modified:    classes  perlstring.pmc
               t/pmc    iter.t
  Log:
  perlstring iterator interface - get_integer
  
  Revision  Changes    Path
  1.46      +17 -2     parrot/classes/perlstring.pmc
  
  Index: perlstring.pmc
  ===================================================================
  RCS file: /cvs/public/parrot/classes/perlstring.pmc,v
  retrieving revision 1.45
  retrieving revision 1.46
  diff -u -w -r1.45 -r1.46
  --- perlstring.pmc    19 Aug 2003 14:05:44 -0000      1.45
  +++ perlstring.pmc    19 Aug 2003 14:42:45 -0000      1.46
  @@ -1,7 +1,7 @@
   /* perlstring.pmc
    *  Copyright: 2001-2003 The Perl Foundation.  All Rights Reserved.
    *  CVS Info
  - *     $Id: perlstring.pmc,v 1.45 2003/08/19 14:05:44 leo Exp $
  + *     $Id: perlstring.pmc,v 1.46 2003/08/19 14:42:45 leo Exp $
    *  Overview:
    *     These are the vtable functions for the PerlString base class
    *  Data Structure and Algorithms:
  @@ -405,8 +405,10 @@
                }
                break;
            case 3:     /* reset key, iterate from end */
  -             ret->cache.int_val = n;
  +             ret->cache.int_val = n-1;
                PMC_data(key) = (char *)s->strstart + s->bufused;
  +             (const char *)PMC_data(key) =
  +                         s->encoding->skip_backward( PMC_data(key), 1);
                break;
        }
        return ret;
  @@ -428,5 +430,18 @@
                res->strstart, 1) - (const char *)res->strstart;
        return res;
   
  +    }
  +    INTVAL get_integer_keyed(PMC* key) {
  +     STRING *s = SELF->cache.string_val;
  +     if ((char*)PMC_data(key) >= (char *)s->strstart &&
  +             (char *)PMC_data(key) <= (char *)s->strstart + s->bufused) {
  +         if (s->encoding->index == enum_encoding_singlebyte)
  +             return *(unsigned char*) PMC_data(key);
  +         else
  +             return s->encoding->decode(PMC_data(key));
  +     }
  +     else
  +         return s->encoding->decode(s->encoding->skip_forward(s->strstart,
  +                     key->cache.int_val));
       }
   }
  
  
  
  1.7       +42 -1     parrot/t/pmc/iter.t
  
  Index: iter.t
  ===================================================================
  RCS file: /cvs/public/parrot/t/pmc/iter.t,v
  retrieving revision 1.6
  retrieving revision 1.7
  diff -u -w -r1.6 -r1.7
  --- iter.t    19 Aug 2003 14:05:49 -0000      1.6
  +++ iter.t    19 Aug 2003 14:42:46 -0000      1.7
  @@ -1,6 +1,6 @@
   #! perl -w
   
  -use Parrot::Test tests => 8;
  +use Parrot::Test tests => 10;
   use Test::More qw(skip);
   output_is(<<'CODE', <<'OUTPUT', "new iter");
        new P2, .PerlArray
  @@ -269,6 +269,47 @@
   torrap
   parrot
   OUTPUT
  +
  +output_is(<<'CODE', <<OUTPUT, "string iteration forward get ord");
  +     new P2, .PerlString
  +     set P2, "ABC"
  +     new P1, .Iterator, P2
  +     set P1, 0
  +iter_loop:
  +        unless P1, iter_end          # while (entries) ...
  +     shift I1, P1
  +     print I1
  +     branch iter_loop
  +iter_end:
  +     print "\n"
  +     print P2
  +     print "\n"
  +     end
  +CODE
  +656667
  +ABC
  +OUTPUT
  +
  +output_is(<<'CODE', <<OUTPUT, "string iteration backward get ord");
  +     new P2, .PerlString
  +     set P2, "ABC"
  +     new P1, .Iterator, P2
  +     set P1, 3
  +iter_loop:
  +        unless P1, iter_end          # while (entries) ...
  +     pop I1, P1
  +     print I1
  +     branch iter_loop
  +iter_end:
  +     print "\n"
  +     print P2
  +     print "\n"
  +     end
  +CODE
  +676665
  +ABC
  +OUTPUT
  +
   SKIP: {
   skip("N/Y: get_keyed_int gets rest of array", 1);
   output_is(<<'CODE', <<'OUTPUT', "shift + index access");
  
  
  

Reply via email to