Author: massie
Date: Tue Jan 26 00:31:08 2010
New Revision: 903028

URL: http://svn.apache.org/viewvc?rev=903028&view=rev
Log:
AVRO-377.  Add getters and setters for all Avro datum types

Modified:
    hadoop/avro/trunk/CHANGES.txt
    hadoop/avro/trunk/lang/c/src/avro.h
    hadoop/avro/trunk/lang/c/src/datum.c
    hadoop/avro/trunk/lang/c/src/datum.h
    hadoop/avro/trunk/lang/c/src/datum_equal.c
    hadoop/avro/trunk/lang/c/src/datum_read.c
    hadoop/avro/trunk/lang/c/src/datum_validate.c
    hadoop/avro/trunk/lang/c/src/datum_write.c
    hadoop/avro/trunk/lang/c/src/schema.c
    hadoop/avro/trunk/lang/c/src/schema_printf.c
    hadoop/avro/trunk/lang/c/tests/test_avro_data.c
    hadoop/avro/trunk/lang/c/version.sh

Modified: hadoop/avro/trunk/CHANGES.txt
URL: 
http://svn.apache.org/viewvc/hadoop/avro/trunk/CHANGES.txt?rev=903028&r1=903027&r2=903028&view=diff
==============================================================================
--- hadoop/avro/trunk/CHANGES.txt (original)
+++ hadoop/avro/trunk/CHANGES.txt Tue Jan 26 00:31:08 2010
@@ -252,6 +252,8 @@
 
     AVRO-371. Add support for encoding/decoding unions (massie)
 
+    AVRO-377. Add getters and setters for all Avro datum types (massie)
+
   OPTIMIZATIONS
 
     AVRO-172. More efficient schema processing (massie)

