Sereal-Encoder

 view release on metacpan or  search on metacpan

author_tools/freeze_thaw_timing.pl  view on Meta::CPAN

use Benchmark::Dumb qw(cmpthese);

my $enc_nocb= Sereal::Encoder->new();
my $enc_cb= Sereal::Encoder->new( { freeze_callbacks => 1 } );
my $dec= Sereal::Decoder->new();

package Foo;

sub new {
    my $class= shift;
    return bless( {@_} => $class );
}

sub FREEZE {
    my ( $self, $serializer )= @_;
    return $self->{name};    # performance
}

sub THAW {
    my ( $class, $serializer, $data )= @_;
    return Foo->new( name => $data );

t/130_freezethaw.t  view on Meta::CPAN

    exit 0;
}

my $thaw_called= 0;
my $freeze_called= 0;

package Foo;

sub new {
    my $class= shift;
    return bless( { bar => 1, @_ } => $class );
}

sub FREEZE {
    my ( $self, $serializer )= @_;
    $freeze_called= $serializer eq 'Sereal' ? 1 : 0;
    return "frozen object", 12, [2];
}

sub THAW {
    my ( $class, $serializer, @data )= @_;

t/130_freezethaw.t  view on Meta::CPAN

        "Array of frozen values roundtrips"
    );

    return Foo->new();
}

package Bar;

sub new {
    my $class= shift;
    return bless( { bar => 1, @_ } => $class );
}

sub FREEZE {
    my ( $self, $serializer )= @_;
    return "frozen Bar";
}

package main;

my $enc= Sereal::Encoder->new( { freeze_callbacks => 1 } );

t/900_reentrancy.t  view on Meta::CPAN


# Encoder reentrancy test courtesy of Zefram

my $enc= Sereal::Encoder->new( { freeze_callbacks => 1 } );

package Foo;
sub FREEZE { $enc->encode( $_[0]->{a} ) }

sub THAW {
    my $class= shift;
    return bless( { a => Sereal::Decoder->new->decode( $_[1] ) } => $class );
}

package main;

my $data= bless( { a => 42 }, "Foo" );
my $a= $enc->encode($data);
my $output;
my $err;
eval {
    $output= Sereal::Decoder->new->decode($a);



( run in 0.227 second using v1.01-cache-2.11-cpan-65fba6d93b7 )