You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucy.apache.org by ma...@apache.org on 2009/12/03 21:29:15 UTC
svn commit: r886910 - in /lucene/lucy/trunk: core/Lucy/Object/CharBuf.bp
core/Lucy/Object/CharBuf.c perl/lib/Lucy.pm perl/lib/Lucy/Object/CharBuf.pm
perl/t/binding/029-charbuf.t
Author: marvin
Date: Thu Dec 3 20:29:15 2009
New Revision: 886910
URL: http://svn.apache.org/viewvc?rev=886910&view=rev
Log:
Commit charbuf_serialization.diff from LUCY-81, adding serialization routines
to CharBuf.
Modified:
lucene/lucy/trunk/core/Lucy/Object/CharBuf.bp
lucene/lucy/trunk/core/Lucy/Object/CharBuf.c
lucene/lucy/trunk/perl/lib/Lucy.pm
lucene/lucy/trunk/perl/lib/Lucy/Object/CharBuf.pm
lucene/lucy/trunk/perl/t/binding/029-charbuf.t
Modified: lucene/lucy/trunk/core/Lucy/Object/CharBuf.bp
URL: http://svn.apache.org/viewvc/lucene/lucy/trunk/core/Lucy/Object/CharBuf.bp?rev=886910&r1=886909&r2=886910&view=diff
==============================================================================
--- lucene/lucy/trunk/core/Lucy/Object/CharBuf.bp (original)
+++ lucene/lucy/trunk/core/Lucy/Object/CharBuf.bp Thu Dec 3 20:29:15 2009
@@ -214,6 +214,12 @@
public incremented CharBuf*
Load(CharBuf *self, Obj *dump);
+ public void
+ Serialize(CharBuf *self, OutStream *outstream);
+
+ public incremented CharBuf*
+ Deserialize(CharBuf *self, InStream *instream);
+
/** Remove Unicode whitespace characters from both top and tail.
*/
u32_t
Modified: lucene/lucy/trunk/core/Lucy/Object/CharBuf.c
URL: http://svn.apache.org/viewvc/lucene/lucy/trunk/core/Lucy/Object/CharBuf.c?rev=886910&r1=886909&r2=886910&view=diff
==============================================================================
--- lucene/lucy/trunk/core/Lucy/Object/CharBuf.c (original)
+++ lucene/lucy/trunk/core/Lucy/Object/CharBuf.c Thu Dec 3 20:29:15 2009
@@ -13,6 +13,8 @@
#include "Lucy/Object/CharBuf.h"
#include "Lucy/Object/Err.h"
+#include "Lucy/Store/InStream.h"
+#include "Lucy/Store/OutStream.h"
#include "Lucy/Util/Memory.h"
#include "Lucy/Util/StringHelper.h"
@@ -456,6 +458,28 @@
}
void
+CB_serialize(CharBuf *self, OutStream *target)
+{
+ OutStream_Write_C32(target, self->size);
+ OutStream_Write_Bytes(target, self->ptr, self->size);
+}
+
+CharBuf*
+CB_deserialize(CharBuf *self, InStream *instream)
+{
+ self = self ? self : (CharBuf*)VTable_Make_Obj(CHARBUF);
+ self->size = InStream_Read_C32(instream);
+ self->cap = self->size + 1;
+ self->ptr = (char*)MALLOCATE(self->cap);
+ InStream_Read_Bytes(instream, self->ptr, self->size);
+ self->ptr[self->size] = '\0';
+ if (!StrHelp_utf8_valid(self->ptr, self->size)) {
+ S_die_invalid_utf8(self->ptr, self->size);
+ }
+ return self;
+}
+
+void
CB_mimic_str(CharBuf *self, const char* ptr, size_t size)
{
if (!StrHelp_utf8_valid(ptr, size))
Modified: lucene/lucy/trunk/perl/lib/Lucy.pm
URL: http://svn.apache.org/viewvc/lucene/lucy/trunk/perl/lib/Lucy.pm?rev=886910&r1=886909&r2=886910&view=diff
==============================================================================
--- lucene/lucy/trunk/perl/lib/Lucy.pm (original)
+++ lucene/lucy/trunk/perl/lib/Lucy.pm Thu Dec 3 20:29:15 2009
@@ -46,6 +46,7 @@
# actual CharBuf objects.)
no warnings 'redefine';
sub clone { shift->_clone(@_) }
+ sub deserialize { shift->_deserialize(@_) }
}
package Lucy::Object::ViewCharBuf;
Modified: lucene/lucy/trunk/perl/lib/Lucy/Object/CharBuf.pm
URL: http://svn.apache.org/viewvc/lucene/lucy/trunk/perl/lib/Lucy/Object/CharBuf.pm?rev=886910&r1=886909&r2=886910&view=diff
==============================================================================
--- lucene/lucy/trunk/perl/lib/Lucy/Object/CharBuf.pm (original)
+++ lucene/lucy/trunk/perl/lib/Lucy/Object/CharBuf.pm Thu Dec 3 20:29:15 2009
@@ -32,6 +32,15 @@
OUTPUT: RETVAL
SV*
+_deserialize(either_sv, instream)
+ SV *either_sv;
+ lucy_InStream *instream;
+CODE:
+ CHY_UNUSED_VAR(either_sv);
+ RETVAL = LUCY_OBJ_TO_SV_NOINC(lucy_CB_deserialize(NULL, instream));
+OUTPUT: RETVAL
+
+SV*
to_perl(self)
lucy_CharBuf *self;
CODE:
Modified: lucene/lucy/trunk/perl/t/binding/029-charbuf.t
URL: http://svn.apache.org/viewvc/lucene/lucy/trunk/perl/t/binding/029-charbuf.t?rev=886910&r1=886909&r2=886910&view=diff
==============================================================================
--- lucene/lucy/trunk/perl/t/binding/029-charbuf.t (original)
+++ lucene/lucy/trunk/perl/t/binding/029-charbuf.t Thu Dec 3 20:29:15 2009
@@ -3,7 +3,8 @@
use lib 'buildlib';
use Lucy::Test;
-use Test::More tests => 3;
+use Test::More tests => 6;
+use Storable qw( freeze thaw );
my $smiley = "\x{263a}";
@@ -11,7 +12,24 @@
isa_ok( $charbuf, "Lucy::Object::CharBuf" );
is( $charbuf->to_perl, $smiley, "round trip UTF-8" );
+$charbuf = Lucy::Object::CharBuf->new($smiley);
+my $dupe = thaw( freeze($charbuf) );
+isa_ok( $dupe, "Lucy::Object::CharBuf",
+ "thaw/freeze produces correct object" );
+is( $dupe->to_perl, $charbuf->to_perl, "freeze/thaw" );
+
my $clone = $charbuf->clone;
is( $clone->to_perl, Lucy::Object::CharBuf->new($smiley)->to_perl,
"clone" );
+my $ram_file = Lucy::Store::RAMFile->new;
+my $outstream = Lucy::Store::OutStream->open( file => $ram_file )
+ or die Lucy->error;
+$charbuf->serialize($outstream);
+$outstream->close;
+my $instream = Lucy::Store::InStream->open( file => $ram_file )
+ or die Lucy->error;
+my $deserialized = Lucy::Object::CharBuf->deserialize($instream);
+is_deeply( $charbuf->to_perl, $deserialized->to_perl,
+ "serialize/deserialize" );
+