Modified: hadoop/avro/trunk/lang/c/src/avro.h
URL: 
http://svn.apache.org/viewvc/hadoop/avro/trunk/lang/c/src/avro.h?rev=903028&r1=903027&r2=903028&view=diff
==============================================================================
--- hadoop/avro/trunk/lang/c/src/avro.h (original)
+++ hadoop/avro/trunk/lang/c/src/avro.h Tue Jan 26 00:31:08 2010
@@ -29,8 +29,8 @@
 enum avro_type_t {
        AVRO_STRING,
        AVRO_BYTES,
-       AVRO_INT,
-       AVRO_LONG,
+       AVRO_INT32,
+       AVRO_INT64,
        AVRO_FLOAT,
        AVRO_DOUBLE,
        AVRO_BOOLEAN,
@@ -64,16 +64,16 @@
 #define avro_typeof(obj)      ((obj)->type)
 #define is_avro_string(obj)   (obj && avro_typeof(obj) == AVRO_STRING)
 #define is_avro_bytes(obj)    (obj && avro_typeof(obj) == AVRO_BYTES)
-#define is_avro_int(obj)      (obj && avro_typeof(obj) == AVRO_INT)
-#define is_avro_long(obj)     (obj && avro_typeof(obj) == AVRO_LONG)
+#define is_avro_int32(obj)    (obj && avro_typeof(obj) == AVRO_INT32)
+#define is_avro_int64(obj)    (obj && avro_typeof(obj) == AVRO_INT64)
 #define is_avro_float(obj)    (obj && avro_typeof(obj) == AVRO_FLOAT)
 #define is_avro_double(obj)   (obj && avro_typeof(obj) == AVRO_DOUBLE)
 #define is_avro_boolean(obj)  (obj && avro_typeof(obj) == AVRO_BOOLEAN)
 #define is_avro_null(obj)     (obj && avro_typeof(obj) == AVRO_NULL)
 #define is_avro_primitive(obj)(is_avro_string(obj) \
                              ||is_avro_bytes(obj) \
-                             ||is_avro_int(obj) \
-                             ||is_avro_long(obj) \
+                             ||is_avro_int32(obj) \
+                             ||is_avro_int64(obj) \
                              ||is_avro_float(obj) \
                              ||is_avro_double(obj) \
                              ||is_avro_boolean(obj) \
@@ -166,6 +166,8 @@
 /*
  * datum 
  */
+
+/* constructors */
 typedef struct avro_obj_t *avro_datum_t;
 avro_datum_t avro_string(const char *str);
 avro_datum_t avro_wrapstring(const char *str);
@@ -173,38 +175,68 @@
 avro_datum_t avro_bytes(const char *buf, int64_t len);
 avro_datum_t avro_wrapbytes(const char *buf, int64_t len);
 avro_datum_t avro_givebytes(const char *buf, int64_t len);
-avro_datum_t avro_int(int32_t i);
-avro_datum_t avro_long(int64_t l);
+avro_datum_t avro_int32(int32_t i);
+avro_datum_t avro_int64(int64_t l);
 avro_datum_t avro_float(float f);
 avro_datum_t avro_double(double d);
 avro_datum_t avro_boolean(int8_t i);
 avro_datum_t avro_null(void);
-
 avro_datum_t avro_record(const char *name);
-avro_datum_t avro_record_field_get(const avro_datum_t record,
-                                  const char *field_name);
-int avro_record_field_set(const avro_datum_t record,
-                         const char *field_name, const avro_datum_t value);
-
 avro_datum_t avro_enum(const char *name, const char *symbol);
-
 avro_datum_t avro_fixed(const char *name, const char *bytes,
                        const int64_t size);
 avro_datum_t avro_wrapfixed(const char *name, const char *bytes,
                            const int64_t size);
 avro_datum_t avro_givefixed(const char *name, const char *bytes,
                            const int64_t size);
-
 avro_datum_t avro_map(void);
+avro_datum_t avro_array(void);
+avro_datum_t avro_union(const avro_schema_t schema, const avro_datum_t datum);
+
+/* getters */
+int avro_string_get(avro_datum_t datum, char **p);
+int avro_bytes_get(avro_datum_t datum, char **bytes, int64_t * size);
+int avro_int32_get(avro_datum_t datum, int32_t * i);
+int avro_int64_get(avro_datum_t datum, int64_t * l);
+int avro_float_get(avro_datum_t datum, float *f);
+int avro_double_get(avro_datum_t datum, double *d);
+int avro_boolean_get(avro_datum_t datum, int8_t * i);
+
+int avro_fixed_get(avro_datum_t datum, char **bytes, int64_t * size);
+avro_datum_t avro_record_field_get(const avro_datum_t record,
+                                  const char *field_name);
+
+/* setters */
+int avro_string_set(avro_datum_t datum, const char *p);
+int avro_givestring_set(avro_datum_t datum, const char *p);
+int avro_wrapstring_set(avro_datum_t datum, const char *p);
+
+int avro_bytes_set(avro_datum_t datum, const char *bytes, const int64_t size);
+int avro_givebytes_set(avro_datum_t datum, const char *bytes,
+                      const int64_t size);
+int avro_wrapbytes_set(avro_datum_t datum, const char *bytes,
+                      const int64_t size);
+
+int avro_int32_set(avro_datum_t datum, const int32_t i);
+int avro_int64_set(avro_datum_t datum, const int64_t l);
+int avro_float_set(avro_datum_t datum, const float f);
+int avro_double_set(avro_datum_t datum, const double d);
+int avro_boolean_set(avro_datum_t datum, const int8_t i);
+
+int avro_fixed_set(avro_datum_t datum, const char *bytes, const int64_t size);
+int avro_givefixed_set(avro_datum_t datum, const char *bytes,
+                      const int64_t size);
+int avro_wrapfixed_set(avro_datum_t datum, const char *bytes,
+                      const int64_t size);
+
+int avro_record_field_set(const avro_datum_t record,
+                         const char *field_name, const avro_datum_t value);
 int avro_map_set(const avro_datum_t map, const char *key,
                 const avro_datum_t value);
-
-avro_datum_t avro_array(void);
 int avro_array_append_datum(const avro_datum_t array_datum,
                            const avro_datum_t datum);
 
-avro_datum_t avro_union(const avro_schema_t schema, const avro_datum_t datum);
-
+/* reference counting */
 avro_datum_t avro_datum_incref(avro_datum_t value);
 void avro_datum_decref(avro_datum_t value);
 

Modified: hadoop/avro/trunk/lang/c/src/datum.c
URL: 
http://svn.apache.org/viewvc/hadoop/avro/trunk/lang/c/src/datum.c?rev=903028&r1=903027&r2=903028&view=diff
==============================================================================
--- hadoop/avro/trunk/lang/c/src/datum.c (original)
+++ hadoop/avro/trunk/lang/c/src/datum.c Tue Jan 26 00:31:08 2010
@@ -62,6 +62,55 @@
        return avro_string_private((char *)str, NULL);
 }
 
+int avro_string_get(avro_datum_t datum, char **p)
+{
+       if (!(is_avro_datum(datum) && is_avro_string(datum)) || !p) {
+               return EINVAL;
+       }
+       *p = avro_datum_to_string(datum)->s;
+       return 0;
+}
+
+static int avro_string_set_private(avro_datum_t datum, const char *p,
+                                  void (*string_free) (void *ptr))
+{
+       struct avro_string_datum_t *string;
+       if (!(is_avro_datum(datum) && is_avro_string(datum)) || !p) {
+               return EINVAL;
+       }
+       string = avro_datum_to_string(datum);
+       if (string->free) {
+               string->free(string->s);
+       }
+       string->free = string_free;
+       string->s = (char *)p;
+       return 0;
+}
+
+int avro_string_set(avro_datum_t datum, const char *p)
+{
+       char *string_copy = strdup(p);
+       int rval;
+       if (!string_copy) {
+               return ENOMEM;
+       }
+       rval = avro_string_set_private(datum, p, free);
+       if (rval) {
+               free(string_copy);
+       }
+       return rval;
+}
+
+int avro_givestring_set(avro_datum_t datum, const char *p)
+{
+       return avro_string_set_private(datum, p, free);
+}
+
+int avro_wrapstring_set(avro_datum_t datum, const char *p)
+{
+       return avro_string_set_private(datum, p, NULL);
+}
+
 static avro_datum_t avro_bytes_private(char *bytes, int64_t size,
                                       void (*bytes_free) (void *ptr))
 {
@@ -98,32 +147,129 @@
        return avro_bytes_private((char *)bytes, size, NULL);
 }
 
