19 using System.Collections.Generic;
    51             return new GenericArrayAccess();
    56             return new GenericEnumAccess(readerSchema);
    61             return new GenericMapAccess();
    66             return new GenericRecordAccess(readerSchema);
    71             return new GenericFixedAccess(readerSchema);
    74         class GenericEnumAccess : EnumAccess
    83             public object CreateEnum(
object reuse, 
int ordinal)
    85                 if (reuse is GenericEnum)
    87                     var ge = (GenericEnum) reuse;
    88                     if (ge.Schema.Equals(
this.schema))
    90                         ge.Value = this.schema[ordinal];
    94                 return new GenericEnum(this.schema, this.schema[ordinal]);
    98         internal class GenericRecordAccess : RecordAccess
   100             private RecordSchema schema;
   102             public GenericRecordAccess(RecordSchema schema)
   104                 this.schema = schema;
   107             public object CreateRecord(
object reuse)
   109                 GenericRecord ru = (reuse == 
null || !(reuse is GenericRecord) || !(reuse as GenericRecord).Schema.Equals(this.schema)) ?
   110                     new GenericRecord(this.schema) :
   111                     reuse as GenericRecord;
   115             public object GetField(
object record, 
string fieldName, 
int fieldPos)
   118                 if(!((GenericRecord)record).TryGetValue(fieldName, out result))
   125             public void AddField(
object record, 
string fieldName, 
int fieldPos, 
object fieldValue)
   127                 ((GenericRecord)record).Add(fieldName, fieldValue);
   131         class GenericFixedAccess : FixedAccess
   133             private FixedSchema schema;
   135             public GenericFixedAccess(FixedSchema schema)
   137                 this.schema = schema;
   140             public object CreateFixed(
object reuse)
   142                 return (reuse is GenericFixed && (reuse as GenericFixed).Schema.Equals(
this.schema)) ?
   143                     reuse : 
new GenericFixed(this.schema);
   146             public byte[] GetFixedBuffer( 
object f )
   148                 return ((GenericFixed)f).Value;
   152         class GenericArrayAccess : ArrayAccess
   154             public object Create(
object reuse)
   156                     return (reuse is 
object[]) ? reuse : 
new object[0];
   159             public void EnsureSize(ref 
object array, 
int targetSize)
   161                 if (((
object[])array).Length < targetSize)
   162                     SizeTo(ref array, targetSize);
   165             public void Resize(ref 
object array, 
int targetSize)
   167                 SizeTo(ref array, targetSize);
   170             public void AddElements( 
object arrayObj, 
int elements, 
int index, 
ReadItem itemReader, 
Decoder decoder, 
bool reuse )
   172                 var array = (
object[]) arrayObj;
   173                 for (
int i = index; i < index + elements; i++)
   175                     array[i] = reuse ? itemReader(array[i], decoder) : itemReader(null, decoder);
   179             private static void SizeTo(ref 
object array, 
int targetSize)
   181                 var o = (
object[]) array;
   182                 Array.Resize(ref o, targetSize);
   187         class GenericMapAccess : MapAccess
   189             public object Create(
object reuse)
   191                 if (reuse is IDictionary<string, object>)
   193                     var result = (IDictionary<string, object>)reuse;
   197                 return new Dictionary<string, object>();
   200             public void AddElements(
object mapObj, 
int elements, 
ReadItem itemReader, 
Decoder decoder, 
bool reuse)
   202                 var map = ((IDictionary<string, object>)mapObj);
   203                 for (
int i = 0; i < elements; i++)
   206                     map[key] = itemReader(
null, decoder);
 
override bool IsReusable(Schema.Type tag)
Indicates if it's possible to reuse an object of the specified type.
 
PreresolvingDatumReader for reading data to GenericRecord classes or primitives.
 
string ReadString()
Reads a string Avro type
 
Class for enum type schemas
 
Base class for all schema types
 
Type
Enum for schema types
 
override EnumAccess GetEnumAccess(EnumSchema readerSchema)
 
Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.
 
override RecordAccess GetRecordAccess(RecordSchema readerSchema)
 
A general purpose reader of data from avro streams.
 
Decoder is used to decode Avro data on a stream.
 
override FixedAccess GetFixedAccess(FixedSchema readerSchema)
 
Class for array type schemas
 
override ArrayAccess GetArrayAccess(ArraySchema readerSchema)
 
GenericDatumReader(Schema writerSchema, Schema readerSchema)
 
delegate object ReadItem(object reuse, Decoder dec)
 
override MapAccess GetMapAccess(MapSchema readerSchema)