Author: dcreager
Date: Sat Oct 15 13:34:24 2011
New Revision: 1183635
URL: http://svn.apache.org/viewvc?rev=1183635&view=rev
Log:
AVRO-920. C: Reusable memory I/O objects
The avro_reader_t and avro_writer_t subclasses that work with memory
regions are now reusable; you can reset an existing reader or writer
object to point at a new memory region, or to simply reset to the
beginning of the current memory region. This lets you more easily reuse
these objects when encoding and decoding large numbers of values.
Modified:
avro/trunk/CHANGES.txt
avro/trunk/lang/c/src/avro/io.h
avro/trunk/lang/c/src/io.c
avro/trunk/lang/c/tests/performance.c
Modified: avro/trunk/CHANGES.txt
URL:
http://svn.apache.org/viewvc/avro/trunk/CHANGES.txt?rev=1183635&r1=1183634&r2=1183635&view=diff
==============================================================================
--- avro/trunk/CHANGES.txt (original)
+++ avro/trunk/CHANGES.txt Sat Oct 15 13:34:24 2011
@@ -28,6 +28,8 @@ Avro 1.6.0 (unreleased)
AVRO-919. C: Produce JSON encoding of Avro values using new value
interface. (dcreager)
+ AVRO-920. C: Memory readers and writers are now reusable. (dcreager)
+
AVRO-890: Java: Add Maven archetype for creating Avro service
projects. (Stephen Gargan via cutting)
Modified: avro/trunk/lang/c/src/avro/io.h
URL:
http://svn.apache.org/viewvc/avro/trunk/lang/c/src/avro/io.h?rev=1183635&r1=1183634&r2=1183635&view=diff
==============================================================================
--- avro/trunk/lang/c/src/avro/io.h (original)
+++ avro/trunk/lang/c/src/avro/io.h Sat Oct 15 13:34:24 2011
@@ -44,10 +44,18 @@ avro_writer_t avro_writer_file(FILE * fp
avro_reader_t avro_reader_memory(const char *buf, int64_t len);
avro_writer_t avro_writer_memory(const char *buf, int64_t len);
+void
+avro_reader_memory_set_source(avro_reader_t reader, const char *buf, int64_t
len);
+
+void
+avro_writer_memory_set_dest(avro_writer_t writer, const char *buf, int64_t
len);
+
int avro_read(avro_reader_t reader, void *buf, int64_t len);
int avro_skip(avro_reader_t reader, int64_t len);
int avro_write(avro_writer_t writer, void *buf, int64_t len);
+void avro_reader_reset(avro_reader_t reader);
+
void avro_writer_reset(avro_writer_t writer);
int64_t avro_writer_tell(avro_writer_t writer);
void avro_writer_flush(avro_writer_t writer);
Modified: avro/trunk/lang/c/src/io.c
URL:
http://svn.apache.org/viewvc/avro/trunk/lang/c/src/io.c?rev=1183635&r1=1183634&r2=1183635&view=diff
==============================================================================
--- avro/trunk/lang/c/src/io.c (original)
+++ avro/trunk/lang/c/src/io.c Sat Oct 15 13:34:24 2011
@@ -132,6 +132,17 @@ avro_reader_t avro_reader_memory(const c
return &mem_reader->reader;
}
+void
+avro_reader_memory_set_source(avro_reader_t reader, const char *buf, int64_t
len)
+{
+ if (is_memory_io(reader)) {
+ struct _avro_reader_memory_t *mem_reader =
avro_reader_to_memory(reader);
+ mem_reader->buf = buf;
+ mem_reader->len = len;
+ mem_reader->read = 0;
+ }
+}
+
avro_writer_t avro_writer_memory(const char *buf, int64_t len)
{
struct _avro_writer_memory_t *mem_writer =
@@ -147,6 +158,17 @@ avro_writer_t avro_writer_memory(const c
return &mem_writer->writer;
}
+void
+avro_writer_memory_set_dest(avro_writer_t writer, const char *buf, int64_t len)
+{
+ if (is_memory_io(writer)) {
+ struct _avro_writer_memory_t *mem_writer =
avro_writer_to_memory(writer);
+ mem_writer->buf = buf;
+ mem_writer->len = len;
+ mem_writer->written = 0;
+ }
+}
+
static int
avro_read_memory(struct _avro_reader_memory_t *reader, void *buf, int64_t len)
{
@@ -329,6 +351,14 @@ int avro_write(avro_writer_t writer, voi
return EINVAL;
}
+void
+avro_reader_reset(avro_reader_t reader)
+{
+ if (is_memory_io(reader)) {
+ avro_reader_to_memory(reader)->read = 0;
+ }
+}
+
void avro_writer_reset(avro_writer_t writer)
{
if (is_memory_io(writer)) {
Modified: avro/trunk/lang/c/tests/performance.c
URL:
http://svn.apache.org/viewvc/avro/trunk/lang/c/tests/performance.c?rev=1183635&r1=1183634&r2=1183635&view=diff
==============================================================================
--- avro/trunk/lang/c/tests/performance.c (original)
+++ avro/trunk/lang/c/tests/performance.c Sat Oct 15 13:34:24 2011
@@ -114,8 +114,8 @@ test_nested_record_datum(unsigned long n
int rc;
static char buf[4096];
- avro_reader_t reader;
- avro_writer_t writer;
+ avro_reader_t reader = avro_reader_memory(buf, sizeof(buf));
+ avro_writer_t writer = avro_writer_memory(buf, sizeof(buf));
avro_schema_t schema = NULL;
avro_schema_error_t error = NULL;
@@ -137,15 +137,13 @@ test_nested_record_datum(unsigned long n
avro_record_set_field_value(rc, in, float, "f",
rand_number(-1e10, 1e10));
avro_record_set_field_value(rc, in, double, "d",
rand_number(-1e10, 1e10));
- writer = avro_writer_memory(buf, sizeof(buf));
+ avro_writer_reset(writer);
avro_write_data(writer, schema, in);
- avro_writer_free(writer);
avro_datum_t out = NULL;
- reader = avro_reader_memory(buf, sizeof(buf));
+ avro_reader_reset(reader);
avro_read_data(reader, schema, schema, &out);
- avro_reader_free(reader);
avro_datum_equal(in, out);
avro_datum_decref(out);
@@ -153,6 +151,8 @@ test_nested_record_datum(unsigned long n
avro_datum_decref(in);
avro_schema_decref(schema);
+ avro_writer_free(writer);
+ avro_reader_free(reader);
}
@@ -197,8 +197,8 @@ test_nested_record_value_by_index(unsign
sizeof(strings) / sizeof(strings[0]);
static char buf[4096];
- avro_reader_t reader;
- avro_writer_t writer;
+ avro_reader_t reader = avro_reader_memory(buf, sizeof(buf));
+ avro_writer_t writer = avro_writer_memory(buf, sizeof(buf));
avro_schema_t schema = NULL;
avro_schema_error_t error = NULL;
@@ -238,13 +238,11 @@ test_nested_record_value_by_index(unsign
avro_value_get_by_index(&subrec, 1, &field, NULL);
avro_value_set_double(&field, rand_number(-1e10, 1e10));
- writer = avro_writer_memory(buf, sizeof(buf));
+ avro_writer_reset(writer);
avro_value_write(writer, &val);
- avro_writer_free(writer);
- reader = avro_reader_memory(buf, sizeof(buf));
+ avro_reader_reset(reader);
avro_value_read(reader, &out);
- avro_reader_free(reader);
avro_value_equal_fast(&val, &out);
}
@@ -253,6 +251,8 @@ test_nested_record_value_by_index(unsign
avro_value_decref(&out);
avro_value_iface_decref(iface);
avro_schema_decref(schema);
+ avro_writer_free(writer);
+ avro_reader_free(reader);
}
@@ -297,8 +297,8 @@ test_nested_record_value_by_name(unsigne
sizeof(strings) / sizeof(strings[0]);
static char buf[4096];
- avro_reader_t reader;
- avro_writer_t writer;
+ avro_reader_t reader = avro_reader_memory(buf, sizeof(buf));
+ avro_writer_t writer = avro_writer_memory(buf, sizeof(buf));
avro_schema_t schema = NULL;
avro_schema_error_t error = NULL;
@@ -338,13 +338,11 @@ test_nested_record_value_by_name(unsigne
avro_value_get_by_name(&subrec, "d", &field, NULL);
avro_value_set_double(&field, rand_number(-1e10, 1e10));
- writer = avro_writer_memory(buf, sizeof(buf));
+ avro_writer_reset(writer);
avro_value_write(writer, &val);
- avro_writer_free(writer);
- reader = avro_reader_memory(buf, sizeof(buf));
+ avro_reader_reset(reader);
avro_value_read(reader, &out);
- avro_reader_free(reader);
avro_value_equal_fast(&val, &out);
}
@@ -353,6 +351,8 @@ test_nested_record_value_by_name(unsigne
avro_value_decref(&out);
avro_value_iface_decref(iface);
avro_schema_decref(schema);
+ avro_writer_free(writer);
+ avro_reader_free(reader);
}