-avro_datum_t avro_int(int32_t i)
+static int avro_bytes_set_private(avro_datum_t datum, const char *bytes,
+                                 const int64_t size,
+                                 void (*bytes_free) (void *ptr))
+{
+       struct avro_bytes_datum_t *b;
+
+       if (!(is_avro_datum(datum) && is_avro_bytes(datum))) {
+               return EINVAL;
+       }
+
+       b = avro_datum_to_bytes(datum);
+       if (b->free) {
+               b->free(b->bytes);
+       }
+
+       b->free = bytes_free;
+       b->bytes = (char *)bytes;
+       return 0;
+}
+
+int avro_bytes_set(avro_datum_t datum, const char *bytes, const int64_t size)
+{
+       int rval;
+       char *bytes_copy = malloc(size);
+       if (!bytes_copy) {
+               return ENOMEM;
+       }
+       memcpy(bytes_copy, bytes, size);
+       rval = avro_bytes_set_private(datum, bytes, size, free);
+       if (rval) {
+               free(bytes_copy);
+       }
+       return rval;
+}
+
+int avro_givebytes_set(avro_datum_t datum, const char *bytes,
+                      const int64_t size)
+{
+       return avro_bytes_set_private(datum, bytes, size, free);
+}
+
+int avro_wrapbytes_set(avro_datum_t datum, const char *bytes,
+                      const int64_t size)
+{
+       return avro_bytes_set_private(datum, bytes, size, NULL);
+}
+
+int avro_bytes_get(avro_datum_t datum, char **bytes, int64_t * size)
+{
+       if (!(is_avro_datum(datum) && is_avro_string(datum)) || !bytes || 
!size) {
+               return EINVAL;
+       }
+       *bytes = avro_datum_to_bytes(datum)->bytes;
+       *size = avro_datum_to_bytes(datum)->size;
+       return 0;
+}
+
+avro_datum_t avro_int32(int32_t i)
 {
-       struct avro_int_datum_t *datum =
-           malloc(sizeof(struct avro_int_datum_t));
+       struct avro_int32_datum_t *datum =
+           malloc(sizeof(struct avro_int32_datum_t));
        if (!datum) {
                return NULL;
        }
-       datum->i = i;
+       datum->i32 = i;
 
-       avro_datum_init(&datum->obj, AVRO_INT);
+       avro_datum_init(&datum->obj, AVRO_INT32);
        return &datum->obj;
 }
 
-avro_datum_t avro_long(int64_t l)
+int avro_int32_get(avro_datum_t datum, int32_t * i)
+{
+       if (!(is_avro_datum(datum) && is_avro_int32(datum)) || !i) {
+               return EINVAL;
+       }
+       *i = avro_datum_to_int32(datum)->i32;
+       return 0;
+}
+
+int avro_int32_set(avro_datum_t datum, const int32_t i)
+{
+       struct avro_int32_datum_t *intp;
+       if (!(is_avro_datum(datum) && is_avro_int32(datum))) {
+               return EINVAL;
+       }
+       intp = avro_datum_to_int32(datum);
+       intp->i32 = i;
+       return 0;
+}
+
+avro_datum_t avro_int64(int64_t l)
 {
-       struct avro_long_datum_t *datum =
-           malloc(sizeof(struct avro_long_datum_t));
+       struct avro_int64_datum_t *datum =
+           malloc(sizeof(struct avro_int64_datum_t));
        if (!datum) {
                return NULL;
        }
-       datum->l = l;
+       datum->i64 = l;
 
-       avro_datum_init(&datum->obj, AVRO_LONG);
+       avro_datum_init(&datum->obj, AVRO_INT64);
        return &datum->obj;
 }
 
+int avro_int64_get(avro_datum_t datum, int64_t * l)
+{
+       if (!(is_avro_datum(datum) && is_avro_int64(datum)) || !l) {
+               return EINVAL;
+       }
+       *l = avro_datum_to_int64(datum)->i64;
+       return 0;
+}
+
+int avro_int64_set(avro_datum_t datum, const int64_t l)
+{
+       struct avro_int64_datum_t *longp;
+       if (!(is_avro_datum(datum) && is_avro_int64(datum))) {
+               return EINVAL;
+       }
+       longp = avro_datum_to_int64(datum);
+       longp->i64 = l;
+       return 0;
+}
+
 avro_datum_t avro_float(float f)
 {
        struct avro_float_datum_t *datum =
@@ -137,6 +283,26 @@
        return &datum->obj;
 }
 
