cvsuser     05/03/29 11:41:03

  Modified:    classes  fixedbooleanarray.pmc resizablebooleanarray.pmc
               t/pmc    freeze.t
  Log:
  Use calloc when allocating memory for FixedBooleanArray or
  ResizableBooleanArray.
  Get started on freeze/thaw.
  
  Revision  Changes    Path
  1.7       +45 -3     parrot/classes/fixedbooleanarray.pmc
  
  Index: fixedbooleanarray.pmc
  ===================================================================
  RCS file: /cvs/public/parrot/classes/fixedbooleanarray.pmc,v
  retrieving revision 1.6
  retrieving revision 1.7
  diff -u -r1.6 -r1.7
  --- fixedbooleanarray.pmc     27 Mar 2005 12:35:21 -0000      1.6
  +++ fixedbooleanarray.pmc     29 Mar 2005 19:41:00 -0000      1.7
  @@ -1,6 +1,6 @@
   /*
   Copyright: 2001-2005 The Perl Foundation.  All Rights Reserved.
  -$Id: fixedbooleanarray.pmc,v 1.6 2005/03/27 12:35:21 bernhard Exp $
  +$Id: fixedbooleanarray.pmc,v 1.7 2005/03/29 19:41:00 bernhard Exp $
   
   =head1 NAME
   
  @@ -315,8 +315,7 @@
   
           PMC_int_val(SELF) = size;
           PMC_int_val2(SELF) = (size / BITS_PER_CHAR + 1) * BITS_PER_CHAR;
  -        PMC_data(SELF) = mem_sys_allocate(PMC_int_val2(SELF) / 
BITS_PER_CHAR);
  -        PObj_active_destroy_SET(SELF);
  +        PMC_data(SELF) = mem_sys_allocate_zeroed(PMC_int_val2(SELF) / 
BITS_PER_CHAR);
       }
   
   /*
  @@ -475,6 +474,49 @@
           DYNSELF.set_integer_keyed_int(nextix, value);
       }
   
  +/*
  +
  +=back
  +
  +=head2 Freeze/thaw Interface
  +
  +=over 4
  +
  +=item C<void freeze(visit_info *info)>
  +
  +Used to archive the string.
  +
  +=cut
  +
  +*/
  +    void freeze(visit_info *info) {
  +        IMAGE_IO *io = info->image_io;
  +        io->vtable->push_integer(INTERP, io, PMC_int_val(SELF));
  +        STRING * s = string_from_cstring(INTERP, PMC_data(SELF), 
PMC_int_val2(SELF)/BITS_PER_CHAR);
  +        io->vtable->push_string(INTERP, io, s);
  +    }
  +
  +/*
  +
  +=item C<void thaw(visit_info *info)>
  +
  +Used to unarchive the string.
  +
  +=cut
  +
  +*/
  +    void thaw(visit_info *info) {
  +        IMAGE_IO *io = info->image_io;
  +        SUPER(info);
  +        if (info->extra_flags == EXTRA_IS_NULL) {
  +            INTVAL size = io->vtable->shift_integer(INTERP, io);
  +            STRING * s  = io->vtable->shift_string(INTERP, io);
  +            PMC_int_val(SELF) = size;
  +            PMC_int_val2(pmc) = s->bufused * BITS_PER_CHAR;
  +            PMC_data(pmc) = mem_sys_allocate_zeroed(s->bufused);
  +            mem_sys_memcopy(PMC_data(SELF), s->strstart, s->bufused);
  +        }
  +    }
   }
   
   /*
  
  
  
  1.8       +1 -3      parrot/classes/resizablebooleanarray.pmc
  
  Index: resizablebooleanarray.pmc
  ===================================================================
  RCS file: /cvs/public/parrot/classes/resizablebooleanarray.pmc,v
  retrieving revision 1.7
  retrieving revision 1.8
  diff -u -r1.7 -r1.8
  --- resizablebooleanarray.pmc 27 Mar 2005 18:20:04 -0000      1.7
  +++ resizablebooleanarray.pmc 29 Mar 2005 19:41:00 -0000      1.8
  @@ -1,6 +1,6 @@
   /*
   Copyright: 2001-2005 The Perl Foundation.  All Rights Reserved.
  -$Id: resizablebooleanarray.pmc,v 1.7 2005/03/27 18:20:04 leo Exp $
  +$Id: resizablebooleanarray.pmc,v 1.8 2005/03/29 19:41:00 bernhard Exp $
   
   =head1 NAME
   
  @@ -107,8 +107,6 @@
               PMC_int_val(SELF) = size;
               return;
           }
  -
  -        PObj_active_destroy_SET(SELF);
       }
   
   }
  
  
  
  1.23      +67 -5     parrot/t/pmc/freeze.t
  
  Index: freeze.t
  ===================================================================
  RCS file: /cvs/public/parrot/t/pmc/freeze.t,v
  retrieving revision 1.22
  retrieving revision 1.23
  diff -u -r1.22 -r1.23
  --- freeze.t  26 Mar 2005 13:22:35 -0000      1.22
  +++ freeze.t  29 Mar 2005 19:41:03 -0000      1.23
  @@ -1,7 +1,5 @@
  -#! perl -w
  -
  -# Copyright: 2001-2004 The Perl Foundation.  All Rights Reserved.
  -# $Id: freeze.t,v 1.22 2005/03/26 13:22:35 leo Exp $
  +# Copyright: 2001-2005 The Perl Foundation.  All Rights Reserved.
  +# $Id: freeze.t,v 1.23 2005/03/29 19:41:03 bernhard Exp $
   
   =head1 NAME
   
  @@ -17,7 +15,7 @@
   
   =cut
   
  -use Parrot::Test tests => 25;
  +use Parrot::Test tests => 26;
   use Test::More;
   
   END { unlink "temp.fpmc"; };
  @@ -763,3 +761,67 @@
   ok
   OUTPUT
   
  +pir_output_is(<<'CODE', <<'OUTPUT', "freeze/thaw a ResizableBooleanArray");
  +.sub test @MAIN
  +    .local pmc original_arr, thawed_arr 
  +    .local string frozen_arr
  +    original_arr = new ResizableBooleanArray 
  +    set original_arr, 666
  +    original_arr[555] = 777
  +    
  +    # Dump some data before freezing
  +    print "Before freezing:\n"
  +    typeof S10, original_arr # type
  +    print S10
  +    print "\n"
  +    set I12, original_arr    # elements
  +    print I12
  +    print "\n"
  +    I12 = original_arr[554]
  +    print I12
  +    print "\n"
  +    I12 = original_arr[555]
  +    print I12
  +    print "\n"
  +    I12 = original_arr[556]
  +    print I12
  +    print "\n"
  +
  +    frozen_arr = freeze original_arr
  +    thawed_arr = thaw frozen_arr
  +
  +    # Dump the same data after freeze/thaw
  +    print "\nAfter freeze/thaw:\n"
  +    typeof S10, thawed_arr   # type
  +    print S10
  +    print "\n"
  +    set I12, thawed_arr      # elements
  +    print I12
  +    print "\n"
  +    I12 = thawed_arr[554]
  +    print I12
  +    print "\n"
  +    I12 = thawed_arr[555]
  +    print I12
  +    print "\n"
  +    I12 = thawed_arr[556]
  +    print I12
  +    print "\n"
  +
  +.end
  +CODE
  +Before freezing:
  +ResizableBooleanArray
  +666
  +0
  +1
  +0
  +
  +After freeze/thaw:
  +ResizableBooleanArray
  +666
  +0
  +1
  +0
  +OUTPUT
  +
  
  
  

Reply via email to