+int avro_float_set(avro_datum_t datum, const float f)
+{
+       struct avro_float_datum_t *floatp;
+       if (!(is_avro_datum(datum) && is_avro_float(datum))) {
+               return EINVAL;
+       }
+       floatp = avro_datum_to_float(datum);
+       floatp->f = f;
+       return 0;
+}
+
+int avro_float_get(avro_datum_t datum, float *f)
+{
+       if (!(is_avro_datum(datum) && is_avro_float(datum)) || !f) {
+               return EINVAL;
+       }
+       *f = avro_datum_to_float(datum)->f;
+       return 0;
+}
+
 avro_datum_t avro_double(double d)
 {
        struct avro_double_datum_t *datum =
@@ -150,6 +316,26 @@
        return &datum->obj;
 }
 
+int avro_double_set(avro_datum_t datum, const double d)
+{
+       struct avro_double_datum_t *doublep;
+       if (!(is_avro_datum(datum) && is_avro_double(datum))) {
+               return EINVAL;
+       }
+       doublep = avro_datum_to_double(datum);
+       doublep->d = d;
+       return 0;
+}
+
+int avro_double_get(avro_datum_t datum, double *d)
+{
+       if (!(is_avro_datum(datum) && is_avro_double(datum)) || !d) {
+               return EINVAL;
+       }
+       *d = avro_datum_to_double(datum)->d;
+       return 0;
+}
+
 avro_datum_t avro_boolean(int8_t i)
 {
        struct avro_boolean_datum_t *datum =
@@ -162,6 +348,26 @@
        return &datum->obj;
 }
 
+int avro_boolean_set(avro_datum_t datum, const int8_t i)
+{
+       struct avro_boolean_datum_t *booleanp;
+       if (!(is_avro_datum(datum) && is_avro_boolean(datum))) {
+               return EINVAL;
+       }
+       booleanp = avro_datum_to_boolean(datum);
+       booleanp->i = i;
+       return 0;
+}
+
+int avro_boolean_get(avro_datum_t datum, int8_t * i)
+{
+       if (!(is_avro_datum(datum) && is_avro_boolean(datum)) || !i) {
+               return EINVAL;
+       }
+       *i = avro_datum_to_boolean(datum)->i;
+       return 0;
+}
+
 avro_datum_t avro_null(void)
 {
        static struct avro_obj_t obj = {
@@ -289,6 +495,63 @@
        return avro_fixed_private(name, bytes, size, free);
 }
 
+static int avro_fixed_set_private(avro_datum_t datum, const char *bytes,
+                                 const int64_t size,
+                                 void (*fixed_free) (void *ptr))
+{
+       struct avro_fixed_datum_t *fixed;
+
+       if (!(is_avro_datum(datum) && is_avro_fixed(datum))) {
+               return EINVAL;
+       }
+
+       fixed = avro_datum_to_fixed(datum);
+       if (fixed->free) {
+               fixed->free(fixed->bytes);
+       }
+
+       fixed->free = fixed_free;
+       fixed->bytes = (char *)bytes;
+       return 0;
+}
+
+int avro_fixed_set(avro_datum_t datum, const char *bytes, const int64_t size)
+{
+       int rval;
+       char *bytes_copy = malloc(size);
+       if (!bytes_copy) {
+               return ENOMEM;
+       }
+       memcpy(bytes_copy, bytes, size);
+       rval = avro_fixed_set_private(datum, bytes, size, free);
+       if (rval) {
+               free(bytes_copy);
+       }
+       return rval;
+}
+
+int avro_givefixed_set(avro_datum_t datum, const char *bytes,
+                      const int64_t size)
+{
+       return avro_fixed_set_private(datum, bytes, size, free);
+}
+
+int avro_wrapfixed_set(avro_datum_t datum, const char *bytes,
+                      const int64_t size)
+{
+       return avro_fixed_set_private(datum, bytes, size, NULL);
+}
+
+int avro_fixed_get(avro_datum_t datum, char **bytes, int64_t * size)
+{
+       if (!(is_avro_datum(datum) && is_avro_string(datum)) || !bytes || 
!size) {
+               return EINVAL;
+       }
+       *bytes = avro_datum_to_fixed(datum)->bytes;
+       *size = avro_datum_to_fixed(datum)->size;
+       return 0;
+}
+
 avro_datum_t avro_map(void)
 {
        struct avro_map_datum_t *datum =
@@ -395,15 +658,15 @@
                                free(bytes);
                        }
                        break;
-               case AVRO_INT:{
-                               struct avro_int_datum_t *i;
-                               i = avro_datum_to_int(datum);
+               case AVRO_INT32:{
+                               struct avro_int32_datum_t *i;
+                               i = avro_datum_to_int32(datum);
                                free(i);
                        }
                        break;
-               case AVRO_LONG:{
-                               struct avro_long_datum_t *l;
-                               l = avro_datum_to_long(datum);
+               case AVRO_INT64:{
+                               struct avro_int64_datum_t *l;
+                               l = avro_datum_to_int64(datum);
                                free(l);
                        }
                        break;

Modified: hadoop/avro/trunk/lang/c/src/datum.h
URL: 
http://svn.apache.org/viewvc/hadoop/avro/trunk/lang/c/src/datum.h?rev=903028&r1=903027&r2=903028&view=diff
==============================================================================
--- hadoop/avro/trunk/lang/c/src/datum.h (original)
+++ hadoop/avro/trunk/lang/c/src/datum.h Tue Jan 26 00:31:08 2010
@@ -35,14 +35,14 @@
        void (*free) (void *ptr);
 };
 
-struct avro_int_datum_t {
+struct avro_int32_datum_t {
        struct avro_obj_t obj;
-       int32_t i;
+       int32_t i32;
 };
 
-struct avro_long_datum_t {
+struct avro_int64_datum_t {
        struct avro_obj_t obj;
-       int64_t l;
+       int64_t i64;
 };
 
 struct avro_float_datum_t {
@@ -98,8 +98,8 @@
 
 #define avro_datum_to_string(datum_)    (container_of(datum_, struct 
avro_string_datum_t, obj))
 #define avro_datum_to_bytes(datum_)     (container_of(datum_, struct 
avro_bytes_datum_t, obj))
-#define avro_datum_to_int(datum_)       (container_of(datum_, struct 
avro_int_datum_t, obj))
-#define avro_datum_to_long(datum_)      (container_of(datum_, struct 
avro_long_datum_t, obj))
+#define avro_datum_to_int32(datum_)     (container_of(datum_, struct 
avro_int32_datum_t, obj))
+#define avro_datum_to_int64(datum_)     (container_of(datum_, struct 
avro_int64_datum_t, obj))
 #define avro_datum_to_float(datum_)     (container_of(datum_, struct 
avro_float_datum_t, obj))
 #define avro_datum_to_double(datum_)    (container_of(datum_, struct 
avro_double_datum_t, obj))
 #define avro_datum_to_boolean(datum_)   (container_of(datum_, struct 
avro_boolean_datum_t, obj))

Modified: hadoop/avro/trunk/lang/c/src/datum_equal.c
URL: 
http://svn.apache.org/viewvc/hadoop/avro/trunk/lang/c/src/datum_equal.c?rev=903028&r1=903027&r2=903028&view=diff
==============================================================================
--- hadoop/avro/trunk/lang/c/src/datum_equal.c (original)
+++ hadoop/avro/trunk/lang/c/src/datum_equal.c Tue Jan 26 00:31:08 2010
@@ -113,10 +113,12 @@
                    && memcmp(avro_datum_to_bytes(a)->bytes,
                              avro_datum_to_bytes(b)->bytes,
                              avro_datum_to_bytes(a)->size) == 0;
-       case AVRO_INT:
-               return avro_datum_to_int(a)->i == avro_datum_to_int(b)->i;
-       case AVRO_LONG:
-               return avro_datum_to_long(a)->l == avro_datum_to_long(b)->l;
+       case AVRO_INT32:
+               return avro_datum_to_int32(a)->i32 ==
+                   avro_datum_to_int32(b)->i32;
+       case AVRO_INT64:
+               return avro_datum_to_int64(a)->i64 ==
+                   avro_datum_to_int64(b)->i64;
        case AVRO_FLOAT:
                return avro_datum_to_float(a)->f == avro_datum_to_float(b)->f;
        case AVRO_DOUBLE:

Modified: hadoop/avro/trunk/lang/c/src/datum_read.c
URL: 
http://svn.apache.org/viewvc/hadoop/avro/trunk/lang/c/src/datum_read.c?rev=903028&r1=903027&r2=903028&view=diff
==============================================================================
--- hadoop/avro/trunk/lang/c/src/datum_read.c (original)
+++ hadoop/avro/trunk/lang/c/src/datum_read.c Tue Jan 26 00:31:08 2010
@@ -32,14 +32,14 @@
        case AVRO_UNION:
                return 1;
 
-       case AVRO_INT:
-               return is_avro_int(readers_schema)
-                   || is_avro_long(readers_schema)
+       case AVRO_INT32:
+               return is_avro_int32(readers_schema)
+                   || is_avro_int64(readers_schema)
                    || is_avro_float(readers_schema)
                    || is_avro_double(readers_schema);
 
-       case AVRO_LONG:
-               return is_avro_long(readers_schema)
+       case AVRO_INT64:
+               return is_avro_int64(readers_schema)
                    || is_avro_float(readers_schema)
                    || is_avro_double(readers_schema);
 
@@ -353,22 +353,22 @@
                }
                break;
 
-       case AVRO_INT:
+       case AVRO_INT32:
                {
                        int32_t i;
                        rval = enc->read_int(reader, &i);
                        if (!rval) {
-                               *datum = avro_int(i);
+                               *datum = avro_int32(i);
                        }
                }
                break;
 
-       case AVRO_LONG:
+       case AVRO_INT64:
                {
                        int64_t l;
                        rval = enc->read_long(reader, &l);
                        if (!rval) {
-                               *datum = avro_long(l);
+                               *datum = avro_int64(l);
                        }
                }
                break;

Modified: hadoop/avro/trunk/lang/c/src/datum_validate.c
URL: 
http://svn.apache.org/viewvc/hadoop/avro/trunk/lang/c/src/datum_validate.c?rev=903028&r1=903027&r2=903028&view=diff
==============================================================================
--- hadoop/avro/trunk/lang/c/src/datum_validate.c (original)
+++ hadoop/avro/trunk/lang/c/src/datum_validate.c Tue Jan 26 00:31:08 2010
@@ -57,21 +57,21 @@
        case AVRO_BYTES:
                return is_avro_bytes(datum);
 
-       case AVRO_INT:
-               return is_avro_int(datum)
-                   || (is_avro_long(datum)
-                       && (INT_MIN <= avro_datum_to_long(datum)->l
-                           && avro_datum_to_long(datum)->l <= INT_MAX));
+       case AVRO_INT32:
+               return is_avro_int32(datum)
+                   || (is_avro_int64(datum)
+                       && (INT_MIN <= avro_datum_to_int64(datum)->i64
+                           && avro_datum_to_int64(datum)->i64 <= INT_MAX));
 
-       case AVRO_LONG:
-               return is_avro_int(datum) || is_avro_long(datum);
+       case AVRO_INT64:
+               return is_avro_int32(datum) || is_avro_int64(datum);
 
        case AVRO_FLOAT:
-               return is_avro_int(datum) || is_avro_long(datum)
+               return is_avro_int32(datum) || is_avro_int64(datum)
                    || is_avro_float(datum);
 
        case AVRO_DOUBLE:
-               return is_avro_int(datum) || is_avro_long(datum)
+               return is_avro_int32(datum) || is_avro_int64(datum)
                    || is_avro_float(datum) || is_avro_double(datum);
 
        case AVRO_FIXED:

Modified: hadoop/avro/trunk/lang/c/src/datum_write.c
URL: 
http://svn.apache.org/viewvc/hadoop/avro/trunk/lang/c/src/datum_write.c?rev=903028&r1=903027&r2=903028&view=diff
==============================================================================
--- hadoop/avro/trunk/lang/c/src/datum_write.c (original)
+++ hadoop/avro/trunk/lang/c/src/datum_write.c Tue Jan 26 00:31:08 2010
@@ -181,13 +181,13 @@
                    enc->write_bytes(writer, avro_datum_to_bytes(datum)->bytes,
                                     avro_datum_to_bytes(datum)->size);
                break;
-       case AVRO_INT:
+       case AVRO_INT32:
                {
                        int32_t i;
-                       if (is_avro_int(datum)) {
-                               i = avro_datum_to_int(datum)->i;
-                       } else if (is_avro_long(datum)) {
-                               i = (int32_t) avro_datum_to_long(datum)->l;
+                       if (is_avro_int32(datum)) {
+                               i = avro_datum_to_int32(datum)->i32;
+                       } else if (is_avro_int64(datum)) {
+                               i = (int32_t) avro_datum_to_int64(datum)->i64;
                        } else {
                                assert(0
                                       &&
@@ -196,16 +196,16 @@
                        rval = enc->write_int(writer, i);
                }
                break;
-       case AVRO_LONG:
-               rval = enc->write_long(writer, avro_datum_to_long(datum)->l);
+       case AVRO_INT64:
+               rval = enc->write_long(writer, avro_datum_to_int64(datum)->i64);
                break;
        case AVRO_FLOAT:
                {
                        float f;
-                       if (is_avro_int(datum)) {
-                               f = (float)(avro_datum_to_int(datum)->i);
-                       } else if (is_avro_long(datum)) {
-                               f = (float)(avro_datum_to_long(datum)->l);
+                       if (is_avro_int32(datum)) {
+                               f = (float)(avro_datum_to_int32(datum)->i32);
+                       } else if (is_avro_int64(datum)) {
+                               f = (float)(avro_datum_to_int64(datum)->i64);
                        } else if (is_avro_float(datum)) {
                                f = avro_datum_to_float(datum)->f;
                        } else if (is_avro_double(datum)) {
@@ -221,10 +221,10 @@
        case AVRO_DOUBLE:
                {
                        double d;
-                       if (is_avro_int(datum)) {
-                               d = (double)(avro_datum_to_int(datum)->i);
-                       } else if (is_avro_long(datum)) {
-                               d = (double)(avro_datum_to_long(datum)->l);
+                       if (is_avro_int32(datum)) {
+                               d = (double)(avro_datum_to_int32(datum)->i32);
+                       } else if (is_avro_int64(datum)) {
+                               d = (double)(avro_datum_to_int64(datum)->i64);
                        } else if (is_avro_float(datum)) {
                                d = (double)(avro_datum_to_float(datum)->f);
                        } else if (is_avro_double(datum)) {

Modified: hadoop/avro/trunk/lang/c/src/schema.c
URL: 
http://svn.apache.org/viewvc/hadoop/avro/trunk/lang/c/src/schema.c?rev=903028&r1=903027&r2=903028&view=diff
==============================================================================
--- hadoop/avro/trunk/lang/c/src/schema.c (original)
+++ hadoop/avro/trunk/lang/c/src/schema.c Tue Jan 26 00:31:08 2010
@@ -64,8 +64,8 @@
                switch (avro_typeof(schema)) {
                case AVRO_STRING:
                case AVRO_BYTES:
-               case AVRO_INT:
-               case AVRO_LONG:
+               case AVRO_INT32:
+               case AVRO_INT64:
                case AVRO_FLOAT:
                case AVRO_DOUBLE:
                case AVRO_BOOLEAN:
@@ -195,7 +195,7 @@
 avro_schema_t avro_schema_int(void)
 {
        static struct avro_obj_t obj = {
-               .type = AVRO_INT,
+               .type = AVRO_INT32,
                .class_type = AVRO_SCHEMA,
                .refcount = 1
        };
@@ -205,7 +205,7 @@
 avro_schema_t avro_schema_long(void)
 {
        static struct avro_obj_t obj = {
-               .type = AVRO_LONG,
+               .type = AVRO_INT64,
                .class_type = AVRO_SCHEMA,
                .refcount = 1
        };
@@ -468,9 +468,9 @@
        } else if (strcmp(type_str, "bytes") == 0) {
                *type = AVRO_BYTES;
        } else if (strcmp(type_str, "int") == 0) {
-               *type = AVRO_INT;
+               *type = AVRO_INT32;
        } else if (strcmp(type_str, "long") == 0) {
-               *type = AVRO_LONG;
+               *type = AVRO_INT64;
        } else if (strcmp(type_str, "float") == 0) {
                *type = AVRO_FLOAT;
        } else if (strcmp(type_str, "double") == 0) {
@@ -522,11 +522,11 @@
                *schema = avro_schema_bytes();
                break;
 
-       case AVRO_INT:
+       case AVRO_INT32:
                *schema = avro_schema_int();
                break;
 
-       case AVRO_LONG:
+       case AVRO_INT64:
                *schema = avro_schema_long();
                break;
 
@@ -804,8 +804,8 @@
        switch (avro_typeof(schema)) {
        case AVRO_STRING:
        case AVRO_BYTES:
-       case AVRO_INT:
-       case AVRO_LONG:
+       case AVRO_INT32:
+       case AVRO_INT64:
        case AVRO_FLOAT:
        case AVRO_DOUBLE:
        case AVRO_BOOLEAN:

Modified: hadoop/avro/trunk/lang/c/src/schema_printf.c
URL: 
http://svn.apache.org/viewvc/hadoop/avro/trunk/lang/c/src/schema_printf.c?rev=903028&r1=903027&r2=903028&view=diff
==============================================================================
--- hadoop/avro/trunk/lang/c/src/schema_printf.c (original)
+++ hadoop/avro/trunk/lang/c/src/schema_printf.c Tue Jan 26 00:31:08 2010
@@ -152,9 +152,9 @@
                avro_schema_primitive_print("string", args);
        } else if (is_avro_bytes(schema)) {
                avro_schema_primitive_print("bytes", args);
-       } else if (is_avro_int(schema)) {
+       } else if (is_avro_int32(schema)) {
                avro_schema_primitive_print("int", args);
-       } else if (is_avro_long(schema)) {
+       } else if (is_avro_int64(schema)) {
                avro_schema_primitive_print("long", args);
        } else if (is_avro_float(schema)) {
                avro_schema_primitive_print("float", args);

Modified: hadoop/avro/trunk/lang/c/tests/test_avro_data.c
URL: 
http://svn.apache.org/viewvc/hadoop/avro/trunk/lang/c/tests/test_avro_data.c?rev=903028&r1=903027&r2=903028&view=diff
==============================================================================
--- hadoop/avro/trunk/lang/c/tests/test_avro_data.c (original)
+++ hadoop/avro/trunk/lang/c/tests/test_avro_data.c Tue Jan 26 00:31:08 2010
@@ -16,6 +16,7 @@
  */
 #include <stdlib.h>
 #include <stdint.h>
+#include <limits.h>
 #include <time.h>
 #include <string.h>
 #include "avro.h"
@@ -26,6 +27,27 @@
 
 typedef int (*avro_test) (void);
 
+void init_rand(void)
+{
+       srand(time(NULL));
+}
+
+double rand_number(double from, double to)
+{
+       double range = to - from;
+       return from + ((double)rand() / (RAND_MAX + 1.0)) * range;
+}
+
+int64_t rand_int64(void)
+{
+       return (int64_t) rand_number(LONG_MIN, LONG_MAX);
+}
+
+int32_t rand_int32(void)
+{
+       return (int32_t) rand_number(INT_MIN, INT_MAX);
+}
+
 void
 write_read_check(avro_schema_t writers_schema,
                 avro_schema_t readers_schema, avro_datum_t datum, char *type)
@@ -82,12 +104,12 @@
        return 0;
 }
 
-static int test_int(void)
+static int test_int32(void)
 {
        int i;
        avro_schema_t writer_schema = avro_schema_int();
        for (i = 0; i < 100; i++) {
-               avro_datum_t datum = avro_int(rand());
+               avro_datum_t datum = avro_int32(rand_int32());
                write_read_check(writer_schema, NULL, datum, "int");
                avro_datum_decref(datum);
        }
@@ -95,12 +117,12 @@
        return 0;
 }
 
-static int test_long(void)
+static int test_int64(void)
 {
        int i;
        avro_schema_t writer_schema = avro_schema_long();
        for (i = 0; i < 100; i++) {
-               avro_datum_t datum = avro_long(rand());
+               avro_datum_t datum = avro_int64(rand_int64());
                write_read_check(writer_schema, NULL, datum, "long");
                avro_datum_decref(datum);
        }
@@ -113,7 +135,7 @@
        int i;
        avro_schema_t schema = avro_schema_double();
        for (i = 0; i < 100; i++) {
-               avro_datum_t datum = avro_double((double)(rand()));
+               avro_datum_t datum = avro_double(rand_number(-1.0E10, 1.0E10));
                write_read_check(schema, NULL, datum, "double");
                avro_datum_decref(datum);
        }
@@ -126,7 +148,7 @@
        int i;
        avro_schema_t schema = avro_schema_double();
        for (i = 0; i < 100; i++) {
-               avro_datum_t datum = avro_double((double)(rand()));
+               avro_datum_t datum = avro_double(rand_number(-1.0E10, 1.0E10));
                write_read_check(schema, NULL, datum, "float");
                avro_datum_decref(datum);
        }
@@ -166,7 +188,7 @@
 
        avro_record_field_set(datum, "name",
                              avro_wrapstring("Joseph Campbell"));
-       avro_record_field_set(datum, "age", avro_int(83));
+       avro_record_field_set(datum, "age", avro_int32(83));
 
        write_read_check(schema, NULL, datum, "record");
 
@@ -199,7 +221,7 @@
        avro_datum_t datum = avro_array();
 
        for (i = 0; i < 10; i++) {
-               rval = avro_array_append_datum(datum, avro_int(i));
+               rval = avro_array_append_datum(datum, avro_int32(i));
                if (rval) {
                        exit(rval);
                }
@@ -218,7 +240,7 @@
        char *nums[] =
            { "zero", "one", "two", "three", "four", "five", "six", NULL };
        while (nums[i]) {
-               avro_map_set(datum, nums[i], avro_long(i));
+               avro_map_set(datum, nums[i], avro_int64(i));
                i++;
        }
        write_read_check(schema, NULL, datum, "map");
@@ -265,8 +287,8 @@
                {
                "string", test_string}, {
                "bytes", test_bytes}, {
-               "int", test_int}, {
-               "long", test_long}, {
+               "int", test_int32}, {
+               "long", test_int64}, {
                "float", test_float}, {
                "double", test_double}, {
                "boolean", test_boolean}, {
@@ -279,7 +301,7 @@
                "union", test_union}
        };
 
-       srandom(time(NULL));
+       init_rand();
        for (i = 0; i < sizeof(tests) / sizeof(tests[0]); i++) {
                struct avro_tests *test = tests + i;
                fprintf(stderr, "**** Running %s tests ****\n", test->name);

Modified: hadoop/avro/trunk/lang/c/version.sh
URL: 
http://svn.apache.org/viewvc/hadoop/avro/trunk/lang/c/version.sh?rev=903028&r1=903027&r2=903028&view=diff
==============================================================================
--- hadoop/avro/trunk/lang/c/version.sh (original)
+++ hadoop/avro/trunk/lang/c/version.sh Tue Jan 26 00:31:08 2010
@@ -18,7 +18,7 @@
 #         libavro_binary_age = 0
 #         libavro_interface_age = 0
 #
-libavro_micro_version=11
+libavro_micro_version=12
 libavro_interface_age=0
 libavro_binary_age=0
 


Reply via email to