You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@avro.apache.org by Doug Cutting <cu...@apache.org> on 2009/07/02 00:11:22 UTC

[VOTE] Avro release 1.0.0 (candidate 0)

I have created a candidate build for Avro release 1.0.0.  This would be 
the first public release of Avro.  We hope not to change Avro's 
specification incompatibly until release 2.0.0, so its adequacy is more 
important than bugs or features for this release.

Please download, test and vote by 7 July.

http://people.apache.org/~cutting/avro-1.0.0-candidate-0/

Thanks,

Doug

Re: [VOTE] Avro release 1.0.0 (candidate 0)

Posted by Doug Cutting <cu...@apache.org>.
Matt Massie wrote:
> Should I put the Apache license at the top of all *.[c,h] files?

Yes, please.

http://www.apache.org/legal/src-headers.html

Doug

Re: [VOTE] Avro release 1.0.0 (candidate 0)

Posted by Patrick Hunt <ph...@apache.org>.
> Should I put the Apache license at the top of all *.[c,h] files? 

In general yes, it's required of all Apache projects, in this case item 2:
http://www.apache.org/legal/src-headers.html#headers

here's an example from hadoop common:
http://svn.apache.org/repos/asf/hadoop/common/trunk/src/native/src/org_apache_hadoop.h

Patrick

Re: [VOTE] Avro release 1.0.0 (candidate 0)

Posted by Matt Massie <ma...@cloudera.com>.
I'm in the process of fixing the package-c ant target to prevent  
object files (among other things) from being packaged that shouldn't.

I'll create a jira and submit a patch soon (likely today).

Should I put the Apache license at the top of all *.[c,h] files?

-Matt

On Jul 2, 2009, at 10:23 AM, Patrick Hunt wrote:

> -1
>
> tests all pass for me, however:
>
> * rat tool reports a number of issues with licensing (see attached)  
> of source code files
>
>
> Also, src/c for the tar file contains generated .o files, should it?
>
> Patrick
>
> Doug Cutting wrote:
>> I have created a candidate build for Avro release 1.0.0.  This  
>> would be the first public release of Avro.  We hope not to change  
>> Avro's specification incompatibly until release 2.0.0, so its  
>> adequacy is more important than bugs or features for this release.
>> Please download, test and vote by 7 July.
>> http://people.apache.org/~cutting/avro-1.0.0-candidate-0/
>> Thanks,
>> Doug
>
> *****************************************************
> Summary
> -------
> Notes: 10
> Binaries: 89
> Archives: 14
> Standards: 517
>
> Apache Licensed: 112
> Generated Documents: 165
>
> JavaDocs are generated and so license header is optional
> Generated files do not required license headers
>
> 240 Unknown Licenses
>
> *******************************
>
> Archives (+ indicates readable, $ unreadable):
>
> + ./avro-1.0.0.jar
> + ./lib/ant-1.6.5.jar
> + ./lib/asm-3.0.jar
> + ./lib/ivy-2.1.0-rc1.jar
> + ./lib/jackson-core-asl-1.0.1.jar
> + ./lib/jackson-mapper-asl-1.0.1.jar
> + ./lib/paranamer-1.5.jar
> + ./lib/paranamer-ant-1.5.jar
> + ./lib/paranamer-generator-1.5.jar
> + ./lib/pyAntTasks-1.3.jar
> + ./lib/qdox-1.9.1.jar
> + ./lib/slf4j-api-1.5.8.jar
> + ./lib/slf4j-simple-1.5.8.jar
> + ./lib/testng-5.8.jar
>
> *****************************************************
>  Files with AL headers will be marked L
>  Binary files (which do not require AL headers) will be marked B
>  Compressed archives will be marked A
>  Notices, licenses etc will be marked N
> !????? ./CHANGES.txt
>  N     ./LICENSE.txt
>  N     ./README.txt
>  A     ./avro-1.0.0.jar
> !????? ./avro-1.0.0.jar.md5
> !????? ./avro-1.0.0.jar.sha1
> !????? ./avro-1.0.0.pom
> !????? ./avro-1.0.0.pom.md5
> !????? ./avro-1.0.0.pom.sha1
>  AL    ./build.xml
> !????? ./ivy.xml
> !????? ./c/Linux-i386-32/include/avro.h
>  B     ./c/Linux-i386-32/lib/libavro.a
> !????? ./c/Linux-i386-32/lib/libavro.la
>  B     ./c/Linux-i386-32/lib/libavro.so
>  B     ./c/Linux-i386-32/lib/libavro.so.0
>  B     ./c/Linux-i386-32/lib/libavro.so.0.0.0
> !????? ./doc/broken-links.xml
> !????? ./doc/index.html
>  B     ./doc/index.pdf
> !????? ./doc/linkmap.html
>  B     ./doc/linkmap.pdf
> !????? ./doc/spec.html
>  B     ./doc/spec.pdf
> !????? ./doc/api/c/html/annotated.html
> !????? ./doc/api/c/html/avro_8h-source.html
> !????? ./doc/api/c/html/avro_8h.html
> !????? ./doc/api/c/html/classes.html
> !????? ./doc/api/c/html/doxygen.css
>  B     ./doc/api/c/html/doxygen.png
> !????? ./doc/api/c/html/files.html
> !????? ./doc/api/c/html/functions.html
> !????? ./doc/api/c/html/functions_vars.html
> !????? ./doc/api/c/html/globals.html
> !????? ./doc/api/c/html/globals_enum.html
> !????? ./doc/api/c/html/globals_eval.html
> !????? ./doc/api/c/html/globals_func.html
> !????? ./doc/api/c/html/group___a_v_r_o.html
> !????? ./doc/api/c/html/group___compound.html
> !????? ./doc/api/c/html/group___handle___routines.html
> !????? ./doc/api/c/html/group___primitives.html
> !????? ./doc/api/c/html/index.html
> !????? ./doc/api/c/html/json_8h-source.html
> !????? ./doc/api/c/html/json__schema_8h-source.html
> !????? ./doc/api/c/html/json__tokenizer_8h-source.html
> !????? ./doc/api/c/html/modules.html
> !????? ./doc/api/c/html/pages.html
> !????? ./doc/api/c/html/struct_a_v_r_o.html
>  B     ./doc/api/c/html/tab_b.gif
>  B     ./doc/api/c/html/tab_l.gif
>  B     ./doc/api/c/html/tab_r.gif
> !????? ./doc/api/c/html/tabs.css
> !????? ./doc/api/c/html/todo.html
>  B     ./doc/api/c/latex/FreeSans.ttf
> !????? ./doc/api/c/latex/Makefile
> !????? ./doc/api/c/latex/annotated.tex
> !????? ./doc/api/c/latex/avro_8h.tex
> !????? ./doc/api/c/latex/doxygen.sty
> !????? ./doc/api/c/latex/files.tex
> !????? ./doc/api/c/latex/group___a_v_r_o.tex
> !????? ./doc/api/c/latex/group___compound.tex
> !????? ./doc/api/c/latex/group___handle___routines.tex
> !????? ./doc/api/c/latex/group___primitives.tex
> !????? ./doc/api/c/latex/modules.tex
> !????? ./doc/api/c/latex/refman.tex
> !????? ./doc/api/c/latex/struct_a_v_r_o.tex
> !????? ./doc/api/c/latex/todo.tex
>  GEN   ./doc/api/java/allclasses-frame.html
>  GEN   ./doc/api/java/allclasses-noframe.html
>  GEN   ./doc/api/java/constant-values.html
>  GEN   ./doc/api/java/deprecated-list.html
>  GEN   ./doc/api/java/help-doc.html
>  GEN   ./doc/api/java/index-all.html
>  GEN   ./doc/api/java/index.html
>  GEN   ./doc/api/java/overview-frame.html
>  GEN   ./doc/api/java/overview-summary.html
>  GEN   ./doc/api/java/overview-tree.html
> !????? ./doc/api/java/package-list
>  GEN   ./doc/api/java/serialized-form.html
>  GEN   ./doc/api/java/stylesheet.css
>  GEN   ./doc/api/java/org/apache/avro/AvroRuntimeException.html
>  GEN   ./doc/api/java/org/apache/avro/AvroTypeException.html
>  GEN   ./doc/api/java/org/apache/avro/Protocol.Message.html
>  GEN   ./doc/api/java/org/apache/avro/Protocol.html
>  GEN   ./doc/api/java/org/apache/avro/Schema.Field.html
>  GEN   ./doc/api/java/org/apache/avro/Schema.Type.html
>  GEN   ./doc/api/java/org/apache/avro/Schema.html
>  GEN   ./doc/api/java/org/apache/avro/SchemaParseException.html
>  GEN   ./doc/api/java/org/apache/avro/package-frame.html
>  GEN   ./doc/api/java/org/apache/avro/package-summary.html
>  GEN   ./doc/api/java/org/apache/avro/package-tree.html
>  GEN   ./doc/api/java/org/apache/avro/package-use.html
>  GEN   ./doc/api/java/org/apache/avro/class-use/ 
> AvroRuntimeException.html
>  GEN   ./doc/api/java/org/apache/avro/class-use/AvroTypeException.html
>  GEN   ./doc/api/java/org/apache/avro/class-use/Protocol.Message.html
>  GEN   ./doc/api/java/org/apache/avro/class-use/Protocol.html
>  GEN   ./doc/api/java/org/apache/avro/class-use/Schema.Field.html
>  GEN   ./doc/api/java/org/apache/avro/class-use/Schema.Type.html
>  GEN   ./doc/api/java/org/apache/avro/class-use/Schema.html
>  GEN   ./doc/api/java/org/apache/avro/class-use/ 
> SchemaParseException.html
>  GEN   ./doc/api/java/org/apache/avro/file/DataFileReader.html
>  GEN   ./doc/api/java/org/apache/avro/file/DataFileWriter.html
>  GEN   ./doc/api/java/org/apache/avro/file/SeekableFileInput.html
>  GEN   ./doc/api/java/org/apache/avro/file/SeekableInput.html
>  GEN   ./doc/api/java/org/apache/avro/file/package-frame.html
>  GEN   ./doc/api/java/org/apache/avro/file/package-summary.html
>  GEN   ./doc/api/java/org/apache/avro/file/package-tree.html
>  GEN   ./doc/api/java/org/apache/avro/file/package-use.html
>  GEN   ./doc/api/java/org/apache/avro/file/class-use/ 
> DataFileReader.html
>  GEN   ./doc/api/java/org/apache/avro/file/class-use/ 
> DataFileWriter.html
>  GEN   ./doc/api/java/org/apache/avro/file/class-use/ 
> SeekableFileInput.html
>  GEN   ./doc/api/java/org/apache/avro/file/class-use/ 
> SeekableInput.html
>  GEN   ./doc/api/java/org/apache/avro/generic/GenericArray.html
>  GEN   ./doc/api/java/org/apache/avro/generic/GenericData.Array.html
>  GEN   ./doc/api/java/org/apache/avro/generic/GenericData.Fixed.html
>  GEN   ./doc/api/java/org/apache/avro/generic/GenericData.Record.html
>  GEN   ./doc/api/java/org/apache/avro/generic/GenericData.html
>  GEN   ./doc/api/java/org/apache/avro/generic/GenericDatumReader.html
>  GEN   ./doc/api/java/org/apache/avro/generic/GenericDatumWriter.html
>  GEN   ./doc/api/java/org/apache/avro/generic/GenericFixed.html
>  GEN   ./doc/api/java/org/apache/avro/generic/GenericRecord.html
>  GEN   ./doc/api/java/org/apache/avro/generic/GenericRequestor.html
>  GEN   ./doc/api/java/org/apache/avro/generic/GenericResponder.html
>  GEN   ./doc/api/java/org/apache/avro/generic/package-frame.html
>  GEN   ./doc/api/java/org/apache/avro/generic/package-summary.html
>  GEN   ./doc/api/java/org/apache/avro/generic/package-tree.html
>  GEN   ./doc/api/java/org/apache/avro/generic/package-use.html
>  GEN   ./doc/api/java/org/apache/avro/generic/class-use/ 
> GenericArray.html
>  GEN   ./doc/api/java/org/apache/avro/generic/class-use/ 
> GenericData.Array.html
>  GEN   ./doc/api/java/org/apache/avro/generic/class-use/ 
> GenericData.Fixed.html
>  GEN   ./doc/api/java/org/apache/avro/generic/class-use/ 
> GenericData.Record.html
>  GEN   ./doc/api/java/org/apache/avro/generic/class-use/ 
> GenericData.html
>  GEN   ./doc/api/java/org/apache/avro/generic/class-use/ 
> GenericDatumReader.html
>  GEN   ./doc/api/java/org/apache/avro/generic/class-use/ 
> GenericDatumWriter.html
>  GEN   ./doc/api/java/org/apache/avro/generic/class-use/ 
> GenericFixed.html
>  GEN   ./doc/api/java/org/apache/avro/generic/class-use/ 
> GenericRecord.html
>  GEN   ./doc/api/java/org/apache/avro/generic/class-use/ 
> GenericRequestor.html
>  GEN   ./doc/api/java/org/apache/avro/generic/class-use/ 
> GenericResponder.html
>  GEN   ./doc/api/java/org/apache/avro/io/BinaryDecoder.html
>  GEN   ./doc/api/java/org/apache/avro/io/BinaryEncoder.html
>  GEN   ./doc/api/java/org/apache/avro/io/BlockingBinaryEncoder.html
>  GEN   ./doc/api/java/org/apache/avro/io/DatumReader.html
>  GEN   ./doc/api/java/org/apache/avro/io/DatumWriter.html
>  GEN   ./doc/api/java/org/apache/avro/io/Decoder.html
>  GEN   ./doc/api/java/org/apache/avro/io/Encoder.html
>  GEN   ./doc/api/java/org/apache/avro/io/ResolvingDecoder.html
>  GEN   ./doc/api/java/org/apache/avro/io/ValidatingDecoder.html
>  GEN   ./doc/api/java/org/apache/avro/io/ValidatingEncoder.html
>  GEN   ./doc/api/java/org/apache/avro/io/package-frame.html
>  GEN   ./doc/api/java/org/apache/avro/io/package-summary.html
>  GEN   ./doc/api/java/org/apache/avro/io/package-tree.html
>  GEN   ./doc/api/java/org/apache/avro/io/package-use.html
>  GEN   ./doc/api/java/org/apache/avro/io/class-use/BinaryDecoder.html
>  GEN   ./doc/api/java/org/apache/avro/io/class-use/BinaryEncoder.html
>  GEN   ./doc/api/java/org/apache/avro/io/class-use/ 
> BlockingBinaryEncoder.html
>  GEN   ./doc/api/java/org/apache/avro/io/class-use/DatumReader.html
>  GEN   ./doc/api/java/org/apache/avro/io/class-use/DatumWriter.html
>  GEN   ./doc/api/java/org/apache/avro/io/class-use/Decoder.html
>  GEN   ./doc/api/java/org/apache/avro/io/class-use/Encoder.html
>  GEN   ./doc/api/java/org/apache/avro/io/class-use/ 
> ResolvingDecoder.html
>  GEN   ./doc/api/java/org/apache/avro/io/class-use/ 
> ValidatingDecoder.html
>  GEN   ./doc/api/java/org/apache/avro/io/class-use/ 
> ValidatingEncoder.html
> !????? ./doc/api/java/org/apache/avro/io/doc-files/parsing.html
>  GEN   ./doc/api/java/org/apache/avro/ipc/AvroRemoteException.html
>  GEN   ./doc/api/java/org/apache/avro/ipc/ByteBufferInputStream.html
>  GEN   ./doc/api/java/org/apache/avro/ipc/ByteBufferOutputStream.html
>  GEN   ./doc/api/java/org/apache/avro/ipc/Requestor.html
>  GEN   ./doc/api/java/org/apache/avro/ipc/Responder.html
>  GEN   ./doc/api/java/org/apache/avro/ipc/SocketServer.html
>  GEN   ./doc/api/java/org/apache/avro/ipc/SocketTransceiver.html
>  GEN   ./doc/api/java/org/apache/avro/ipc/Transceiver.html
>  GEN   ./doc/api/java/org/apache/avro/ipc/package-frame.html
>  GEN   ./doc/api/java/org/apache/avro/ipc/package-summary.html
>  GEN   ./doc/api/java/org/apache/avro/ipc/package-tree.html
>  GEN   ./doc/api/java/org/apache/avro/ipc/package-use.html
>  GEN   ./doc/api/java/org/apache/avro/ipc/class-use/ 
> AvroRemoteException.html
>  GEN   ./doc/api/java/org/apache/avro/ipc/class-use/ 
> ByteBufferInputStream.html
>  GEN   ./doc/api/java/org/apache/avro/ipc/class-use/ 
> ByteBufferOutputStream.html
>  GEN   ./doc/api/java/org/apache/avro/ipc/class-use/Requestor.html
>  GEN   ./doc/api/java/org/apache/avro/ipc/class-use/Responder.html
>  GEN   ./doc/api/java/org/apache/avro/ipc/class-use/SocketServer.html
>  GEN   ./doc/api/java/org/apache/avro/ipc/class-use/ 
> SocketTransceiver.html
>  GEN   ./doc/api/java/org/apache/avro/ipc/class-use/Transceiver.html
>  GEN   ./doc/api/java/org/apache/avro/reflect/FixedSize.html
>  GEN   ./doc/api/java/org/apache/avro/reflect/ReflectData.html
>  GEN   ./doc/api/java/org/apache/avro/reflect/ReflectDatumReader.html
>  GEN   ./doc/api/java/org/apache/avro/reflect/ReflectDatumWriter.html
>  GEN   ./doc/api/java/org/apache/avro/reflect/ReflectRequestor.html
>  GEN   ./doc/api/java/org/apache/avro/reflect/ReflectResponder.html
>  GEN   ./doc/api/java/org/apache/avro/reflect/package-frame.html
>  GEN   ./doc/api/java/org/apache/avro/reflect/package-summary.html
>  GEN   ./doc/api/java/org/apache/avro/reflect/package-tree.html
>  GEN   ./doc/api/java/org/apache/avro/reflect/package-use.html
>  GEN   ./doc/api/java/org/apache/avro/reflect/class-use/FixedSize.html
>  GEN   ./doc/api/java/org/apache/avro/reflect/class-use/ 
> ReflectData.html
>  GEN   ./doc/api/java/org/apache/avro/reflect/class-use/ 
> ReflectDatumReader.html
>  GEN   ./doc/api/java/org/apache/avro/reflect/class-use/ 
> ReflectDatumWriter.html
>  GEN   ./doc/api/java/org/apache/avro/reflect/class-use/ 
> ReflectRequestor.html
>  GEN   ./doc/api/java/org/apache/avro/reflect/class-use/ 
> ReflectResponder.html
>  GEN   ./doc/api/java/org/apache/avro/specific/ProtocolTask.html
>  GEN   ./doc/api/java/org/apache/avro/specific/SchemaTask.html
>  GEN   ./doc/api/java/org/apache/avro/specific/SpecificCompiler.html
>  GEN   ./doc/api/java/org/apache/avro/specific/ 
> SpecificDatumReader.html
>  GEN   ./doc/api/java/org/apache/avro/specific/ 
> SpecificDatumWriter.html
>  GEN   ./doc/api/java/org/apache/avro/specific/ 
> SpecificExceptionBase.html
>  GEN   ./doc/api/java/org/apache/avro/specific/SpecificFixed.html
>  GEN   ./doc/api/java/org/apache/avro/specific/SpecificRecord.html
>  GEN   ./doc/api/java/org/apache/avro/specific/SpecificRecordBase.html
>  GEN   ./doc/api/java/org/apache/avro/specific/SpecificRequestor.html
>  GEN   ./doc/api/java/org/apache/avro/specific/SpecificResponder.html
>  GEN   ./doc/api/java/org/apache/avro/specific/package-frame.html
>  GEN   ./doc/api/java/org/apache/avro/specific/package-summary.html
>  GEN   ./doc/api/java/org/apache/avro/specific/package-tree.html
>  GEN   ./doc/api/java/org/apache/avro/specific/package-use.html
>  GEN   ./doc/api/java/org/apache/avro/specific/class-use/ 
> ProtocolTask.html
>  GEN   ./doc/api/java/org/apache/avro/specific/class-use/ 
> SchemaTask.html
>  GEN   ./doc/api/java/org/apache/avro/specific/class-use/ 
> SpecificCompiler.html
>  GEN   ./doc/api/java/org/apache/avro/specific/class-use/ 
> SpecificDatumReader.html
>  GEN   ./doc/api/java/org/apache/avro/specific/class-use/ 
> SpecificDatumWriter.html
>  GEN   ./doc/api/java/org/apache/avro/specific/class-use/ 
> SpecificExceptionBase.html
>  GEN   ./doc/api/java/org/apache/avro/specific/class-use/ 
> SpecificFixed.html
>  GEN   ./doc/api/java/org/apache/avro/specific/class-use/ 
> SpecificRecord.html
>  GEN   ./doc/api/java/org/apache/avro/specific/class-use/ 
> SpecificRecordBase.html
>  GEN   ./doc/api/java/org/apache/avro/specific/class-use/ 
> SpecificRequestor.html
>  GEN   ./doc/api/java/org/apache/avro/specific/class-use/ 
> SpecificResponder.html
>  GEN   ./doc/api/java/org/apache/avro/util/Utf8.html
>  GEN   ./doc/api/java/org/apache/avro/util/package-frame.html
>  GEN   ./doc/api/java/org/apache/avro/util/package-summary.html
>  GEN   ./doc/api/java/org/apache/avro/util/package-tree.html
>  GEN   ./doc/api/java/org/apache/avro/util/package-use.html
>  GEN   ./doc/api/java/org/apache/avro/util/class-use/Utf8.html
>  B     ./doc/api/java/resources/inherit.gif
>  AL    ./doc/api/py/avro.__init__.html
> !????? ./doc/api/py/avro.genericio.html
>  AL    ./doc/api/py/avro.html
> !????? ./doc/api/py/avro.io.html
>  AL    ./doc/api/py/avro.protocol.html
> !????? ./doc/api/py/avro.reflectio.html
> !????? ./doc/api/py/avro.schema.html
>  B     ./doc/images/avro-logo.png
>  B     ./doc/images/built-with-forrest-button.png
>  B     ./doc/images/favicon.ico
>  B     ./doc/images/hadoop-logo.jpg
>  B     ./doc/images/instruction_arrow.png
>  AL    ./doc/skin/CommonMessages_de.xml
>  AL    ./doc/skin/CommonMessages_en_US.xml
>  AL    ./doc/skin/CommonMessages_es.xml
>  AL    ./doc/skin/CommonMessages_fr.xml
>  AL    ./doc/skin/basic.css
>  AL    ./doc/skin/breadcrumbs-optimized.js
>  AL    ./doc/skin/breadcrumbs.js
>  AL    ./doc/skin/fontsize.js
>  AL    ./doc/skin/getBlank.js
>  AL    ./doc/skin/getMenu.js
>  AL    ./doc/skin/menu.js
> !????? ./doc/skin/note.txt
>  AL    ./doc/skin/print.css
> !????? ./doc/skin/profile.css
>  GEN   ./doc/skin/prototype.js
>  AL    ./doc/skin/screen.css
>  N     ./doc/skin/images/README.txt
>  B     ./doc/skin/images/add.jpg
>  B     ./doc/skin/images/built-with-forrest-button.png
>  B     ./doc/skin/images/chapter.gif
>  B     ./doc/skin/images/chapter_open.gif
>  B     ./doc/skin/images/current.gif
>  B     ./doc/skin/images/error.png
>  B     ./doc/skin/images/external-link.gif
>  B     ./doc/skin/images/fix.jpg
>  B     ./doc/skin/images/forrest-credit-logo.png
>  B     ./doc/skin/images/hack.jpg
>  B     ./doc/skin/images/header_white_line.gif
>  B     ./doc/skin/images/info.png
>  B     ./doc/skin/images/instruction_arrow.png
>  B     ./doc/skin/images/label.gif
>  B     ./doc/skin/images/page.gif
>  B     ./doc/skin/images/pdfdoc.gif
>  B     ./doc/skin/images/poddoc.png
>  B     ./doc/skin/images/printer.gif
>  B     ./doc/skin/images/rc-b-l-15-1body-2menu-3menu.png
>  B     ./doc/skin/images/rc-b-r-15-1body-2menu-3menu.png
>  B     ./doc/skin/images/rc-b-r-5-1header-2tab-selected-3tab- 
> selected.png
>  B     ./doc/skin/images/rc-t-l-5-1header-2searchbox-3searchbox.png
>  B     ./doc/skin/images/rc-t-l-5-1header-2tab-selected-3tab- 
> selected.png
>  B     ./doc/skin/images/rc-t-l-5-1header-2tab-unselected-3tab- 
> unselected.png
>  B     ./doc/skin/images/rc-t-r-15-1body-2menu-3menu.png
>  B     ./doc/skin/images/rc-t-r-5-1header-2searchbox-3searchbox.png
>  B     ./doc/skin/images/rc-t-r-5-1header-2tab-selected-3tab- 
> selected.png
>  B     ./doc/skin/images/rc-t-r-5-1header-2tab-unselected-3tab- 
> unselected.png
>  B     ./doc/skin/images/remove.jpg
>  B     ./doc/skin/images/rss.png
>  B     ./doc/skin/images/spacer.gif
>  B     ./doc/skin/images/success.png
>  B     ./doc/skin/images/txtdoc.png
>  B     ./doc/skin/images/update.jpg
>  B     ./doc/skin/images/valid-html401.png
>  B     ./doc/skin/images/vcss.png
>  B     ./doc/skin/images/warning.png
>  B     ./doc/skin/images/xmldoc.gif
>  A     ./lib/ant-1.6.5.jar
>  A     ./lib/asm-3.0.jar
>  A     ./lib/ivy-2.1.0-rc1.jar
>  A     ./lib/jackson-core-asl-1.0.1.jar
>  A     ./lib/jackson-mapper-asl-1.0.1.jar
>  A     ./lib/paranamer-1.5.jar
>  A     ./lib/paranamer-ant-1.5.jar
>  A     ./lib/paranamer-generator-1.5.jar
>  A     ./lib/pyAntTasks-1.3.jar
>  A     ./lib/qdox-1.9.1.jar
>  A     ./lib/slf4j-api-1.5.8.jar
>  A     ./lib/slf4j-simple-1.5.8.jar
>  A     ./lib/testng-5.8.jar
> !????? ./lib/py/odict.py
>  B     ./lib/py/odict.pyc
> !????? ./lib/py/simplejson/__init__.py
>  B     ./lib/py/simplejson/__init__.pyc
> !????? ./lib/py/simplejson/_speedups.c
> !????? ./lib/py/simplejson/decoder.py
>  B     ./lib/py/simplejson/decoder.pyc
> !????? ./lib/py/simplejson/encoder.py
>  B     ./lib/py/simplejson/encoder.pyc
> !????? ./lib/py/simplejson/scanner.py
>  B     ./lib/py/simplejson/scanner.pyc
> !????? ./lib/py/simplejson/tool.py
> !????? ./src/c/.gitignore
>  N     ./src/c/AUTHORS
>  AL    ./src/c/COPYING
>  N     ./src/c/ChangeLog
>  N     ./src/c/INSTALL
> !????? ./src/c/Makefile
> !????? ./src/c/Makefile.am
> !????? ./src/c/Makefile.in
>  N     ./src/c/NEWS
>  N     ./src/c/README
>  GEN   ./src/c/aclocal.m4
> !????? ./src/c/avro.c
> !????? ./src/c/avro.h
> !????? ./src/c/avro.lo
>  B     ./src/c/avro.o
> !????? ./src/c/avro_array.c
> !????? ./src/c/avro_double.c
> !????? ./src/c/avro_double.lo
>  B     ./src/c/avro_double.o
> !????? ./src/c/avro_file.c
> !????? ./src/c/avro_file.lo
>  B     ./src/c/avro_file.o
> !????? ./src/c/avro_memory.c
> !????? ./src/c/avro_memory.lo
>  B     ./src/c/avro_memory.o
> !????? ./src/c/avro_raw.c
> !????? ./src/c/avro_raw.lo
>  B     ./src/c/avro_raw.o
> !????? ./src/c/avro_socket.c
> !????? ./src/c/avro_socket.lo
>  B     ./src/c/avro_socket.o
> !????? ./src/c/avro_string.c
> !????? ./src/c/avro_string.lo
>  B     ./src/c/avro_string.o
> !????? ./src/c/avro_zigzag.c
> !????? ./src/c/avro_zigzag.lo
>  B     ./src/c/avro_zigzag.o
> !????? ./src/c/config.h
> !????? ./src/c/config.h.in
> !????? ./src/c/config.log
> !????? ./src/c/config.status
> !????? ./src/c/configure
> !????? ./src/c/configure.in
> !????? ./src/c/dump.c
> !????? ./src/c/dump.h
> !????? ./src/c/dump.lo
>  B     ./src/c/dump.o
> !????? ./src/c/error.c
> !????? ./src/c/error.h
> !????? ./src/c/error.lo
>  B     ./src/c/error.o
> !????? ./src/c/json.c
> !????? ./src/c/json.h
> !????? ./src/c/json.lo
>  B     ./src/c/json.o
> !????? ./src/c/json_schema.c
> !????? ./src/c/json_schema.h
> !????? ./src/c/json_schema.lo
>  B     ./src/c/json_schema.o
> !????? ./src/c/json_schema.out
> !????? ./src/c/json_schema.y
> !????? ./src/c/json_tokenizer.c
> !????? ./src/c/json_tokenizer.h
> !????? ./src/c/json_tokenizer.lo
>  B     ./src/c/json_tokenizer.o
>  B     ./src/c/lemon
> !????? ./src/c/lemon.c
>  B     ./src/c/lemon.o
> !????? ./src/c/lempar.c
> !????? ./src/c/libavro.la
> !????? ./src/c/libtool
> !????? ./src/c/stamp-h1
> !????? ./src/c/test_avro_bytes.c
> !????? ./src/c/test_avro_float_double.c
> !????? ./src/c/test_avro_raw.c
> !????? ./src/c/test_avro_string.c
> !????? ./src/c/test_avro_zigzag.c
> !????? ./src/c/test_json_parser.c
> !????? ./src/c/trace.txt
> !????? ./src/c/autom4te.cache/output.0
> !????? ./src/c/autom4te.cache/output.1
>  GEN   ./src/c/autom4te.cache/requests
> !????? ./src/c/autom4te.cache/traces.0
> !????? ./src/c/autom4te.cache/traces.1
> !????? ./src/c/config/config.guess
> !????? ./src/c/config/config.sub
> !????? ./src/c/config/depcomp
> !????? ./src/c/config/install-sh
> !????? ./src/c/config/ltmain.sh
> !????? ./src/c/config/missing
> !????? ./src/c/docs/doxygen.conf
>  N     ./src/c/json/README
> !????? ./src/c/json/fail/array_not_closed
> !????? ./src/c/json/fail/array_not_opened
> !????? ./src/c/json/fail/array_with_start_coma
> !????? ./src/c/json/fail/object_malformed
> !????? ./src/c/json/fail/object_not_closed
> !????? ./src/c/json/fail/object_not_opened
> !????? ./src/c/json/fail/object_with_start_coma
> !????? ./src/c/json/fail/object_with_string
> !????? ./src/c/json/fail/object_without_one_value
> !????? ./src/c/json/pass/array_multidimensional
> !????? ./src/c/json/pass/array_with_false
> !????? ./src/c/json/pass/array_with_ints
> !????? ./src/c/json/pass/array_with_null
> !????? ./src/c/json/pass/array_with_objects
> !????? ./src/c/json/pass/array_with_string
> !????? ./src/c/json/pass/array_with_true
> !????? ./src/c/json/pass/empty_array
> !????? ./src/c/json/pass/empty_object
> !????? ./src/c/json/pass/object_with_false
> !????? ./src/c/json/pass/object_with_multiple_members
> !????? ./src/c/json/pass/object_with_null
> !????? ./src/c/json/pass/object_with_object_member
> !????? ./src/c/json/pass/object_with_one_member
> !????? ./src/c/json/pass/object_with_true
> !????? ./src/c++/Doxyfile
> !????? ./src/c++/Makefile
>  N     ./src/c++/README.txt
> !????? ./src/c++/System.Darwin.mk
> !????? ./src/c++/System.Linux.mk
>  B     ./src/c++/test.avro
> !????? ./src/c++/api/AvroParse.hh
> !????? ./src/c++/api/AvroSerialize.hh
> !????? ./src/c++/api/AvroTraits.hh
> !????? ./src/c++/api/AvroTypes.hh
> !????? ./src/c++/api/Compiler.hh
> !????? ./src/c++/api/Exception.hh
> !????? ./src/c++/api/InputStreamer.hh
> !????? ./src/c++/api/Node.hh
> !????? ./src/c++/api/NodeConcepts.hh
> !????? ./src/c++/api/NodeImpl.hh
> !????? ./src/c++/api/OutputStreamer.hh
> !????? ./src/c++/api/Parser.hh
> !????? ./src/c++/api/Schema.hh
> !????? ./src/c++/api/Serializer.hh
> !????? ./src/c++/api/SymbolMap.hh
> !????? ./src/c++/api/Types.hh
> !????? ./src/c++/api/ValidSchema.hh
> !????? ./src/c++/api/ValidatingParser.hh
> !????? ./src/c++/api/ValidatingSerializer.hh
> !????? ./src/c++/api/ValidatingWriter.hh
> !????? ./src/c++/api/Validator.hh
> !????? ./src/c++/api/Writer.hh
> !????? ./src/c++/api/Zigzag.hh
> !????? ./src/c++/impl/Compiler.cc
> !????? ./src/c++/impl/Node.cc
> !????? ./src/c++/impl/NodeImpl.cc
> !????? ./src/c++/impl/Schema.cc
> !????? ./src/c++/impl/Types.cc
> !????? ./src/c++/impl/ValidSchema.cc
> !????? ./src/c++/impl/ValidatingParser.cc
> !????? ./src/c++/impl/ValidatingSerializer.cc
> !????? ./src/c++/impl/ValidatingWriter.cc
> !????? ./src/c++/impl/Validator.cc
> !????? ./src/c++/impl/Zigzag.cc
> !????? ./src/c++/jsonschemas/array
> !????? ./src/c++/jsonschemas/bigrecord
> !????? ./src/c++/jsonschemas/enum
> !????? ./src/c++/jsonschemas/fixed
> !????? ./src/c++/jsonschemas/nested
> !????? ./src/c++/jsonschemas/nested.error
> !????? ./src/c++/jsonschemas/recinrec
> !????? ./src/c++/jsonschemas/record
> !????? ./src/c++/jsonschemas/record2
> !????? ./src/c++/jsonschemas/union
> !????? ./src/c++/jsonschemas/unionwithmap
> !????? ./src/c++/obj/Compiler.d
> !????? ./src/c++/obj/Node.d
> !????? ./src/c++/obj/NodeImpl.d
> !????? ./src/c++/obj/Schema.d
> !????? ./src/c++/obj/Types.d
> !????? ./src/c++/obj/ValidSchema.d
> !????? ./src/c++/obj/ValidatingParser.d
> !????? ./src/c++/obj/ValidatingSerializer.d
> !????? ./src/c++/obj/ValidatingWriter.d
> !????? ./src/c++/obj/Validator.d
> !????? ./src/c++/obj/Zigzag.d
> !????? ./src/c++/obj/bigrecord.flat
> !????? ./src/c++/parser/avro.l
> !????? ./src/c++/parser/avro.y
> !????? ./src/c++/scripts/gen.py
> !????? ./src/c++/test/code.hh
> !????? ./src/c++/test/precompile.cc
> !????? ./src/c++/test/testgen.cc
> !????? ./src/c++/test/testparser.cc
> !????? ./src/c++/test/unittest.cc
>  AL    ./src/doc/skinconf.xml
>  AL    ./src/doc/content/xdocs/index.xml
>  AL    ./src/doc/content/xdocs/site.xml
>  AL    ./src/doc/content/xdocs/spec.xml
>  AL    ./src/doc/content/xdocs/tabs.xml
>  B     ./src/doc/resources/images/avro-logo.png
>  B     ./src/doc/resources/images/favicon.ico
>  B     ./src/doc/resources/images/hadoop-logo.jpg
> !????? ./src/java/overview.html
>  AL    ./src/java/org/apache/avro/AvroRuntimeException.java
>  AL    ./src/java/org/apache/avro/AvroTypeException.java
>  AL    ./src/java/org/apache/avro/Protocol.java
>  AL    ./src/java/org/apache/avro/Schema.java
>  AL    ./src/java/org/apache/avro/SchemaParseException.java
>  AL    ./src/java/org/apache/avro/package.html
>  AL    ./src/java/org/apache/avro/file/DataFileReader.java
>  AL    ./src/java/org/apache/avro/file/DataFileWriter.java
>  AL    ./src/java/org/apache/avro/file/SeekableFileInput.java
>  AL    ./src/java/org/apache/avro/file/SeekableInput.java
>  AL    ./src/java/org/apache/avro/file/package.html
>  AL    ./src/java/org/apache/avro/generic/GenericArray.java
>  AL    ./src/java/org/apache/avro/generic/GenericData.java
>  AL    ./src/java/org/apache/avro/generic/GenericDatumReader.java
>  AL    ./src/java/org/apache/avro/generic/GenericDatumWriter.java
>  AL    ./src/java/org/apache/avro/generic/GenericFixed.java
>  AL    ./src/java/org/apache/avro/generic/GenericRecord.java
>  AL    ./src/java/org/apache/avro/generic/GenericRequestor.java
>  AL    ./src/java/org/apache/avro/generic/GenericResponder.java
>  AL    ./src/java/org/apache/avro/generic/package.html
>  AL    ./src/java/org/apache/avro/io/BinaryDecoder.java
>  AL    ./src/java/org/apache/avro/io/BinaryEncoder.java
>  AL    ./src/java/org/apache/avro/io/BlockingBinaryEncoder.java
>  AL    ./src/java/org/apache/avro/io/DatumReader.java
>  AL    ./src/java/org/apache/avro/io/DatumWriter.java
>  AL    ./src/java/org/apache/avro/io/Decoder.java
>  AL    ./src/java/org/apache/avro/io/Encoder.java
>  AL    ./src/java/org/apache/avro/io/ParsingTable.java
>  AL    ./src/java/org/apache/avro/io/ResolvingDecoder.java
>  AL    ./src/java/org/apache/avro/io/ResolvingTable.java
>  AL    ./src/java/org/apache/avro/io/ValidatingDecoder.java
>  AL    ./src/java/org/apache/avro/io/ValidatingEncoder.java
>  AL    ./src/java/org/apache/avro/io/package.html
> !????? ./src/java/org/apache/avro/io/doc-files/parsing.html
>  AL    ./src/java/org/apache/avro/ipc/AvroRemoteException.java
>  AL    ./src/java/org/apache/avro/ipc/ByteBufferInputStream.java
>  AL    ./src/java/org/apache/avro/ipc/ByteBufferOutputStream.java
>  AL    ./src/java/org/apache/avro/ipc/Requestor.java
>  AL    ./src/java/org/apache/avro/ipc/Responder.java
>  AL    ./src/java/org/apache/avro/ipc/SocketServer.java
>  AL    ./src/java/org/apache/avro/ipc/SocketTransceiver.java
>  AL    ./src/java/org/apache/avro/ipc/Transceiver.java
>  AL    ./src/java/org/apache/avro/ipc/package.html
>  AL    ./src/java/org/apache/avro/reflect/FixedSize.java
>  AL    ./src/java/org/apache/avro/reflect/ReflectData.java
>  AL    ./src/java/org/apache/avro/reflect/ReflectDatumReader.java
>  AL    ./src/java/org/apache/avro/reflect/ReflectDatumWriter.java
>  AL    ./src/java/org/apache/avro/reflect/ReflectRequestor.java
>  AL    ./src/java/org/apache/avro/reflect/ReflectResponder.java
>  AL    ./src/java/org/apache/avro/reflect/package.html
>  AL    ./src/java/org/apache/avro/specific/ProtocolTask.java
>  AL    ./src/java/org/apache/avro/specific/SchemaTask.java
>  AL    ./src/java/org/apache/avro/specific/SpecificCompiler.java
>  AL    ./src/java/org/apache/avro/specific/SpecificDatumReader.java
>  AL    ./src/java/org/apache/avro/specific/SpecificDatumWriter.java
>  AL    ./src/java/org/apache/avro/specific/SpecificExceptionBase.java
>  AL    ./src/java/org/apache/avro/specific/SpecificFixed.java
>  AL    ./src/java/org/apache/avro/specific/SpecificRecord.java
>  AL    ./src/java/org/apache/avro/specific/SpecificRecordBase.java
>  AL    ./src/java/org/apache/avro/specific/SpecificRequestor.java
>  AL    ./src/java/org/apache/avro/specific/SpecificResponder.java
>  AL    ./src/java/org/apache/avro/specific/package.html
>  AL    ./src/java/org/apache/avro/util/Utf8.java
>  AL    ./src/java/org/apache/avro/util/package.html
>  AL    ./src/py/avro/__init__.py
>  B     ./src/py/avro/__init__.pyc
>  AL    ./src/py/avro/genericio.py
>  B     ./src/py/avro/genericio.pyc
>  AL    ./src/py/avro/genericipc.py
>  B     ./src/py/avro/genericipc.pyc
>  AL    ./src/py/avro/io.py
>  B     ./src/py/avro/io.pyc
>  AL    ./src/py/avro/ipc.py
>  B     ./src/py/avro/ipc.pyc
>  AL    ./src/py/avro/protocol.py
>  B     ./src/py/avro/protocol.pyc
>  AL    ./src/py/avro/reflectio.py
>  B     ./src/py/avro/reflectio.pyc
>  AL    ./src/py/avro/reflectipc.py
>  B     ./src/py/avro/reflectipc.pyc
>  AL    ./src/py/avro/schema.py
>  B     ./src/py/avro/schema.pyc
> !????? ./src/schemata/org/apache/avro/ipc/HandshakeRequest.m4
> !????? ./src/schemata/org/apache/avro/ipc/HandshakeResponse.m4
> !????? ./src/schemata/org/apache/avro/ipc/MD5.js
>  AL    ./src/test/java/org/apache/avro/RandomData.java
>  AL    ./src/test/java/org/apache/avro/TestDataFile.java
>  AL    ./src/test/java/org/apache/avro/TestFsData.java
>  AL    ./src/test/java/org/apache/avro/TestProtocolGeneric.java
>  AL    ./src/test/java/org/apache/avro/TestProtocolReflect.java
>  AL    ./src/test/java/org/apache/avro/TestProtocolSpecific.java
>  AL    ./src/test/java/org/apache/avro/TestReflect.java
>  AL    ./src/test/java/org/apache/avro/TestSchema.java
>  AL    ./src/test/java/org/apache/avro/io/TestBinaryDecoder.java
> !????? ./src/test/java/org/apache/avro/io/TestBlockingIO.java
> !????? ./src/test/java/org/apache/avro/io/TestParsingTable.java
> !????? ./src/test/java/org/apache/avro/io/TestResolvingIO.java
> !????? ./src/test/java/org/apache/avro/io/TestResolvingTable.java
> !????? ./src/test/java/org/apache/avro/io/TestValidatingIO.java
>  AL    ./src/test/java/org/apache/avro/test/ 
> TestInvocationReporter.java
>  AL    ./src/test/java/org/apache/avro/test/TestOutputInterceptor.java
>  AL    ./src/test/java/org/apache/avro/test/TestSuiteInterceptor.java
>  AL    ./src/test/py/interoptests.py
>  AL    ./src/test/py/testio.py
>  AL    ./src/test/py/testioreflect.py
>  AL    ./src/test/py/testipc.py
>  AL    ./src/test/py/testipcreflect.py
> !????? ./src/test/schemata/FSData.avpr
> !????? ./src/test/schemata/interop.avsc
> !????? ./src/test/schemata/simple.avpr
>
> *****************************************************
> Printing headers for files without AL header...
>
>
> = 
> ======================================================================
> ==./CHANGES.txt
> = 
> ======================================================================
> Avro Change Log
>
> Avro 1.0.0 -- 1 July 2009
>
>  INCOMPATIBLE CHANGES
>
>    AVRO-1. Record fields are now defined with JSON arrays, rather
>    than JSON objects, since fields are ordered.  (cutting & sharad)
>
>    AVRO-9. Restrict map keys to strings.  (cutting & sharad)
>
>    AVRO-2. Optimized RPC handshake protocol for Java.  (cutting)
>
>    AVRO-57. Make ValueWriter an abstract class named Encoder and make
>    ValueReader an abstract class named Decoder, and add concrete
>    implementations named BinaryEncoder and BinaryDecoder. (cutting)
>
>    AVRO-46. Optimized RPC handshake protocol for Python.  (sharad)
>
>    AVRO-66.  Add per-call RPC metadata to Java and Python. (George
>    Porter & cutting)
>
>  NEW FEATURES
>
>    AVRO-6. Permit easier implementation of alternate generic data
>    representations, especially records with integer-indexed fields.
>    (Hong Tang via cutting)
>
>    AVRO-8. Add Java support for default values. (cutting)
>
>    AVRO-33.  C support for primitive types.  (Matt Massie via cutting)
>
>    AVRO-18.  Add support for enum types.  (cutting & sharad)
>
>    AVRO-10.  Add Java support for fixed-sized types. (cutting)
>
>    AVRO-38.  Add Python support for fixed-sized types. (sharad)
>
>    AVRO-42.  Add partial C++ implementation. (Scott Banachowski via  
> cutting)
>
>    AVRO-25.  Add blocking value writer that permits arbitrarily long
>    arrays and maps to be efficiently written as sequences of blocks.
>    (Thiruvalluvan M. G. via cutting)
>
>    AVRO-48.  Add JSON parser for C.  (Matt Massie via cutting)
>
>    AVRO-29.  Add to Java a validating encoder & decoder, and a
>    resolving decoder.  (Thiruvalluvan M. G. & Raymie Stata)
>
>    AVRO-67.  Add per-call RPC metadata to spec. (George Porter via  
> cutting)
>
> = 
> ======================================================================
> ==./avro-1.0.0.jar.md5
> = 
> ======================================================================
> 7e9830ae06f21fc37b81d8761b20c95d
>
> = 
> ======================================================================
> ==./avro-1.0.0.jar.sha1
> = 
> ======================================================================
> e1f0be571dbfda719d8206d0c2c881c833a78426
>
> = 
> ======================================================================
> ==./avro-1.0.0.pom
> = 
> ======================================================================
> <?xml version="1.0" encoding="UTF-8"?>
> <!--
>   Apache Maven 2 POM generated by Apache Ivy
>   http://ant.apache.org/ivy/
>   Apache Ivy version: 2.1.0-rc1 20090319213629
> -->
> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance 
> "
>    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd 
> ">
>
>  <modelVersion>4.0.0</modelVersion>
>  <groupId>org.apache.hadoop</groupId>
>  <artifactId>avro</artifactId>
>  <packaging>jar</packaging>
>  <version>1.0.0</version>
>  <dependencies>
>    <dependency>
>      <groupId>org.codehaus.jackson</groupId>
>      <artifactId>jackson-mapper-asl</artifactId>
>      <version>1.0.1</version>
>      <optional>true</optional>
>    </dependency>
>    <dependency>
>      <groupId>org.slf4j</groupId>
>      <artifactId>slf4j-simple</artifactId>
>      <version>1.5.8</version>
>      <optional>true</optional>
>    </dependency>
>    <dependency>
>      <groupId>com.thoughtworks.paranamer</groupId>
>      <artifactId>paranamer</artifactId>
>      <version>1.5</version>
>      <optional>true</optional>
>    </dependency>
>    <dependency>
>      <groupId>com.thoughtworks.paranamer</groupId>
>      <artifactId>paranamer-ant</artifactId>
>      <version>1.5</version>
>      <optional>true</optional>
>    </dependency>
>    <dependency>
>      <groupId>org.testng</groupId>
>      <artifactId>testng</artifactId>
>      <version>5.8</version>
>      <optional>true</optional>
>    </dependency>
>  </dependencies>
> </project>
>
> = 
> ======================================================================
> ==./avro-1.0.0.pom.md5
> = 
> ======================================================================
> 514695bcb9d6ff691c0db5701a05581f
>
> = 
> ======================================================================
> ==./avro-1.0.0.pom.sha1
> = 
> ======================================================================
> ccecdf9d663ee48a8038caeee8ca9ac89bdb3608
>
> = 
> ======================================================================
> ==./ivy.xml
> = 
> ======================================================================
> <ivy-module version="2.0"
>            xmlns:e="http://ant.apache.org/ivy/extra">
>
>  <info organisation="org.apache.hadoop"
> 	module="${name}" revision="${version}">
>    <license name="Apache 2.0"/>
>    <ivyauthor name="Apache Hadoop" url="http://hadoop.apache.org"/>
>    <description>Avro</description>
>  </info>
>
>  <dependencies>
>    <dependency org="org.codehaus.jackson" name="jackson-mapper-asl"
> 		rev="1.0.1"/>
>    <dependency org="org.slf4j" name="slf4j-simple"
> 		rev="1.5.8"/>
>    <dependency org="com.thoughtworks.paranamer" name="paranamer"
> 		rev="1.5"/>
>    <dependency org="com.thoughtworks.paranamer" name="paranamer-ant"
> 		rev="1.5"/>
>    <dependency org="org.testng" name="testng" rev="5.8"  
> transitive="false">
>      <artifact name="testng" type="jar" ext="jar"  
> e:classifier="jdk15"/>
>    </dependency>
>  </dependencies>
>
> </ivy-module>
>
> = 
> ======================================================================
> ==./c/Linux-i386-32/include/avro.h
> = 
> ======================================================================
> #ifndef AVRO_H
> #define AVRO_H
>
> /**
> @file avro.h
> @brief AVRO API
> */
>
> #include <stdarg.h>
> #include <stdint.h>
> #include <sys/types.h>
> #include <apr_pools.h>
> #include <apr_file_io.h>
> #include <apr_network_io.h>
>
> #ifdef __cplusplus
> extern "C" {
> #endif
>
> /**
> @defgroup AVRO Avro C API
> @{
> */
>
> /**
> * @defgroup Handle_Routines AVRO Handles
> * @ingroup AVRO
> * @{
> */
>
> /**
> Avro operation enum.
> Enum for discriminating whether an Avro handle is for encoding or  
> decoding data.
> */
> enum avro_op
> {
>  AVRO_ENCODE = 0, /**< Marks a handle as encoding Avro data */
>  AVRO_DECODE = 1  /**< Marks a handle as decoding Avro data */
> };
> typedef enum avro_op avro_op;
>
> /**
> Avro status enum.
> Enum used by Avro functions to return state.
> @todo expand the number of states
> */
> enum avro_status_t
> {
>  AVRO_OK = 0, /**< Function success */
>  AVRO_FAILURE = 1 /**< Function failure */
>
> = 
> ======================================================================
> ==./c/Linux-i386-32/lib/libavro.la
> = 
> ======================================================================
> # libavro.la - a libtool library file
> # Generated by ltmain.sh (GNU libtool) 2.2.6 Debian-2.2.6a-1ubuntu1
> #
> # Please DO NOT delete this file!
> # It is necessary for linking the library.
>
> # The name that we can dlopen(3).
> dlname='libavro.so.0'
>
> # Names of this library.
> library_names='libavro.so.0.0.0 libavro.so.0 libavro.so'
>
> # The name of the static archive.
> old_library='libavro.a'
>
> # Linker flags that can not go in dependency_libs.
> inherited_linker_flags=' -pthread'
>
> # Libraries that this one depends upon.
> dependency_libs=''
>
> # Names of additional weak libraries provided by this library
> weak_library_names=''
>
> # Version information for libavro.
> current=0
> age=0
> revision=0
>
> # Is this an already installed library?
> installed=yes
>
> # Should we warn about portability when linking against -modules?
> shouldnotlink=no
>
> # Files to dlopen/dlpreopen
> dlopen=''
> dlpreopen=''
>
> # Directory that this library needs to be installed in:
> libdir='/home/cutting/src/avro/test/build/c/Linux-i386-32/lib'
>
> = 
> ======================================================================
> ==./doc/broken-links.xml
> = 
> ======================================================================
> <broken-links>
> </broken-links>
>
> = 
> ======================================================================
> ==./doc/index.html
> = 
> ======================================================================
> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd 
> ">
> <html>
> <head>
> <META http-equiv="Content-Type" content="text/html; charset=UTF-8">
> <meta content="Apache Forrest" name="Generator">
> <meta name="Forrest-version" content="0.8">
> <meta name="Forrest-skin-name" content="pelt">
> <title>Welcome to Avro!</title>
> <link type="text/css" href="skin/basic.css" rel="stylesheet">
> <link media="screen" type="text/css" href="skin/screen.css"  
> rel="stylesheet">
> <link media="print" type="text/css" href="skin/print.css"  
> rel="stylesheet">
> <link type="text/css" href="skin/profile.css" rel="stylesheet">
> <script src="skin/getBlank.js" language="javascript" type="text/ 
> javascript"></script><script src="skin/getMenu.js"  
> language="javascript" type="text/javascript"></script><script  
> src="skin/fontsize.js" language="javascript" type="text/ 
> javascript"></script>
> <link rel="shortcut icon" href="images/favicon.ico">
> </head>
> <body onload="init()">
> <script type="text/javascript">ndeSetTextSize();</script>
> <div id="top">
> <!--+
>    |breadtrail
>    +-->
> <div class="breadtrail">
> <a href="http://www.apache.org/">Apache</a> &gt; <a href="http://hadoop.apache.org/ 
> ">Hadoop</a> &gt; <a href="http://hadoop.apache.org/avro/">Avro</ 
> a><script src="skin/breadcrumbs.js" language="JavaScript" type="text/ 
> javascript"></script>
> </div>
> <!--+
>    |header
>    +-->
> <div class="header">
> <!--+
>    |start group logo
>    +-->
> <div class="grouplogo">
> <a href="http://hadoop.apache.org/"><img class="logoImage"  
> alt="Hadoop" src="images/hadoop-logo.jpg" title="Apache Hadoop"></a>
> </div>
> <!--+
>    |end group logo
>    +-->
> <!--+
>    |start Project Logo
>    +-->
> <div class="projectlogo">
> <a href="http://hadoop.apache.org/avro/"><img class="logoImage"  
> alt="Avro" src="images/avro-logo.png" title="Serialization System"></ 
> a>
> </div>
> <!--+
>    |end Project Logo
>    +-->
> <!--+
>    |start Search
>    +-->
> <div class="searchbox">
>
> = 
> ======================================================================
> ==./doc/linkmap.html
> = 
> ======================================================================
> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd 
> ">
> <html>
> <head>
> <META http-equiv="Content-Type" content="text/html; charset=UTF-8">
> <meta content="Apache Forrest" name="Generator">
> <meta name="Forrest-version" content="0.8">
> <meta name="Forrest-skin-name" content="pelt">
> <title>Site Linkmap Table of Contents</title>
> <link type="text/css" href="skin/basic.css" rel="stylesheet">
> <link media="screen" type="text/css" href="skin/screen.css"  
> rel="stylesheet">
> <link media="print" type="text/css" href="skin/print.css"  
> rel="stylesheet">
> <link type="text/css" href="skin/profile.css" rel="stylesheet">
> <script src="skin/getBlank.js" language="javascript" type="text/ 
> javascript"></script><script src="skin/getMenu.js"  
> language="javascript" type="text/javascript"></script><script  
> src="skin/fontsize.js" language="javascript" type="text/ 
> javascript"></script>
> <link rel="shortcut icon" href="images/favicon.ico">
> </head>
> <body onload="init()">
> <script type="text/javascript">ndeSetTextSize();</script>
> <div id="top">
> <!--+
>    |breadtrail
>    +-->
> <div class="breadtrail">
> <a href="http://www.apache.org/">Apache</a> &gt; <a href="http://hadoop.apache.org/ 
> ">Hadoop</a> &gt; <a href="http://hadoop.apache.org/avro/">Avro</ 
> a><script src="skin/breadcrumbs.js" language="JavaScript" type="text/ 
> javascript"></script>
> </div>
> <!--+
>    |header
>    +-->
> <div class="header">
> <!--+
>    |start group logo
>    +-->
> <div class="grouplogo">
> <a href="http://hadoop.apache.org/"><img class="logoImage"  
> alt="Hadoop" src="images/hadoop-logo.jpg" title="Apache Hadoop"></a>
> </div>
> <!--+
>    |end group logo
>    +-->
> <!--+
>    |start Project Logo
>    +-->
> <div class="projectlogo">
> <a href="http://hadoop.apache.org/avro/"><img class="logoImage"  
> alt="Avro" src="images/avro-logo.png" title="Serialization System"></ 
> a>
> </div>
> <!--+
>    |end Project Logo
>    +-->
> <!--+
>    |start Search
>    +-->
> <div class="searchbox">
>
> = 
> ======================================================================
> ==./doc/spec.html
> = 
> ======================================================================
> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd 
> ">
> <html>
> <head>
> <META http-equiv="Content-Type" content="text/html; charset=UTF-8">
> <meta content="Apache Forrest" name="Generator">
> <meta name="Forrest-version" content="0.8">
> <meta name="Forrest-skin-name" content="pelt">
> <title>Avro 1.0 Specification</title>
> <link type="text/css" href="skin/basic.css" rel="stylesheet">
> <link media="screen" type="text/css" href="skin/screen.css"  
> rel="stylesheet">
> <link media="print" type="text/css" href="skin/print.css"  
> rel="stylesheet">
> <link type="text/css" href="skin/profile.css" rel="stylesheet">
> <script src="skin/getBlank.js" language="javascript" type="text/ 
> javascript"></script><script src="skin/getMenu.js"  
> language="javascript" type="text/javascript"></script><script  
> src="skin/fontsize.js" language="javascript" type="text/ 
> javascript"></script>
> <link rel="shortcut icon" href="images/favicon.ico">
> </head>
> <body onload="init()">
> <script type="text/javascript">ndeSetTextSize();</script>
> <div id="top">
> <!--+
>    |breadtrail
>    +-->
> <div class="breadtrail">
> <a href="http://www.apache.org/">Apache</a> &gt; <a href="http://hadoop.apache.org/ 
> ">Hadoop</a> &gt; <a href="http://hadoop.apache.org/avro/">Avro</ 
> a><script src="skin/breadcrumbs.js" language="JavaScript" type="text/ 
> javascript"></script>
> </div>
> <!--+
>    |header
>    +-->
> <div class="header">
> <!--+
>    |start group logo
>    +-->
> <div class="grouplogo">
> <a href="http://hadoop.apache.org/"><img class="logoImage"  
> alt="Hadoop" src="images/hadoop-logo.jpg" title="Apache Hadoop"></a>
> </div>
> <!--+
>    |end group logo
>    +-->
> <!--+
>    |start Project Logo
>    +-->
> <div class="projectlogo">
> <a href="http://hadoop.apache.org/avro/"><img class="logoImage"  
> alt="Avro" src="images/avro-logo.png" title="Serialization System"></ 
> a>
> </div>
> <!--+
>    |end Project Logo
>    +-->
> <!--+
>    |start Search
>    +-->
> <div class="searchbox">
>
> = 
> ======================================================================
> ==./doc/api/c/html/annotated.html
> = 
> ======================================================================
> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
> <html><head><meta http-equiv="Content-Type" content="text/ 
> html;charset=UTF-8">
> <title>AVRO C API: Data Structures</title>
> <link href="tabs.css" rel="stylesheet" type="text/css">
> <link href="doxygen.css" rel="stylesheet" type="text/css">
> </head><body>
> <!-- Generated by Doxygen 1.5.8 -->
> <div class="navigation" id="top">
>  <div class="tabs">
>    <ul>
>      <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
>      <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
>      <li><a href="modules.html"><span>Modules</span></a></li>
>      <li class="current"><a  
> href="annotated.html"><span>Data&nbsp;Structures</span></a></li>
>      <li><a href="files.html"><span>Files</span></a></li>
>    </ul>
>  </div>
>  <div class="tabs">
>    <ul>
>      <li class="current"><a  
> href="annotated.html"><span>Data&nbsp;Structures</span></a></li>
>      <li><a href="functions.html"><span>Data&nbsp;Fields</span></a></ 
> li>
>    </ul>
>  </div>
> </div>
> <div class="contents">
> <h1>Data Structures</h1>Here are the data structures with brief  
> descriptions:<table>
>  <tr><td class="indexkey"><a class="el"  
> href="struct_a_v_r_o.html">AVRO</a></td><td class="indexvalue"></ 
> td></tr>
> </table>
> </div>
> <hr size="1"><address style="text-align: right;"><small>Generated on  
> Wed Jul 1 14:58:19 2009 for AVRO C API by&nbsp;
> <a href="http://www.doxygen.org/index.html">
> <img src="doxygen.png" alt="doxygen" align="middle" border="0"></a>  
> 1.5.8 </small></address>
> </body>
> </html>
>
> = 
> ======================================================================
> ==./doc/api/c/html/avro_8h-source.html
> = 
> ======================================================================
> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
> <html><head><meta http-equiv="Content-Type" content="text/ 
> html;charset=UTF-8">
> <title>AVRO C API: avro.h Source File</title>
> <link href="tabs.css" rel="stylesheet" type="text/css">
> <link href="doxygen.css" rel="stylesheet" type="text/css">
> </head><body>
> <!-- Generated by Doxygen 1.5.8 -->
> <div class="navigation" id="top">
>  <div class="tabs">
>    <ul>
>      <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
>      <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
>      <li><a href="modules.html"><span>Modules</span></a></li>
>      <li><a href="annotated.html"><span>Data&nbsp;Structures</span></ 
> a></li>
>      <li class="current"><a href="files.html"><span>Files</span></ 
> a></li>
>    </ul>
>  </div>
>  <div class="tabs">
>    <ul>
>      <li><a href="files.html"><span>File&nbsp;List</span></a></li>
>      <li><a href="globals.html"><span>Globals</span></a></li>
>    </ul>
>  </div>
> <h1>avro.h</h1><a href="avro_8h.html">Go to the documentation of  
> this file.</a><div class="fragment"><pre class="fragment"><a  
> name="l00001"></a>00001 <span class="preprocessor">#ifndef AVRO_H</ 
> span>
> <a name="l00002"></a>00002 <span class="preprocessor"></span><span  
> class="preprocessor">#define AVRO_H</span>
> <a name="l00003"></a>00003 <span class="preprocessor"></span><span  
> class="comment"></span>
> <a name="l00004"></a>00004 <span class="comment">/**</span>
> <a name="l00005"></a>00005 <span class="comment">@file avro.h</span>
> <a name="l00006"></a>00006 <span class="comment">@brief AVRO API</ 
> span>
> <a name="l00007"></a>00007 <span class="comment">*/</span>
> <a name="l00008"></a>00008
> <a name="l00009"></a>00009 <span class="preprocessor">#include  
> &lt;stdarg.h&gt;</span>
> <a name="l00010"></a>00010 <span class="preprocessor">#include  
> &lt;stdint.h&gt;</span>
> <a name="l00011"></a>00011 <span class="preprocessor">#include  
> &lt;sys/types.h&gt;</span>
> <a name="l00012"></a>00012 <span class="preprocessor">#include  
> &lt;apr_pools.h&gt;</span>
> <a name="l00013"></a>00013 <span class="preprocessor">#include  
> &lt;apr_file_io.h&gt;</span>
> <a name="l00014"></a>00014 <span class="preprocessor">#include  
> &lt;apr_network_io.h&gt;</span>
> <a name="l00015"></a>00015
> <a name="l00016"></a>00016 <span class="preprocessor">#ifdef  
> __cplusplus</span>
> <a name="l00017"></a>00017 <span class="preprocessor"></span><span  
> class="keyword">extern</span> <span class="stringliteral">"C"</span> {
> <a name="l00018"></a>00018 <span class="preprocessor">#endif</span>
> <a name="l00019"></a>00019 <span class="preprocessor"></span><span  
> class="comment"></span>
> <a name="l00020"></a>00020 <span class="comment">/**</span>
> <a name="l00021"></a>00021 <span class="comment">@defgroup AVRO Avro  
> C API</span>
> <a name="l00022"></a>00022 <span class="comment">@{</span>
> <a name="l00023"></a>00023 <span class="comment">*/</span>
> <a name="l00024"></a>00024 <span class="comment"></span>
> <a name="l00025"></a>00025 <span class="comment">/**</span>
> <a name="l00026"></a>00026 <span class="comment">* @defgroup  
> Handle_Routines AVRO Handles</span>
> <a name="l00027"></a>00027 <span class="comment">* @ingroup AVRO</ 
> span>
>
> = 
> ======================================================================
> ==./doc/api/c/html/avro_8h.html
> = 
> ======================================================================
> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
> <html><head><meta http-equiv="Content-Type" content="text/ 
> html;charset=UTF-8">
> <title>AVRO C API: avro.h File Reference</title>
> <link href="tabs.css" rel="stylesheet" type="text/css">
> <link href="doxygen.css" rel="stylesheet" type="text/css">
> </head><body>
> <!-- Generated by Doxygen 1.5.8 -->
> <div class="navigation" id="top">
>  <div class="tabs">
>    <ul>
>      <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
>      <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
>      <li><a href="modules.html"><span>Modules</span></a></li>
>      <li><a href="annotated.html"><span>Data&nbsp;Structures</span></ 
> a></li>
>      <li class="current"><a href="files.html"><span>Files</span></ 
> a></li>
>    </ul>
>  </div>
>  <div class="tabs">
>    <ul>
>      <li><a href="files.html"><span>File&nbsp;List</span></a></li>
>      <li><a href="globals.html"><span>Globals</span></a></li>
>    </ul>
>  </div>
> </div>
> <div class="contents">
> <h1>avro.h File Reference</h1><a class="el"  
> href="struct_a_v_r_o.html">AVRO</a> API.
> <a href="#_details">More...</a>
> <p>
> <code>#include &lt;stdarg.h&gt;</code><br>
> <code>#include &lt;stdint.h&gt;</code><br>
> <code>#include &lt;sys/types.h&gt;</code><br>
> <code>#include &lt;apr_pools.h&gt;</code><br>
> <code>#include &lt;apr_file_io.h&gt;</code><br>
> <code>#include &lt;apr_network_io.h&gt;</code><br>
>
> <p>
> <a href="avro_8h-source.html">Go to the source code of this file.</ 
> a><table border="0" cellpadding="0" cellspacing="0">
> <tr><td></td></tr>
> <tr><td colspan="2"><br><h2>Data Structures</h2></td></tr>
> <tr><td class="memItemLeft" nowrap align="right" valign="top">struct  
> &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el"  
> href="struct_a_v_r_o.html">AVRO</a></td></tr>
>
> <tr><td class="memItemLeft" nowrap align="right" valign="top">struct  
> &nbsp;</td><td class="memItemRight"  
> valign="bottom"><b>AVRO::AVRO::avro_ops</b></td></tr>
>
> <tr><td colspan="2"><br><h2>Defines</h2></td></tr>
> <tr><td class="memItemLeft" nowrap align="right" valign="top"><a  
> class="anchor" name="gec7f77fb08d34504a65e49f23673e2f2"></a><!--  
> doxytag: member="avro.h::CHECK_ERROR"  
> ref="gec7f77fb08d34504a65e49f23673e2f2" args="(__status)" -->
> #define&nbsp;</td><td class="memItemRight"  
> valign="bottom"><b>CHECK_ERROR</ 
> b>(__status)&nbsp;&nbsp;&nbsp;if(__status != AVRO_OK){ return  
> __status; }</td></tr>
>
> <tr><td class="memItemLeft" nowrap align="right" valign="top"><a  
> class="anchor" name="ga11bb99285d5512c5739aacb0b9352ca"></a><!--  
> doxytag: member="avro.h::AVRO_GETBYTES"  
> ref="ga11bb99285d5512c5739aacb0b9352ca" args="(avro, addr, len)" -->
> #define&nbsp;</td><td class="memItemRight"  
> valign="bottom"><b>AVRO_GETBYTES</b>(avro, addr,  
> len)&nbsp;&nbsp;&nbsp;(*(avro)-&gt;a_ops-&gt;a_getbytes)(avro, addr,  
> len)</td></tr>
>
>
> = 
> ======================================================================
> ==./doc/api/c/html/classes.html
> = 
> ======================================================================
> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
> <html><head><meta http-equiv="Content-Type" content="text/ 
> html;charset=UTF-8">
> <title>AVRO C API: Alphabetical List</title>
> <link href="tabs.css" rel="stylesheet" type="text/css">
> <link href="doxygen.css" rel="stylesheet" type="text/css">
> </head><body>
> <!-- Generated by Doxygen 1.5.8 -->
> <div class="navigation" id="top">
>  <div class="tabs">
>    <ul>
>      <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
>      <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
>      <li><a href="modules.html"><span>Modules</span></a></li>
>      <li class="current"><a  
> href="annotated.html"><span>Data&nbsp;Structures</span></a></li>
>      <li><a href="files.html"><span>Files</span></a></li>
>    </ul>
>  </div>
>  <div class="tabs">
>    <ul>
>      <li><a href="annotated.html"><span>Data&nbsp;Structures</span></ 
> a></li>
>      <li><a href="functions.html"><span>Data&nbsp;Fields</span></a></ 
> li>
>    </ul>
>  </div>
> </div>
> <div class="contents">
> <h1>Data Structure Index</h1><p><div class="qindex"><a  
> class="qindex" href="#letter_A">A</a></div><p>
> <table align="center" width="95%" border="0" cellspacing="0"  
> cellpadding="0">
> <tr><td><a name="letter_A"></a><table border="0" cellspacing="0"  
> cellpadding="0"><tr><td><div class="ah">&nbsp;&nbsp;A&nbsp;&nbsp;</ 
> div></td></tr></table>
> </td><td><a class="el" href="struct_a_v_r_o.html">AVRO</ 
> a>&nbsp;&nbsp;&nbsp;</td></tr></table><p><div class="qindex"><a  
> class="qindex" href="#letter_A">A</a></div><p>
> </div>
> <hr size="1"><address style="text-align: right;"><small>Generated on  
> Wed Jul 1 14:58:19 2009 for AVRO C API by&nbsp;
> <a href="http://www.doxygen.org/index.html">
> <img src="doxygen.png" alt="doxygen" align="middle" border="0"></a>  
> 1.5.8 </small></address>
> </body>
> </html>
>
> = 
> ======================================================================
> ==./doc/api/c/html/doxygen.css
> = 
> ======================================================================
> body, table, div, p, dl {
> 	font-family: Lucida Grande, Verdana, Geneva, Arial, sans-serif;
> 	font-size: 12px;
> }
>
> /* @group Heading Levels */
>
> h1 {
> 	text-align: center;
> 	font-size: 150%;
> }
>
> h2 {
> 	font-size: 120%;
> }
>
> h3 {
> 	font-size: 100%;
> }
>
> /* @end */
>
> caption {
> 	font-weight: bold;
> }
>
> div.qindex, div.navtab{
> 	background-color: #e8eef2;
> 	border: 1px solid #84b0c7;
> 	text-align: center;
> 	margin: 2px;
> 	padding: 2px;
> }
>
> div.qindex, div.navpath {
> 	width: 100%;
> 	line-height: 140%;
> }
>
> div.navtab {
> 	margin-right: 15px;
> }
>
> /* @group Link Styling */
>
> a {
> 	color: #153788;
> 	font-weight: normal;
> 	text-decoration: none;
> }
>
> = 
> ======================================================================
> ==./doc/api/c/html/files.html
> = 
> ======================================================================
> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
> <html><head><meta http-equiv="Content-Type" content="text/ 
> html;charset=UTF-8">
> <title>AVRO C API: File Index</title>
> <link href="tabs.css" rel="stylesheet" type="text/css">
> <link href="doxygen.css" rel="stylesheet" type="text/css">
> </head><body>
> <!-- Generated by Doxygen 1.5.8 -->
> <div class="navigation" id="top">
>  <div class="tabs">
>    <ul>
>      <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
>      <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
>      <li><a href="modules.html"><span>Modules</span></a></li>
>      <li><a href="annotated.html"><span>Data&nbsp;Structures</span></ 
> a></li>
>      <li class="current"><a href="files.html"><span>Files</span></ 
> a></li>
>    </ul>
>  </div>
>  <div class="tabs">
>    <ul>
>      <li class="current"><a href="files.html"><span>File&nbsp;List</ 
> span></a></li>
>      <li><a href="globals.html"><span>Globals</span></a></li>
>    </ul>
>  </div>
> </div>
> <div class="contents">
> <h1>File List</h1>Here is a list of all documented files with brief  
> descriptions:<table>
>  <tr><td class="indexkey"><a class="el" href="avro_8h.html">avro.h</ 
> a> <a href="avro_8h-source.html">[code]</a></td><td  
> class="indexvalue"><a class="el" href="struct_a_v_r_o.html">AVRO</a>  
> API </td></tr>
>  <tr><td class="indexkey"><b>json.h</b> <a href="json_8h- 
> source.html">[code]</a></td><td class="indexvalue"></td></tr>
>  <tr><td class="indexkey"><b>json_schema.h</b> <a  
> href="json__schema_8h-source.html">[code]</a></td><td  
> class="indexvalue"></td></tr>
>  <tr><td class="indexkey"><b>json_tokenizer.h</b> <a  
> href="json__tokenizer_8h-source.html">[code]</a></td><td  
> class="indexvalue"></td></tr>
> </table>
> </div>
> <hr size="1"><address style="text-align: right;"><small>Generated on  
> Wed Jul 1 14:58:19 2009 for AVRO C API by&nbsp;
> <a href="http://www.doxygen.org/index.html">
> <img src="doxygen.png" alt="doxygen" align="middle" border="0"></a>  
> 1.5.8 </small></address>
> </body>
> </html>
>
> = 
> ======================================================================
> ==./doc/api/c/html/functions.html
> = 
> ======================================================================
> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
> <html><head><meta http-equiv="Content-Type" content="text/ 
> html;charset=UTF-8">
> <title>AVRO C API: Data Fields</title>
> <link href="tabs.css" rel="stylesheet" type="text/css">
> <link href="doxygen.css" rel="stylesheet" type="text/css">
> </head><body>
> <!-- Generated by Doxygen 1.5.8 -->
> <div class="navigation" id="top">
>  <div class="tabs">
>    <ul>
>      <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
>      <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
>      <li><a href="modules.html"><span>Modules</span></a></li>
>      <li class="current"><a  
> href="annotated.html"><span>Data&nbsp;Structures</span></a></li>
>      <li><a href="files.html"><span>Files</span></a></li>
>    </ul>
>  </div>
>  <div class="tabs">
>    <ul>
>      <li><a href="annotated.html"><span>Data&nbsp;Structures</span></ 
> a></li>
>      <li class="current"><a  
> href="functions.html"><span>Data&nbsp;Fields</span></a></li>
>    </ul>
>  </div>
>  <div class="tabs">
>    <ul>
>      <li class="current"><a href="functions.html"><span>All</span></ 
> a></li>
>      <li><a href="functions_vars.html"><span>Variables</span></a></li>
>    </ul>
>  </div>
> </div>
> <div class="contents">
> Here is a list of all documented struct and union fields with links  
> to the struct/union documentation for each field:
> <p>
> <ul>
> <li>a_op
> : <a class="el"  
> href="struct_a_v_r_o.html#7291c82adfe53e2d895824663e028e8e">AVRO</a>
> <li>addr
> : <a class="el"  
> href="struct_a_v_r_o.html#b1c64881a5280cceb600f316fbb07952">AVRO</a>
> <li>file
> : <a class="el"  
> href="struct_a_v_r_o.html#adc436b34c7426022b819cdc2d6ced6e">AVRO</a>
> <li>len
> : <a class="el"  
> href="struct_a_v_r_o.html#167d3abd38fca62643a5ceb0c34711bc">AVRO</a>
> <li>pool
> : <a class="el"  
> href="struct_a_v_r_o.html#b4cc960de06bd42633124a8a62852928">AVRO</a>
> <li>schema
> : <a class="el"  
> href="struct_a_v_r_o.html#e6ff7776029faa4c4d7053f0cb7b71e5">AVRO</a>
> <li>socket
> : <a class="el"  
> href="struct_a_v_r_o.html#33d50daaa50ad7ec3c4e22d4f1eb6143">AVRO</a>
> <li>used
> : <a class="el"  
> href="struct_a_v_r_o.html#4ce667da8e13c2b9c464aa76b414ab82">AVRO</a>
>
> = 
> ======================================================================
> ==./doc/api/c/html/functions_vars.html
> = 
> ======================================================================
> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
> <html><head><meta http-equiv="Content-Type" content="text/ 
> html;charset=UTF-8">
> <title>AVRO C API: Data Fields - Variables</title>
> <link href="tabs.css" rel="stylesheet" type="text/css">
> <link href="doxygen.css" rel="stylesheet" type="text/css">
> </head><body>
> <!-- Generated by Doxygen 1.5.8 -->
> <div class="navigation" id="top">
>  <div class="tabs">
>    <ul>
>      <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
>      <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
>      <li><a href="modules.html"><span>Modules</span></a></li>
>      <li class="current"><a  
> href="annotated.html"><span>Data&nbsp;Structures</span></a></li>
>      <li><a href="files.html"><span>Files</span></a></li>
>    </ul>
>  </div>
>  <div class="tabs">
>    <ul>
>      <li><a href="annotated.html"><span>Data&nbsp;Structures</span></ 
> a></li>
>      <li class="current"><a  
> href="functions.html"><span>Data&nbsp;Fields</span></a></li>
>    </ul>
>  </div>
>  <div class="tabs">
>    <ul>
>      <li><a href="functions.html"><span>All</span></a></li>
>      <li class="current"><a  
> href="functions_vars.html"><span>Variables</span></a></li>
>    </ul>
>  </div>
> </div>
> <div class="contents">
> &nbsp;
> <p>
> <ul>
> <li>a_op
> : <a class="el"  
> href="struct_a_v_r_o.html#7291c82adfe53e2d895824663e028e8e">AVRO</a>
> <li>addr
> : <a class="el"  
> href="struct_a_v_r_o.html#b1c64881a5280cceb600f316fbb07952">AVRO</a>
> <li>file
> : <a class="el"  
> href="struct_a_v_r_o.html#adc436b34c7426022b819cdc2d6ced6e">AVRO</a>
> <li>len
> : <a class="el"  
> href="struct_a_v_r_o.html#167d3abd38fca62643a5ceb0c34711bc">AVRO</a>
> <li>pool
> : <a class="el"  
> href="struct_a_v_r_o.html#b4cc960de06bd42633124a8a62852928">AVRO</a>
> <li>schema
> : <a class="el"  
> href="struct_a_v_r_o.html#e6ff7776029faa4c4d7053f0cb7b71e5">AVRO</a>
> <li>socket
> : <a class="el"  
> href="struct_a_v_r_o.html#33d50daaa50ad7ec3c4e22d4f1eb6143">AVRO</a>
> <li>used
> : <a class="el"  
> href="struct_a_v_r_o.html#4ce667da8e13c2b9c464aa76b414ab82">AVRO</a>
>
> = 
> ======================================================================
> ==./doc/api/c/html/globals.html
> = 
> ======================================================================
> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
> <html><head><meta http-equiv="Content-Type" content="text/ 
> html;charset=UTF-8">
> <title>AVRO C API: Data Fields</title>
> <link href="tabs.css" rel="stylesheet" type="text/css">
> <link href="doxygen.css" rel="stylesheet" type="text/css">
> </head><body>
> <!-- Generated by Doxygen 1.5.8 -->
> <div class="navigation" id="top">
>  <div class="tabs">
>    <ul>
>      <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
>      <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
>      <li><a href="modules.html"><span>Modules</span></a></li>
>      <li><a href="annotated.html"><span>Data&nbsp;Structures</span></ 
> a></li>
>      <li class="current"><a href="files.html"><span>Files</span></ 
> a></li>
>    </ul>
>  </div>
>  <div class="tabs">
>    <ul>
>      <li><a href="files.html"><span>File&nbsp;List</span></a></li>
>      <li class="current"><a href="globals.html"><span>Globals</ 
> span></a></li>
>    </ul>
>  </div>
>  <div class="tabs">
>    <ul>
>      <li class="current"><a href="globals.html"><span>All</span></ 
> a></li>
>      <li><a href="globals_func.html"><span>Functions</span></a></li>
>      <li><a href="globals_enum.html"><span>Enumerations</span></a></ 
> li>
>      <li><a href="globals_eval.html"><span>Enumerator</span></a></li>
>    </ul>
>  </div>
> </div>
> <div class="contents">
> Here is a list of all documented functions, variables, defines,  
> enums, and typedefs with links to the documentation:
> <p>
> <ul>
> <li>avro_array()
> : <a class="el"  
> href 
> ="group___compound.html#g52f0a4383812a3d19a00f461ddb1a27c">avro.h</a>
> <li>avro_bool()
> : <a class="el"  
> href 
> ="group___primitives.html#ga230ba9c2028579916da8e3ef7abbb07">avro.h</ 
> a>
> <li>avro_bytes()
> : <a class="el"  
> href 
> ="group___primitives.html#g883aa71b77043b51296ab278c2a84a23">avro.h</ 
> a>
> <li>avro_create_file()
> : <a class="el"  
> href 
> = 
> "group___handle___routines 
> .html#g072028012d958aec05067e1c1e04ee0e">avro.h</a>
> <li>avro_create_memory()
> : <a class="el"  
> href 
> = 
> "group___handle___routines 
> .html#ga8d57587e61e593b8878b80163977430">avro.h</a>
> <li>avro_create_socket()
> : <a class="el"  
> href 
> = 
> "group___handle___routines 
> .html#g2fb229d05fdcaad3da0f6a9899bd09be">avro.h</a>
> <li>AVRO_DECODE
> : <a class="el"  
> href 
> = 
> "group___handle___routines 
> .html 
> #ggcd8ee9ad4a4882eef8e3d9a0d5faec682802292d4fd32b8eb68872bcc03bd1dd 
> ">avro.h</a>
>
> = 
> ======================================================================
> ==./doc/api/c/html/globals_enum.html
> = 
> ======================================================================
> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
> <html><head><meta http-equiv="Content-Type" content="text/ 
> html;charset=UTF-8">
> <title>AVRO C API: Data Fields</title>
> <link href="tabs.css" rel="stylesheet" type="text/css">
> <link href="doxygen.css" rel="stylesheet" type="text/css">
> </head><body>
> <!-- Generated by Doxygen 1.5.8 -->
> <div class="navigation" id="top">
>  <div class="tabs">
>    <ul>
>      <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
>      <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
>      <li><a href="modules.html"><span>Modules</span></a></li>
>      <li><a href="annotated.html"><span>Data&nbsp;Structures</span></ 
> a></li>
>      <li class="current"><a href="files.html"><span>Files</span></ 
> a></li>
>    </ul>
>  </div>
>  <div class="tabs">
>    <ul>
>      <li><a href="files.html"><span>File&nbsp;List</span></a></li>
>      <li class="current"><a href="globals.html"><span>Globals</ 
> span></a></li>
>    </ul>
>  </div>
>  <div class="tabs">
>    <ul>
>      <li><a href="globals.html"><span>All</span></a></li>
>      <li><a href="globals_func.html"><span>Functions</span></a></li>
>      <li class="current"><a  
> href="globals_enum.html"><span>Enumerations</span></a></li>
>      <li><a href="globals_eval.html"><span>Enumerator</span></a></li>
>    </ul>
>  </div>
> </div>
> <div class="contents">
> &nbsp;
> <p>
> <ul>
> <li>avro_op
> : <a class="el"  
> href 
> = 
> "group___handle___routines 
> .html#gcd8ee9ad4a4882eef8e3d9a0d5faec68">avro.h</a>
> <li>avro_status_t
> : <a class="el"  
> href 
> = 
> "group___handle___routines 
> .html#g4271ca78aabaaad628d7b632aa5a1499">avro.h</a>
> </ul>
> </div>
> <hr size="1"><address style="text-align: right;"><small>Generated on  
> Wed Jul 1 14:58:19 2009 for AVRO C API by&nbsp;
> <a href="http://www.doxygen.org/index.html">
> <img src="doxygen.png" alt="doxygen" align="middle" border="0"></a>  
> 1.5.8 </small></address>
> </body>
> </html>
>
> = 
> ======================================================================
> ==./doc/api/c/html/globals_eval.html
> = 
> ======================================================================
> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
> <html><head><meta http-equiv="Content-Type" content="text/ 
> html;charset=UTF-8">
> <title>AVRO C API: Data Fields</title>
> <link href="tabs.css" rel="stylesheet" type="text/css">
> <link href="doxygen.css" rel="stylesheet" type="text/css">
> </head><body>
> <!-- Generated by Doxygen 1.5.8 -->
> <div class="navigation" id="top">
>  <div class="tabs">
>    <ul>
>      <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
>      <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
>      <li><a href="modules.html"><span>Modules</span></a></li>
>      <li><a href="annotated.html"><span>Data&nbsp;Structures</span></ 
> a></li>
>      <li class="current"><a href="files.html"><span>Files</span></ 
> a></li>
>    </ul>
>  </div>
>  <div class="tabs">
>    <ul>
>      <li><a href="files.html"><span>File&nbsp;List</span></a></li>
>      <li class="current"><a href="globals.html"><span>Globals</ 
> span></a></li>
>    </ul>
>  </div>
>  <div class="tabs">
>    <ul>
>      <li><a href="globals.html"><span>All</span></a></li>
>      <li><a href="globals_func.html"><span>Functions</span></a></li>
>      <li><a href="globals_enum.html"><span>Enumerations</span></a></ 
> li>
>      <li class="current"><a  
> href="globals_eval.html"><span>Enumerator</span></a></li>
>    </ul>
>  </div>
> </div>
> <div class="contents">
> &nbsp;
> <p>
> <ul>
> <li>AVRO_DECODE
> : <a class="el"  
> href 
> = 
> "group___handle___routines 
> .html 
> #ggcd8ee9ad4a4882eef8e3d9a0d5faec682802292d4fd32b8eb68872bcc03bd1dd 
> ">avro.h</a>
> <li>AVRO_ENCODE
> : <a class="el"  
> href 
> = 
> "group___handle___routines 
> .html 
> #ggcd8ee9ad4a4882eef8e3d9a0d5faec68037c26ec9dd8b98243aa9aed3f80160b 
> ">avro.h</a>
> <li>AVRO_FAILURE
> : <a class="el"  
> href 
> = 
> "group___handle___routines 
> .html 
> #gg4271ca78aabaaad628d7b632aa5a1499c0a18cacdcccfd794fc1c49b3e98c5bb 
> ">avro.h</a>
> <li>AVRO_OK
> : <a class="el"  
> href 
> = 
> "group___handle___routines 
> .html 
> #gg4271ca78aabaaad628d7b632aa5a1499c6fd26496969f7d61ece32e42612675f 
> ">avro.h</a>
> </ul>
> </div>
> <hr size="1"><address style="text-align: right;"><small>Generated on  
> Wed Jul 1 14:58:19 2009 for AVRO C API by&nbsp;
> <a href="http://www.doxygen.org/index.html">
> <img src="doxygen.png" alt="doxygen" align="middle" border="0"></a>  
> 1.5.8 </small></address>
> </body>
>
> = 
> ======================================================================
> ==./doc/api/c/html/globals_func.html
> = 
> ======================================================================
> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
> <html><head><meta http-equiv="Content-Type" content="text/ 
> html;charset=UTF-8">
> <title>AVRO C API: Data Fields</title>
> <link href="tabs.css" rel="stylesheet" type="text/css">
> <link href="doxygen.css" rel="stylesheet" type="text/css">
> </head><body>
> <!-- Generated by Doxygen 1.5.8 -->
> <div class="navigation" id="top">
>  <div class="tabs">
>    <ul>
>      <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
>      <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
>      <li><a href="modules.html"><span>Modules</span></a></li>
>      <li><a href="annotated.html"><span>Data&nbsp;Structures</span></ 
> a></li>
>      <li class="current"><a href="files.html"><span>Files</span></ 
> a></li>
>    </ul>
>  </div>
>  <div class="tabs">
>    <ul>
>      <li><a href="files.html"><span>File&nbsp;List</span></a></li>
>      <li class="current"><a href="globals.html"><span>Globals</ 
> span></a></li>
>    </ul>
>  </div>
>  <div class="tabs">
>    <ul>
>      <li><a href="globals.html"><span>All</span></a></li>
>      <li class="current"><a  
> href="globals_func.html"><span>Functions</span></a></li>
>      <li><a href="globals_enum.html"><span>Enumerations</span></a></ 
> li>
>      <li><a href="globals_eval.html"><span>Enumerator</span></a></li>
>    </ul>
>  </div>
> </div>
> <div class="contents">
> &nbsp;
> <p>
> <ul>
> <li>avro_array()
> : <a class="el"  
> href 
> ="group___compound.html#g52f0a4383812a3d19a00f461ddb1a27c">avro.h</a>
> <li>avro_bool()
> : <a class="el"  
> href 
> ="group___primitives.html#ga230ba9c2028579916da8e3ef7abbb07">avro.h</ 
> a>
> <li>avro_bytes()
> : <a class="el"  
> href 
> ="group___primitives.html#g883aa71b77043b51296ab278c2a84a23">avro.h</ 
> a>
> <li>avro_create_file()
> : <a class="el"  
> href 
> = 
> "group___handle___routines 
> .html#g072028012d958aec05067e1c1e04ee0e">avro.h</a>
> <li>avro_create_memory()
> : <a class="el"  
> href 
> = 
> "group___handle___routines 
> .html#ga8d57587e61e593b8878b80163977430">avro.h</a>
> <li>avro_create_socket()
> : <a class="el"  
> href 
> = 
> "group___handle___routines 
> .html#g2fb229d05fdcaad3da0f6a9899bd09be">avro.h</a>
> <li>avro_double()
> : <a class="el"  
> href 
> ="group___primitives.html#g16c546852402edffa666a3cd214d4f7c">avro.h</ 
> a>
>
> = 
> ======================================================================
> ==./doc/api/c/html/group___a_v_r_o.html
> = 
> ======================================================================
> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
> <html><head><meta http-equiv="Content-Type" content="text/ 
> html;charset=UTF-8">
> <title>AVRO C API: Avro C API</title>
> <link href="tabs.css" rel="stylesheet" type="text/css">
> <link href="doxygen.css" rel="stylesheet" type="text/css">
> </head><body>
> <!-- Generated by Doxygen 1.5.8 -->
> <div class="navigation" id="top">
>  <div class="tabs">
>    <ul>
>      <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
>      <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
>      <li><a href="modules.html"><span>Modules</span></a></li>
>      <li><a href="annotated.html"><span>Data&nbsp;Structures</span></ 
> a></li>
>      <li><a href="files.html"><span>Files</span></a></li>
>    </ul>
>  </div>
> </div>
> <div class="contents">
> <h1>Avro C API</h1><table border="0" cellpadding="0" cellspacing="0">
> <tr><td></td></tr>
> <tr><td colspan="2"><br><h2>Modules</h2></td></tr>
> <tr><td class="memItemLeft" nowrap align="right"  
> valign="top">&nbsp;</td><td class="memItemRight" valign="bottom"><a  
> class="el" href="group___handle___routines.html">AVRO Handles</a></ 
> td></tr>
>
> <tr><td class="memItemLeft" nowrap align="right"  
> valign="top">&nbsp;</td><td class="memItemRight" valign="bottom"><a  
> class="el" href="group___primitives.html">AVRO Primitive Type  
> Serialization</a></td></tr>
>
> <tr><td class="memItemLeft" nowrap align="right"  
> valign="top">&nbsp;</td><td class="memItemRight" valign="bottom"><a  
> class="el" href="group___compound.html">AVRO Compound Type  
> Serialization</a></td></tr>
>
> <tr><td colspan="2"><br><h2>Typedefs</h2></td></tr>
> <tr><td class="memItemLeft" nowrap align="right" valign="top"><a  
> class="anchor" name="ga7ab6d317ac114c2a8c6e963add2e078"></a><!--  
> doxytag: member="AVRO::avroproc_t"  
> ref="ga7ab6d317ac114c2a8c6e963add2e078" args=")(AVRO *, void *,...)"  
> -->
> typedef <a class="el"  
> href 
> = 
> "group___handle___routines 
> .html#g4271ca78aabaaad628d7b632aa5a1499">avro_status_t</a>(*&nbsp;</ 
> td><td class="memItemRight" valign="bottom"><b>avroproc_t</b> )(<a  
> class="el" href="struct_a_v_r_o.html">AVRO</a> *, void *,...)</td></ 
> tr>
>
> <tr><td class="memItemLeft" nowrap align="right" valign="top"><a  
> class="anchor" name="g812d16e5494522586b3784e55d479912"></a><!--  
> doxytag: member="AVRO::bool_t"  
> ref="g812d16e5494522586b3784e55d479912" args="" -->
> typedef int&nbsp;</td><td class="memItemRight"  
> valign="bottom"><b>bool_t</b></td></tr>
>
> <tr><td colspan="2"><br><h2>Functions</h2></td></tr>
> <tr><td class="memItemLeft" nowrap align="right" valign="top"><a  
> class="anchor" name="ge6f2feafe06746f9f48d3d1ee186d173"></a><!--  
> doxytag: member="AVRO::avro_dump_memory"  
> ref="ge6f2feafe06746f9f48d3d1ee186d173" args="(AVRO *avro, FILE  
> *fp)" -->
> void&nbsp;</td><td class="memItemRight"  
> valign="bottom"><b>avro_dump_memory</b> (<a class="el"  
> href="struct_a_v_r_o.html">AVRO</a> *avro, FILE *fp)</td></tr>
>
> <tr><td class="memItemLeft" nowrap align="right" valign="top"><a  
> class="anchor" name="ga164f39fde7378d15bcbf5ae68bde902"></a><!--  
> doxytag: member="AVRO::avro_getint32_raw"  
> ref="ga164f39fde7378d15bcbf5ae68bde902" args="(AVRO *avro, int32_t  
> *value)" -->
> <a class="el"  
> href 
> = 
> "group___handle___routines 
> .html#g4271ca78aabaaad628d7b632aa5a1499">avro_status_t</a>&nbsp;</ 
> td><td class="memItemRight" valign="bottom"><b>avro_getint32_raw</b>  
> (<a class="el" href="struct_a_v_r_o.html">AVRO</a> *avro, int32_t  
> *value)</td></tr>
>
> <tr><td class="memItemLeft" nowrap align="right" valign="top"><a  
> class="anchor" name="gf3117aff45720e3a226e5101b7067bc8"></a><!--  
> doxytag: member="AVRO::avro_putint32_raw"  
> ref="gf3117aff45720e3a226e5101b7067bc8" args="(AVRO *avro, const  
> int32_t value)" -->
> <a class="el"  
> href 
> = 
> "group___handle___routines 
> .html#g4271ca78aabaaad628d7b632aa5a1499">avro_status_t</a>&nbsp;</ 
> td><td class="memItemRight" valign="bottom"><b>avro_putint32_raw</b>  
> (<a class="el" href="struct_a_v_r_o.html">AVRO</a> *avro, const  
> int32_t value)</td></tr>
>
> <tr><td class="memItemLeft" nowrap align="right" valign="top"><a  
> class="anchor" name="g23be6d2c7a1e1adec170cd0a35c44b96"></a><!--  
> doxytag: member="AVRO::avro_getint64_raw"  
> ref="g23be6d2c7a1e1adec170cd0a35c44b96" args="(AVRO *avro, int64_t  
> *value)" -->
> <a class="el"  
> href 
> = 
> "group___handle___routines 
> .html#g4271ca78aabaaad628d7b632aa5a1499">avro_status_t</a>&nbsp;</ 
> td><td class="memItemRight" valign="bottom"><b>avro_getint64_raw</b>  
> (<a class="el" href="struct_a_v_r_o.html">AVRO</a> *avro, int64_t  
> *value)</td></tr>
>
> <tr><td class="memItemLeft" nowrap align="right" valign="top"><a  
> class="anchor" name="g233761be573e51ca3fa393ff6d7dea04"></a><!--  
> doxytag: member="AVRO::avro_putint64_raw"  
> ref="g233761be573e51ca3fa393ff6d7dea04" args="(AVRO *avro, const  
> int64_t value)" -->
> <a class="el"  
> href 
> = 
> "group___handle___routines 
> .html#g4271ca78aabaaad628d7b632aa5a1499">avro_status_t</a>&nbsp;</ 
> td><td class="memItemRight" valign="bottom"><b>avro_putint64_raw</b>  
> (<a class="el" href="struct_a_v_r_o.html">AVRO</a> *avro, const  
> int64_t value)</td></tr>
>
> = 
> ======================================================================
> ==./doc/api/c/html/group___compound.html
> = 
> ======================================================================
> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
> <html><head><meta http-equiv="Content-Type" content="text/ 
> html;charset=UTF-8">
> <title>AVRO C API: AVRO Compound Type Serialization</title>
> <link href="tabs.css" rel="stylesheet" type="text/css">
> <link href="doxygen.css" rel="stylesheet" type="text/css">
> </head><body>
> <!-- Generated by Doxygen 1.5.8 -->
> <div class="navigation" id="top">
>  <div class="tabs">
>    <ul>
>      <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
>      <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
>      <li><a href="modules.html"><span>Modules</span></a></li>
>      <li><a href="annotated.html"><span>Data&nbsp;Structures</span></ 
> a></li>
>      <li><a href="files.html"><span>Files</span></a></li>
>    </ul>
>  </div>
> </div>
> <div class="contents">
> <h1>AVRO Compound Type Serialization<br>
> <small>
> [<a class="el" href="group___a_v_r_o.html">Avro C API</a>]</small>
> </h1><table border="0" cellpadding="0" cellspacing="0">
> <tr><td></td></tr>
> <tr><td colspan="2"><br><h2>Functions</h2></td></tr>
> <tr><td class="memItemLeft" nowrap align="right" valign="top"><a  
> class="el"  
> href 
> = 
> "group___handle___routines 
> .html#g4271ca78aabaaad628d7b632aa5a1499">avro_status_t</a>&nbsp;</ 
> td><td class="memItemRight" valign="bottom"><a class="el"  
> href 
> = 
> "group___compound 
> .html#g52f0a4383812a3d19a00f461ddb1a27c">avro_array</a> (<a  
> class="el" href="struct_a_v_r_o.html">AVRO</a> *avro, caddr_t  
> *addrp, uint32_t *sizep, uint32_t maxsize, uint32_t elsize,  
> avroproc_t elproc)</td></tr>
>
> </table>
> <hr><h2>Function Documentation</h2>
> <a class="anchor" name="g52f0a4383812a3d19a00f461ddb1a27c"></a><!--  
> doxytag: member="avro.h::avro_array"  
> ref="g52f0a4383812a3d19a00f461ddb1a27c" args="(AVRO *avro, caddr_t  
> *addrp, uint32_t *sizep, uint32_t maxsize, uint32_t elsize,  
> avroproc_t elproc)" -->
> <div class="memitem">
> <div class="memproto">
>      <table class="memname">
>        <tr>
>          <td class="memname"><a class="el"  
> href 
> = 
> "group___handle___routines 
> .html#g4271ca78aabaaad628d7b632aa5a1499">avro_status_t</a>  
> avro_array           </td>
>          <td>(</td>
>          <td class="paramtype"><a class="el"  
> href="struct_a_v_r_o.html">AVRO</a> *&nbsp;</td>
>          <td class="paramname"> <em>avro</em>, </td>
>        </tr>
>        <tr>
>          <td class="paramkey"></td>
>          <td></td>
>          <td class="paramtype">caddr_t *&nbsp;</td>
>          <td class="paramname"> <em>addrp</em>, </td>
>        </tr>
>        <tr>
>          <td class="paramkey"></td>
>          <td></td>
>          <td class="paramtype">uint32_t *&nbsp;</td>
>          <td class="paramname"> <em>sizep</em>, </td>
>
> = 
> ======================================================================
> ==./doc/api/c/html/group___handle___routines.html
> = 
> ======================================================================
> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
> <html><head><meta http-equiv="Content-Type" content="text/ 
> html;charset=UTF-8">
> <title>AVRO C API: AVRO Handles</title>
> <link href="tabs.css" rel="stylesheet" type="text/css">
> <link href="doxygen.css" rel="stylesheet" type="text/css">
> </head><body>
> <!-- Generated by Doxygen 1.5.8 -->
> <div class="navigation" id="top">
>  <div class="tabs">
>    <ul>
>      <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
>      <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
>      <li><a href="modules.html"><span>Modules</span></a></li>
>      <li><a href="annotated.html"><span>Data&nbsp;Structures</span></ 
> a></li>
>      <li><a href="files.html"><span>Files</span></a></li>
>    </ul>
>  </div>
> </div>
> <div class="contents">
> <h1>AVRO Handles<br>
> <small>
> [<a class="el" href="group___a_v_r_o.html">Avro C API</a>]</small>
> </h1><table border="0" cellpadding="0" cellspacing="0">
> <tr><td></td></tr>
> <tr><td colspan="2"><br><h2>Data Structures</h2></td></tr>
> <tr><td class="memItemLeft" nowrap align="right" valign="top">struct  
> &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el"  
> href="struct_a_v_r_o.html">AVRO</a></td></tr>
>
> <tr><td colspan="2"><br><h2>Defines</h2></td></tr>
> <tr><td class="memItemLeft" nowrap align="right" valign="top"><a  
> class="anchor" name="gec7f77fb08d34504a65e49f23673e2f2"></a><!--  
> doxytag: member="Handle_Routines::CHECK_ERROR"  
> ref="gec7f77fb08d34504a65e49f23673e2f2" args="(__status)" -->
> #define&nbsp;</td><td class="memItemRight"  
> valign="bottom"><b>CHECK_ERROR</ 
> b>(__status)&nbsp;&nbsp;&nbsp;if(__status != AVRO_OK){ return  
> __status; }</td></tr>
>
> <tr><td class="memItemLeft" nowrap align="right" valign="top"><a  
> class="anchor" name="ga11bb99285d5512c5739aacb0b9352ca"></a><!--  
> doxytag: member="Handle_Routines::AVRO_GETBYTES"  
> ref="ga11bb99285d5512c5739aacb0b9352ca" args="(avro, addr, len)" -->
> #define&nbsp;</td><td class="memItemRight"  
> valign="bottom"><b>AVRO_GETBYTES</b>(avro, addr,  
> len)&nbsp;&nbsp;&nbsp;(*(avro)-&gt;a_ops-&gt;a_getbytes)(avro, addr,  
> len)</td></tr>
>
> <tr><td class="memItemLeft" nowrap align="right" valign="top"><a  
> class="anchor" name="gec949ab6bc010632000ad15f9adad118"></a><!--  
> doxytag: member="Handle_Routines::AVRO_PUTBYTES"  
> ref="gec949ab6bc010632000ad15f9adad118" args="(avro, addr, len)" -->
> #define&nbsp;</td><td class="memItemRight"  
> valign="bottom"><b>AVRO_PUTBYTES</b>(avro, addr,  
> len)&nbsp;&nbsp;&nbsp;(*(avro)-&gt;a_ops-&gt;a_putbytes)(avro, addr,  
> len)</td></tr>
>
> <tr><td colspan="2"><br><h2>Typedefs</h2></td></tr>
> <tr><td class="memItemLeft" nowrap align="right" valign="top"><a  
> class="anchor" name="g845b3c301ea3d376db7167e40b8cc77e"></a><!--  
> doxytag: member="Handle_Routines::avro_op"  
> ref="g845b3c301ea3d376db7167e40b8cc77e" args="" -->
> typedef enum <a class="el"  
> href 
> = 
> "group___handle___routines 
> .html#gcd8ee9ad4a4882eef8e3d9a0d5faec68">avro_op</a>&nbsp;</td><td  
> class="memItemRight" valign="bottom"><b>avro_op</b></td></tr>
>
> <tr><td class="memItemLeft" nowrap align="right" valign="top"><a  
> class="anchor" name="g0c34cda845744621fb4e6bb24b82c416"></a><!--  
> doxytag: member="Handle_Routines::avro_status_t"  
> ref="g0c34cda845744621fb4e6bb24b82c416" args="" -->
> typedef enum <a class="el"  
> href 
> = 
> "group___handle___routines 
> .html#g4271ca78aabaaad628d7b632aa5a1499">avro_status_t</a>&nbsp;</ 
> td><td class="memItemRight" valign="bottom"><b>avro_status_t</b></ 
> td></tr>
>
> <tr><td class="memItemLeft" nowrap align="right" valign="top"><a  
> class="anchor" name="g6e3ec80aeb6c2317c76d6fb2a919b665"></a><!--  
> doxytag: member="Handle_Routines::AVRO"  
> ref="g6e3ec80aeb6c2317c76d6fb2a919b665" args="" -->
> typedef struct <a class="el" href="struct_a_v_r_o.html">AVRO</ 
> a>&nbsp;</td><td class="memItemRight" valign="bottom"><b>AVRO</b></ 
> td></tr>
>
> <tr><td colspan="2"><br><h2>Enumerations</h2></td></tr>
> <tr><td class="memItemLeft" nowrap align="right" valign="top">enum  
> &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el"  
> href 
> = 
> "group___handle___routines 
> .html#gcd8ee9ad4a4882eef8e3d9a0d5faec68">avro_op</a> { <a class="el"  
> href 
> = 
> "group___handle___routines 
> .html 
> #ggcd8ee9ad4a4882eef8e3d9a0d5faec68037c26ec9dd8b98243aa9aed3f80160b 
> ">AVRO_ENCODE</a> =  0,
> <a class="el"  
> href 
> = 
> "group___handle___routines 
> .html 
> #ggcd8ee9ad4a4882eef8e3d9a0d5faec682802292d4fd32b8eb68872bcc03bd1dd 
> ">AVRO_DECODE</a> =  1
>
> = 
> ======================================================================
> ==./doc/api/c/html/group___primitives.html
> = 
> ======================================================================
> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
> <html><head><meta http-equiv="Content-Type" content="text/ 
> html;charset=UTF-8">
> <title>AVRO C API: AVRO Primitive Type Serialization</title>
> <link href="tabs.css" rel="stylesheet" type="text/css">
> <link href="doxygen.css" rel="stylesheet" type="text/css">
> </head><body>
> <!-- Generated by Doxygen 1.5.8 -->
> <div class="navigation" id="top">
>  <div class="tabs">
>    <ul>
>      <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
>      <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
>      <li><a href="modules.html"><span>Modules</span></a></li>
>      <li><a href="annotated.html"><span>Data&nbsp;Structures</span></ 
> a></li>
>      <li><a href="files.html"><span>Files</span></a></li>
>    </ul>
>  </div>
> </div>
> <div class="contents">
> <h1>AVRO Primitive Type Serialization<br>
> <small>
> [<a class="el" href="group___a_v_r_o.html">Avro C API</a>]</small>
> </h1><table border="0" cellpadding="0" cellspacing="0">
> <tr><td></td></tr>
> <tr><td colspan="2"><br><h2>Functions</h2></td></tr>
> <tr><td class="memItemLeft" nowrap align="right" valign="top"><a  
> class="el"  
> href 
> = 
> "group___handle___routines 
> .html#g4271ca78aabaaad628d7b632aa5a1499">avro_status_t</a>&nbsp;</ 
> td><td class="memItemRight" valign="bottom"><a class="el"  
> href 
> = 
> "group___primitives 
> .html#gad3a89fbddd4853036ed861dba1ee2c1">avro_null</a> (void)</td></ 
> tr>
>
> <tr><td class="memItemLeft" nowrap align="right" valign="top"><a  
> class="el"  
> href 
> = 
> "group___handle___routines 
> .html#g4271ca78aabaaad628d7b632aa5a1499">avro_status_t</a>&nbsp;</ 
> td><td class="memItemRight" valign="bottom"><a class="el"  
> href 
> = 
> "group___primitives 
> .html#gef604d6a5f83d9769b4c5d47e8b505f2">avro_int64</a> (<a  
> class="el" href="struct_a_v_r_o.html">AVRO</a> *avro, int64_t *lp)</ 
> td></tr>
>
> <tr><td class="memItemLeft" nowrap align="right" valign="top"><a  
> class="el"  
> href 
> = 
> "group___handle___routines 
> .html#g4271ca78aabaaad628d7b632aa5a1499">avro_status_t</a>&nbsp;</ 
> td><td class="memItemRight" valign="bottom"><a class="el"  
> href 
> = 
> "group___primitives 
> .html#g4d568c22cdd854ea5a9c85ed622f7d91">avro_string</a> (<a  
> class="el" href="struct_a_v_r_o.html">AVRO</a> *avro, char **str,  
> int64_t maxlen)</td></tr>
>
> <tr><td class="memItemLeft" nowrap align="right" valign="top"><a  
> class="el"  
> href 
> = 
> "group___handle___routines 
> .html#g4271ca78aabaaad628d7b632aa5a1499">avro_status_t</a>&nbsp;</ 
> td><td class="memItemRight" valign="bottom"><a class="el"  
> href 
> = 
> "group___primitives 
> .html#g883aa71b77043b51296ab278c2a84a23">avro_bytes</a> (<a  
> class="el" href="struct_a_v_r_o.html">AVRO</a> *avro, char **bytes,  
> int64_t *len, int64_t maxlen)</td></tr>
>
> <tr><td class="memItemLeft" nowrap align="right" valign="top"><a  
> class="el"  
> href 
> = 
> "group___handle___routines 
> .html#g4271ca78aabaaad628d7b632aa5a1499">avro_status_t</a>&nbsp;</ 
> td><td class="memItemRight" valign="bottom"><a class="el"  
> href 
> = 
> "group___primitives 
> .html#ga230ba9c2028579916da8e3ef7abbb07">avro_bool</a> (<a  
> class="el" href="struct_a_v_r_o.html">AVRO</a> *avro, bool_t *bp)</ 
> td></tr>
>
> <tr><td class="memItemLeft" nowrap align="right" valign="top"><a  
> class="el"  
> href 
> = 
> "group___handle___routines 
> .html#g4271ca78aabaaad628d7b632aa5a1499">avro_status_t</a>&nbsp;</ 
> td><td class="memItemRight" valign="bottom"><a class="el"  
> href 
> = 
> "group___primitives 
> .html#ge1346e273aa3d82cc324992f081c6a49">avro_float</a> (<a  
> class="el" href="struct_a_v_r_o.html">AVRO</a> *avro, float *fp)</ 
> td></tr>
>
> <tr><td class="memItemLeft" nowrap align="right" valign="top"><a  
> class="el"  
> href 
> = 
> "group___handle___routines 
> .html#g4271ca78aabaaad628d7b632aa5a1499">avro_status_t</a>&nbsp;</ 
> td><td class="memItemRight" valign="bottom"><a class="el"  
> href 
> = 
> "group___primitives 
> .html#g16c546852402edffa666a3cd214d4f7c">avro_double</a> (<a  
> class="el" href="struct_a_v_r_o.html">AVRO</a> *avro, double *dp)</ 
> td></tr>
>
> </table>
> <hr><h2>Function Documentation</h2>
> <a class="anchor" name="ga230ba9c2028579916da8e3ef7abbb07"></a><!--  
> doxytag: member="avro.h::avro_bool"  
> ref="ga230ba9c2028579916da8e3ef7abbb07" args="(AVRO *avro, bool_t  
> *bp)" -->
> <div class="memitem">
> <div class="memproto">
>      <table class="memname">
>        <tr>
>          <td class="memname"><a class="el"  
> href 
> = 
> "group___handle___routines 
> .html#g4271ca78aabaaad628d7b632aa5a1499">avro_status_t</a>  
> avro_bool           </td>
>          <td>(</td>
>          <td class="paramtype"><a class="el"  
> href="struct_a_v_r_o.html">AVRO</a> *&nbsp;</td>
>          <td class="paramname"> <em>avro</em>, </td>
>
> = 
> ======================================================================
> ==./doc/api/c/html/index.html
> = 
> ======================================================================
> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
> <html><head><meta http-equiv="Content-Type" content="text/ 
> html;charset=UTF-8">
> <title>AVRO C API: Main Page</title>
> <link href="tabs.css" rel="stylesheet" type="text/css">
> <link href="doxygen.css" rel="stylesheet" type="text/css">
> </head><body>
> <!-- Generated by Doxygen 1.5.8 -->
> <div class="navigation" id="top">
>  <div class="tabs">
>    <ul>
>      <li class="current"><a href="index.html"><span>Main&nbsp;Page</ 
> span></a></li>
>      <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
>      <li><a href="modules.html"><span>Modules</span></a></li>
>      <li><a href="annotated.html"><span>Data&nbsp;Structures</span></ 
> a></li>
>      <li><a href="files.html"><span>Files</span></a></li>
>    </ul>
>  </div>
> </div>
> <div class="contents">
> <h1>AVRO C API Documentation</h1>
> <p>
> </div>
> <hr size="1"><address style="text-align: right;"><small>Generated on  
> Wed Jul 1 14:58:18 2009 for AVRO C API by&nbsp;
> <a href="http://www.doxygen.org/index.html">
> <img src="doxygen.png" alt="doxygen" align="middle" border="0"></a>  
> 1.5.8 </small></address>
> </body>
> </html>
>
> = 
> ======================================================================
> ==./doc/api/c/html/json_8h-source.html
> = 
> ======================================================================
> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
> <html><head><meta http-equiv="Content-Type" content="text/ 
> html;charset=UTF-8">
> <title>AVRO C API: json.h Source File</title>
> <link href="tabs.css" rel="stylesheet" type="text/css">
> <link href="doxygen.css" rel="stylesheet" type="text/css">
> </head><body>
> <!-- Generated by Doxygen 1.5.8 -->
> <div class="navigation" id="top">
>  <div class="tabs">
>    <ul>
>      <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
>      <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
>      <li><a href="modules.html"><span>Modules</span></a></li>
>      <li><a href="annotated.html"><span>Data&nbsp;Structures</span></ 
> a></li>
>      <li class="current"><a href="files.html"><span>Files</span></ 
> a></li>
>    </ul>
>  </div>
>  <div class="tabs">
>    <ul>
>      <li><a href="files.html"><span>File&nbsp;List</span></a></li>
>      <li><a href="globals.html"><span>Globals</span></a></li>
>    </ul>
>  </div>
> <h1>json.h</h1><div class="fragment"><pre class="fragment"><a  
> name="l00001"></a>00001 <span class="preprocessor">#ifndef JSON_H</ 
> span>
> <a name="l00002"></a>00002 <span class="preprocessor"></span><span  
> class="preprocessor">#define JSON_H</span>
> <a name="l00003"></a>00003 <span class="preprocessor"></span>
> <a name="l00004"></a>00004 <span class="preprocessor">#include  
> &lt;apr.h&gt;</span>
> <a name="l00005"></a>00005 <span class="preprocessor">#include  
> &lt;apr_pools.h&gt;</span>
> <a name="l00006"></a>00006 <span class="preprocessor">#include  
> &lt;apr_tables.h&gt;</span>
> <a name="l00007"></a>00007 <span class="preprocessor">#include  
> &lt;apr_hash.h&gt;</span>
> <a name="l00008"></a>00008
> <a name="l00009"></a>00009 <span class="keyword">enum</span> JSON_type
> <a name="l00010"></a>00010 {
> <a name="l00011"></a>00011   JSON_UNKNOWN,
> <a name="l00012"></a>00012   JSON_OBJECT,
> <a name="l00013"></a>00013   JSON_ARRAY,
> <a name="l00014"></a>00014   JSON_STRING,
> <a name="l00015"></a>00015   JSON_NUMBER,
> <a name="l00016"></a>00016   JSON_BOOLEAN,
> <a name="l00017"></a>00017   JSON_NULL
> <a name="l00018"></a>00018 };
> <a name="l00019"></a>00019 <span class="keyword">typedef</span>  
> <span class="keyword">enum</span> JSON_type JSON_type;
> <a name="l00020"></a>00020
> <a name="l00021"></a>00021 <span class="keyword">struct </ 
> span>JSON_value
> <a name="l00022"></a>00022 {
> <a name="l00023"></a>00023   JSON_type type;
> <a name="l00024"></a>00024   <span class="keyword">union</span>
> <a name="l00025"></a>00025   {
> <a name="l00026"></a>00026     apr_hash_t *object;
> <a name="l00027"></a>00027     apr_array_header_t *array;
>
> = 
> ======================================================================
> ==./doc/api/c/html/json__schema_8h-source.html
> = 
> ======================================================================
> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
> <html><head><meta http-equiv="Content-Type" content="text/ 
> html;charset=UTF-8">
> <title>AVRO C API: json_schema.h Source File</title>
> <link href="tabs.css" rel="stylesheet" type="text/css">
> <link href="doxygen.css" rel="stylesheet" type="text/css">
> </head><body>
> <!-- Generated by Doxygen 1.5.8 -->
> <div class="navigation" id="top">
>  <div class="tabs">
>    <ul>
>      <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
>      <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
>      <li><a href="modules.html"><span>Modules</span></a></li>
>      <li><a href="annotated.html"><span>Data&nbsp;Structures</span></ 
> a></li>
>      <li class="current"><a href="files.html"><span>Files</span></ 
> a></li>
>    </ul>
>  </div>
>  <div class="tabs">
>    <ul>
>      <li><a href="files.html"><span>File&nbsp;List</span></a></li>
>      <li><a href="globals.html"><span>Globals</span></a></li>
>    </ul>
>  </div>
> <h1>json_schema.h</h1><div class="fragment"><pre class="fragment"><a  
> name="l00001"></a>00001 <span class="preprocessor">#define  
> TK_STRING                          1</span>
> <a name="l00002"></a>00002 <span class="preprocessor"></span><span  
> class="preprocessor">#define TK_NUMBER                          2</ 
> span>
> <a name="l00003"></a>00003 <span class="preprocessor"></span><span  
> class="preprocessor">#define TK_TRUE                            3</ 
> span>
> <a name="l00004"></a>00004 <span class="preprocessor"></span><span  
> class="preprocessor">#define TK_FALSE                           4</ 
> span>
> <a name="l00005"></a>00005 <span class="preprocessor"></span><span  
> class="preprocessor">#define TK_NULL                            5</ 
> span>
> <a name="l00006"></a>00006 <span class="preprocessor"></span><span  
> class="preprocessor">#define TK_COMMA                           6</ 
> span>
> <a name="l00007"></a>00007 <span class="preprocessor"></span><span  
> class="preprocessor">#define TK_LBRACKET                        7</ 
> span>
> <a name="l00008"></a>00008 <span class="preprocessor"></span><span  
> class="preprocessor">#define TK_RBRACKET                        8</ 
> span>
> <a name="l00009"></a>00009 <span class="preprocessor"></span><span  
> class="preprocessor">#define TK_COLON                           9</ 
> span>
> <a name="l00010"></a>00010 <span class="preprocessor"></span><span  
> class="preprocessor">#define TK_LCURLY                         10</ 
> span>
> <a name="l00011"></a>00011 <span class="preprocessor"></span><span  
> class="preprocessor">#define TK_RCURLY                         11</ 
> span>
> </pre></div></div>
> <hr size="1"><address style="text-align: right;"><small>Generated on  
> Wed Jul 1 14:58:18 2009 for AVRO C API by&nbsp;
> <a href="http://www.doxygen.org/index.html">
> <img src="doxygen.png" alt="doxygen" align="middle" border="0"></a>  
> 1.5.8 </small></address>
> </body>
> </html>
>
> = 
> ======================================================================
> ==./doc/api/c/html/json__tokenizer_8h-source.html
> = 
> ======================================================================
> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
> <html><head><meta http-equiv="Content-Type" content="text/ 
> html;charset=UTF-8">
> <title>AVRO C API: json_tokenizer.h Source File</title>
> <link href="tabs.css" rel="stylesheet" type="text/css">
> <link href="doxygen.css" rel="stylesheet" type="text/css">
> </head><body>
> <!-- Generated by Doxygen 1.5.8 -->
> <div class="navigation" id="top">
>  <div class="tabs">
>    <ul>
>      <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
>      <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
>      <li><a href="modules.html"><span>Modules</span></a></li>
>      <li><a href="annotated.html"><span>Data&nbsp;Structures</span></ 
> a></li>
>      <li class="current"><a href="files.html"><span>Files</span></ 
> a></li>
>    </ul>
>  </div>
>  <div class="tabs">
>    <ul>
>      <li><a href="files.html"><span>File&nbsp;List</span></a></li>
>      <li><a href="globals.html"><span>Globals</span></a></li>
>    </ul>
>  </div>
> <h1>json_tokenizer.h</h1><div class="fragment"><pre  
> class="fragment"><a name="l00001"></a>00001 <span  
> class="preprocessor">#ifndef JSON_TOKENIZER_H</span>
> <a name="l00002"></a>00002 <span class="preprocessor"></span><span  
> class="preprocessor">#define JSON_TOKENIZER_H</span>
> <a name="l00003"></a>00003 <span class="preprocessor"></span>
> <a name="l00004"></a>00004 <span class="preprocessor">#include  
> "json_schema.h"</span>
> <a name="l00005"></a>00005
> <a name="l00006"></a>00006 <span class="comment">/* Tokens which are  
> not part of the schema */</span>
> <a name="l00007"></a>00007 <span class="keyword">enum</span>  
> json_tokens
> <a name="l00008"></a>00008 {
> <a name="l00009"></a>00009   TK_SPACE = 42424242
> <a name="l00010"></a>00010 };
> <a name="l00011"></a>00011
> <a name="l00012"></a>00012 <span class="keyword">struct </span>Token
> <a name="l00013"></a>00013 {
> <a name="l00014"></a>00014   <span class="keywordtype">char</span> *z;
> <a name="l00015"></a>00015   <span class="keywordtype">double</span>  
> d;
> <a name="l00016"></a>00016   <span class="keywordtype">int</span> b;
> <a name="l00017"></a>00017 };
> <a name="l00018"></a>00018 <span class="keyword">typedef</span>  
> <span class="keyword">struct </span>Token Token;
> <a name="l00019"></a>00019
> <a name="l00020"></a>00020 <span class="keywordtype">int</span>  
> json_get_token (<span class="keyword">const</span> <span  
> class="keywordtype">char</span> *z, <span class="keyword">const</ 
> span> <span class="keywordtype">unsigned</span> len, <span  
> class="keywordtype">int</span> *tokenType,
> <a name="l00021"></a>00021                     <span  
> class="keywordtype">double</span> *number);
> <a name="l00022"></a>00022
> <a name="l00023"></a>00023 <span class="preprocessor">#endif</span>
> </pre></div></div>
> <hr size="1"><address style="text-align: right;"><small>Generated on  
> Wed Jul 1 14:58:18 2009 for AVRO C API by&nbsp;
> <a href="http://www.doxygen.org/index.html">
> <img src="doxygen.png" alt="doxygen" align="middle" border="0"></a>  
> 1.5.8 </small></address>
>
> = 
> ======================================================================
> ==./doc/api/c/html/modules.html
> = 
> ======================================================================
> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
> <html><head><meta http-equiv="Content-Type" content="text/ 
> html;charset=UTF-8">
> <title>AVRO C API: Module Index</title>
> <link href="tabs.css" rel="stylesheet" type="text/css">
> <link href="doxygen.css" rel="stylesheet" type="text/css">
> </head><body>
> <!-- Generated by Doxygen 1.5.8 -->
> <div class="navigation" id="top">
>  <div class="tabs">
>    <ul>
>      <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
>      <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
>      <li class="current"><a href="modules.html"><span>Modules</ 
> span></a></li>
>      <li><a href="annotated.html"><span>Data&nbsp;Structures</span></ 
> a></li>
>      <li><a href="files.html"><span>Files</span></a></li>
>    </ul>
>  </div>
> </div>
> <div class="contents">
> <h1>Modules</h1>Here is a list of all modules:<ul>
> <li><a class="el" href="group___a_v_r_o.html">Avro C API</a>
> <ul>
> <li><a class="el" href="group___handle___routines.html">AVRO  
> Handles</a>
> <li><a class="el" href="group___primitives.html">AVRO Primitive Type  
> Serialization</a>
> <li><a class="el" href="group___compound.html">AVRO Compound Type  
> Serialization</a>
> </ul>
> </ul>
> </div>
> <hr size="1"><address style="text-align: right;"><small>Generated on  
> Wed Jul 1 14:58:19 2009 for AVRO C API by&nbsp;
> <a href="http://www.doxygen.org/index.html">
> <img src="doxygen.png" alt="doxygen" align="middle" border="0"></a>  
> 1.5.8 </small></address>
> </body>
> </html>
>
> = 
> ======================================================================
> ==./doc/api/c/html/pages.html
> = 
> ======================================================================
> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
> <html><head><meta http-equiv="Content-Type" content="text/ 
> html;charset=UTF-8">
> <title>AVRO C API: Page Index</title>
> <link href="tabs.css" rel="stylesheet" type="text/css">
> <link href="doxygen.css" rel="stylesheet" type="text/css">
> </head><body>
> <!-- Generated by Doxygen 1.5.8 -->
> <div class="navigation" id="top">
>  <div class="tabs">
>    <ul>
>      <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
>      <li class="current"><a  
> href="pages.html"><span>Related&nbsp;Pages</span></a></li>
>      <li><a href="modules.html"><span>Modules</span></a></li>
>      <li><a href="annotated.html"><span>Data&nbsp;Structures</span></ 
> a></li>
>      <li><a href="files.html"><span>Files</span></a></li>
>    </ul>
>  </div>
> </div>
> <div class="contents">
> <h1>Related Pages</h1>Here is a list of all related documentation  
> pages:<ul>
> <li><a class="el" href="todo.html">Todo List</a>
>
> </ul>
> </div>
> <hr size="1"><address style="text-align: right;"><small>Generated on  
> Wed Jul 1 14:58:18 2009 for AVRO C API by&nbsp;
> <a href="http://www.doxygen.org/index.html">
> <img src="doxygen.png" alt="doxygen" align="middle" border="0"></a>  
> 1.5.8 </small></address>
> </body>
> </html>
>
> = 
> ======================================================================
> ==./doc/api/c/html/struct_a_v_r_o.html
> = 
> ======================================================================
> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
> <html><head><meta http-equiv="Content-Type" content="text/ 
> html;charset=UTF-8">
> <title>AVRO C API: AVRO Struct Reference</title>
> <link href="tabs.css" rel="stylesheet" type="text/css">
> <link href="doxygen.css" rel="stylesheet" type="text/css">
> </head><body>
> <!-- Generated by Doxygen 1.5.8 -->
> <div class="navigation" id="top">
>  <div class="tabs">
>    <ul>
>      <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
>      <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
>      <li><a href="modules.html"><span>Modules</span></a></li>
>      <li class="current"><a  
> href="annotated.html"><span>Data&nbsp;Structures</span></a></li>
>      <li><a href="files.html"><span>Files</span></a></li>
>    </ul>
>  </div>
>  <div class="tabs">
>    <ul>
>      <li><a href="annotated.html"><span>Data&nbsp;Structures</span></ 
> a></li>
>      <li><a href="functions.html"><span>Data&nbsp;Fields</span></a></ 
> li>
>    </ul>
>  </div>
> </div>
> <div class="contents">
> <h1>AVRO Struct Reference<br>
> <small>
> [<a class="el" href="group___handle___routines.html">AVRO Handles</ 
> a>]</small>
> </h1><!-- doxytag: class="AVRO" --><code>#include &lt;<a class="el"  
> href="avro_8h-source.html">avro.h</a>&gt;</code>
> <p>
> <table border="0" cellpadding="0" cellspacing="0">
> <tr><td></td></tr>
> <tr><td colspan="2"><br><h2>Data Structures</h2></td></tr>
> <tr><td class="memItemLeft" nowrap align="right" valign="top">struct  
> &nbsp;</td><td class="memItemRight" valign="bottom"><b>avro_ops</b></ 
> td></tr>
>
> <tr><td colspan="2"><br><h2>Data Fields</h2></td></tr>
> <tr><td class="memItemLeft" nowrap align="right" valign="top">enum  
> <a class="el"  
> href 
> = 
> "group___handle___routines 
> .html#gcd8ee9ad4a4882eef8e3d9a0d5faec68">avro_op</a>&nbsp;</td><td  
> class="memItemRight" valign="bottom"><a class="el"  
> href="struct_a_v_r_o.html#7291c82adfe53e2d895824663e028e8e">a_op</ 
> a></td></tr>
>
> <tr><td class="memItemLeft" nowrap align="right" valign="top"><a  
> class="anchor" name="8eb2c9c88718b2c7976429af135348e9"></a><!--  
> doxytag: member="AVRO::a_ops" ref="8eb2c9c88718b2c7976429af135348e9"  
> args="" -->
> struct AVRO::avro_ops *&nbsp;</td><td class="memItemRight"  
> valign="bottom"><b>a_ops</b></td></tr>
>
> <tr><td class="memItemLeft" nowrap align="right"  
> valign="top">apr_pool_t *&nbsp;</td><td class="memItemRight"  
> valign="bottom"><a class="el"  
> href="struct_a_v_r_o.html#b4cc960de06bd42633124a8a62852928">pool</ 
> a></td></tr>
>
> <tr><td class="memItemLeft" nowrap align="right"  
> valign="top">unsigned char *&nbsp;</td><td class="memItemRight"  
> valign="bottom"><a class="el"  
> href="struct_a_v_r_o.html#e6ff7776029faa4c4d7053f0cb7b71e5">schema</ 
> a></td></tr>
>
> <tr><td class="memItemLeft" nowrap align="right"  
> valign="top">apr_file_t *&nbsp;</td><td class="memItemRight"  
> valign="bottom"><a class="el"  
> href="struct_a_v_r_o.html#adc436b34c7426022b819cdc2d6ced6e">file</ 
> a></td></tr>
>
> <tr><td class="memItemLeft" nowrap align="right"  
> valign="top">apr_socket_t *&nbsp;</td><td class="memItemRight"  
> valign="bottom"><a class="el"  
> href="struct_a_v_r_o.html#33d50daaa50ad7ec3c4e22d4f1eb6143">socket</ 
> a></td></tr>
>
> <tr><td class="memItemLeft" nowrap align="right"  
> valign="top">caddr_t&nbsp;</td><td class="memItemRight"  
> valign="bottom"><a class="el"  
> href="struct_a_v_r_o.html#b1c64881a5280cceb600f316fbb07952">addr</ 
> a></td></tr>
>
> = 
> ======================================================================
> ==./doc/api/c/html/tabs.css
> = 
> ======================================================================
> /* tabs styles, based on http://www.alistapart.com/articles/slidingdoors 
>  */
>
> DIV.tabs
> {
>   float            : left;
>   width            : 100%;
>   background       : url("tab_b.gif") repeat-x bottom;
>   margin-bottom    : 4px;
> }
>
> DIV.tabs UL
> {
>   margin           : 0px;
>   padding-left     : 10px;
>   list-style       : none;
> }
>
> DIV.tabs LI, DIV.tabs FORM
> {
>   display          : inline;
>   margin           : 0px;
>   padding          : 0px;
> }
>
> DIV.tabs FORM
> {
>   float            : right;
> }
>
> DIV.tabs A
> {
>   float            : left;
>   background       : url("tab_r.gif") no-repeat right top;
>   border-bottom    : 1px solid #84B0C7;
>   font-size        : 80%;
>   font-weight      : bold;
>   text-decoration  : none;
> }
>
> DIV.tabs A:hover
> {
>   background-position: 100% -150px;
> }
>
> DIV.tabs A:link, DIV.tabs A:visited,
> DIV.tabs A:active, DIV.tabs A:hover
> {
>       color: #1A419D;
> }
>
>
> = 
> ======================================================================
> ==./doc/api/c/html/todo.html
> = 
> ======================================================================
> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
> <html><head><meta http-equiv="Content-Type" content="text/ 
> html;charset=UTF-8">
> <title>AVRO C API: Todo List</title>
> <link href="tabs.css" rel="stylesheet" type="text/css">
> <link href="doxygen.css" rel="stylesheet" type="text/css">
> </head><body>
> <!-- Generated by Doxygen 1.5.8 -->
> <div class="navigation" id="top">
>  <div class="tabs">
>    <ul>
>      <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
>      <li class="current"><a  
> href="pages.html"><span>Related&nbsp;Pages</span></a></li>
>      <li><a href="modules.html"><span>Modules</span></a></li>
>      <li><a href="annotated.html"><span>Data&nbsp;Structures</span></ 
> a></li>
>      <li><a href="files.html"><span>Files</span></a></li>
>    </ul>
>  </div>
> </div>
> <div class="contents">
> <h1><a class="anchor" name="todo">Todo List </a></h1><a  
> class="anchor" name="_todo000001"></a> <dl>
> <dt>Global <a class="el"  
> href 
> = 
> "group___handle___routines 
> .html#g4271ca78aabaaad628d7b632aa5a1499">avro_status_t</a>  </dt>
> <dd>expand the number of states </dd>
> </dl>
> </div>
> <hr size="1"><address style="text-align: right;"><small>Generated on  
> Wed Jul 1 14:58:18 2009 for AVRO C API by&nbsp;
> <a href="http://www.doxygen.org/index.html">
> <img src="doxygen.png" alt="doxygen" align="middle" border="0"></a>  
> 1.5.8 </small></address>
> </body>
> </html>
>
> = 
> ======================================================================
> ==./doc/api/c/latex/Makefile
> = 
> ======================================================================
> all: clean refman.pdf
>
> pdf: refman.pdf
>
> refman.pdf: refman.tex
> 	pdflatex refman.tex
> 	makeindex refman.idx
> 	pdflatex refman.tex
> 	latex_count=5 ; \
> 	while egrep -s 'Rerun (LaTeX|to get cross-references right)'  
> refman.log && [ $$latex_count -gt 0 ] ;\
> 	    do \
> 	      echo "Rerunning latex...." ;\
> 	      pdflatex refman.tex ;\
> 	      latex_count=`expr $$latex_count - 1` ;\
> 	    done
>
>
> clean:
> 	rm -f *.ps *.dvi *.aux *.toc *.idx *.ind *.ilg *.log *.out refman.pdf
>
> = 
> ======================================================================
> ==./doc/api/c/latex/annotated.tex
> = 
> ======================================================================
> \section{Data Structures}
> Here are the data structures with brief descriptions: 
> \begin{CompactList}
> \item\contentsline{section}{\hyperlink{struct_a_v_r_o}{AVRO} } 
> {\pageref{struct_a_v_r_o}}{}
> \end{CompactList}
>
> = 
> ======================================================================
> ==./doc/api/c/latex/avro_8h.tex
> = 
> ======================================================================
> \hypertarget{avro_8h}{
> \section{avro.h File Reference}
> \label{avro_8h}\index{avro.h@{avro.h}}
> }
> \hyperlink{struct_a_v_r_o}{AVRO} API.
>
>
> {\tt \#include $<$stdarg.h$>$}\par
> {\tt \#include $<$stdint.h$>$}\par
> {\tt \#include $<$sys/types.h$>$}\par
> {\tt \#include $<$apr\_\-pools.h$>$}\par
> {\tt \#include $<$apr\_\-file\_\-io.h$>$}\par
> {\tt \#include $<$apr\_\-network\_\-io.h$>$}\par
> \subsection*{Data Structures}
> \begin{CompactItemize}
> \item
> struct \hyperlink{struct_a_v_r_o}{AVRO}
> \item
> struct \textbf{AVRO::AVRO::avro\_\-ops}
> \end{CompactItemize}
> \subsection*{Defines}
> \begin{CompactItemize}
> \item
> \hypertarget 
> {group___handle___routines_gec7f77fb08d34504a65e49f23673e2f2}{
> \#define \textbf{CHECK\_\-ERROR}(\_\-\_\-status)~if(\_\-\_\-status ! 
> = AVRO\_\-OK)\{ return \_\-\_\-status; \}}
> \label{group___handle___routines_gec7f77fb08d34504a65e49f23673e2f2}
>
> \item
> \hypertarget 
> {group___handle___routines_ga11bb99285d5512c5739aacb0b9352ca}{
> \#define \textbf{AVRO\_\-GETBYTES}(avro, addr, len)~($\ast$(avro) $ 
> \rightarrow$ a\_\-ops $\rightarrow$ a\_\-getbytes)(avro, addr, len)}
> \label{group___handle___routines_ga11bb99285d5512c5739aacb0b9352ca}
>
> \item
> \hypertarget 
> {group___handle___routines_gec949ab6bc010632000ad15f9adad118}{
> \#define \textbf{AVRO\_\-PUTBYTES}(avro, addr, len)~($\ast$(avro) $ 
> \rightarrow$ a\_\-ops $\rightarrow$ a\_\-putbytes)(avro, addr, len)}
> \label{group___handle___routines_gec949ab6bc010632000ad15f9adad118}
>
> \end{CompactItemize}
> \subsection*{Typedefs}
> \begin{CompactItemize}
> \item
> \hypertarget 
> {group___handle___routines_g845b3c301ea3d376db7167e40b8cc77e}{
> typedef enum  
> \hyperlink 
> {group___handle___routines_gcd8ee9ad4a4882eef8e3d9a0d5faec68}{avro\_ 
> \-op} \textbf{avro\_\-op}}
> \label{group___handle___routines_g845b3c301ea3d376db7167e40b8cc77e}
>
> \item
> \hypertarget 
> {group___handle___routines_g0c34cda845744621fb4e6bb24b82c416}{
> typedef enum  
> \hyperlink 
> {group___handle___routines_g4271ca78aabaaad628d7b632aa5a1499}{avro\_ 
> \-status\_\-t} \textbf{avro\_\-status\_\-t}}
> \label{group___handle___routines_g0c34cda845744621fb4e6bb24b82c416}
>
>
> = 
> ======================================================================
> ==./doc/api/c/latex/doxygen.sty
> = 
> ======================================================================
> \NeedsTeXFormat{LaTeX2e}
> \ProvidesPackage{doxygen}
> \RequirePackage{calc}
> \RequirePackage{array}
> \pagestyle{fancyplain}
> \newcommand{\clearemptydoublepage}{\newpage{\pagestyle{empty} 
> \cleardoublepage}}
> \renewcommand{\chaptermark}[1]{\markboth{#1}{}}
> \renewcommand{\sectionmark}[1]{\markright{\thesection\ #1}}
> \lhead[\fancyplain{}{\bfseries\thepage}]
>        {\fancyplain{}{\bfseries\rightmark}}
> \rhead[\fancyplain{}{\bfseries\leftmark}]
>        {\fancyplain{}{\bfseries\thepage}}
> \rfoot[\fancyplain{}{\bfseries\scriptsize Generated on Wed Jul 1  
> 14:58:18 2009 for AVRO C API by Doxygen }]{}
> \lfoot[]{\fancyplain{}{\bfseries\scriptsize Generated on Wed Jul 1  
> 14:58:18 2009 for AVRO C API by Doxygen }}
> \cfoot{}
> \newenvironment{Code}
> {\footnotesize}
> {\normalsize}
> \newcommand{\doxyref}[3]{\textbf{#1} (\textnormal{#2}\,\pageref{#3})}
> \newenvironment{DocInclude}
> {\footnotesize}
> {\normalsize}
> \newenvironment{VerbInclude}
> {\footnotesize}
> {\normalsize}
> \newenvironment{Image}
> {\begin{figure}[H]}
> {\end{figure}}
> \newenvironment{ImageNoCaption}{}{}
> \newenvironment{CompactList}
> {\begin{list}{}{
>  \setlength{\leftmargin}{0.5cm}
>  \setlength{\itemsep}{0pt}
>  \setlength{\parsep}{0pt}
>  \setlength{\topsep}{0pt}
>  \renewcommand{\makelabel}{\hfill}}}
> {\end{list}}
> \newenvironment{CompactItemize}
> {
>  \begin{itemize}
>  \setlength{\itemsep}{-3pt}
>  \setlength{\parsep}{0pt}
>  \setlength{\topsep}{0pt}
>  \setlength{\partopsep}{0pt}
> }
> {\end{itemize}}
> \newcommand{\PBS}[1]{\let\temp=\\#1\let\\=\temp}
> \newlength{\tmplength}
> \newenvironment{TabularC}[1]
> {
>
> = 
> ======================================================================
> ==./doc/api/c/latex/files.tex
> = 
> ======================================================================
> \section{File List}
> Here is a list of all documented files with brief descriptions: 
> \begin{CompactList}
> \item\contentsline{section}{\hyperlink{avro_8h}{avro.h}  
> (\hyperlink{struct_a_v_r_o}{AVRO} API )}{\pageref{avro_8h}}{}
> \item\contentsline{section}{\textbf{json.h} }{\pageref{json_8h}}{}
> \item\contentsline{section}{\textbf{json\_\-schema.h} } 
> {\pageref{json__schema_8h}}{}
> \item\contentsline{section}{\textbf{json\_\-tokenizer.h} } 
> {\pageref{json__tokenizer_8h}}{}
> \end{CompactList}
>
> = 
> ======================================================================
> ==./doc/api/c/latex/group___a_v_r_o.tex
> = 
> ======================================================================
> \hypertarget{group___a_v_r_o}{
> \section{Avro C API}
> \label{group___a_v_r_o}\index{Avro C API@{Avro C API}}
> }
> \subsection*{Modules}
> \begin{CompactItemize}
> \item
> \hyperlink{group___handle___routines}{AVRO Handles}
> \item
> \hyperlink{group___primitives}{AVRO Primitive Type Serialization}
> \item
> \hyperlink{group___compound}{AVRO Compound Type Serialization}
> \end{CompactItemize}
> \subsection*{Typedefs}
> \begin{CompactItemize}
> \item
> \hypertarget{group___a_v_r_o_ga7ab6d317ac114c2a8c6e963add2e078}{
> typedef  
> \hyperlink 
> {group___handle___routines_g4271ca78aabaaad628d7b632aa5a1499}{avro\_ 
> \-status\_\-t}($\ast$ \textbf{avroproc\_\-t} ) 
> (\hyperlink{struct_a_v_r_o}{AVRO} $\ast$, void $\ast$,...)}
> \label{group___a_v_r_o_ga7ab6d317ac114c2a8c6e963add2e078}
>
> \item
> \hypertarget{group___a_v_r_o_g812d16e5494522586b3784e55d479912}{
> typedef int \textbf{bool\_\-t}}
> \label{group___a_v_r_o_g812d16e5494522586b3784e55d479912}
>
> \end{CompactItemize}
> \subsection*{Functions}
> \begin{CompactItemize}
> \item
> \hypertarget{group___a_v_r_o_ge6f2feafe06746f9f48d3d1ee186d173}{
> void \textbf{avro\_\-dump\_\-memory} (\hyperlink{struct_a_v_r_o} 
> {AVRO} $\ast$avro, FILE $\ast$fp)}
> \label{group___a_v_r_o_ge6f2feafe06746f9f48d3d1ee186d173}
>
> \item
> \hypertarget{group___a_v_r_o_ga164f39fde7378d15bcbf5ae68bde902}{
> \hyperlink 
> {group___handle___routines_g4271ca78aabaaad628d7b632aa5a1499}{avro\_ 
> \-status\_\-t} \textbf{avro\_\-getint32\_\-raw}  
> (\hyperlink{struct_a_v_r_o}{AVRO} $\ast$avro, int32\_\-t $\ast$value)}
> \label{group___a_v_r_o_ga164f39fde7378d15bcbf5ae68bde902}
>
> \item
> \hypertarget{group___a_v_r_o_gf3117aff45720e3a226e5101b7067bc8}{
> \hyperlink 
> {group___handle___routines_g4271ca78aabaaad628d7b632aa5a1499}{avro\_ 
> \-status\_\-t} \textbf{avro\_\-putint32\_\-raw}  
> (\hyperlink{struct_a_v_r_o}{AVRO} $\ast$avro, const int32\_\-t value)}
> \label{group___a_v_r_o_gf3117aff45720e3a226e5101b7067bc8}
>
> \item
> \hypertarget{group___a_v_r_o_g23be6d2c7a1e1adec170cd0a35c44b96}{
> \hyperlink 
> {group___handle___routines_g4271ca78aabaaad628d7b632aa5a1499}{avro\_ 
> \-status\_\-t} \textbf{avro\_\-getint64\_\-raw}  
> (\hyperlink{struct_a_v_r_o}{AVRO} $\ast$avro, int64\_\-t $\ast$value)}
> \label{group___a_v_r_o_g23be6d2c7a1e1adec170cd0a35c44b96}
>
> \item
> \hypertarget{group___a_v_r_o_g233761be573e51ca3fa393ff6d7dea04}{
>
> = 
> ======================================================================
> ==./doc/api/c/latex/group___compound.tex
> = 
> ======================================================================
> \hypertarget{group___compound}{
> \section{AVRO Compound Type Serialization}
> \label{group___compound}\index{AVRO Compound Type  
> Serialization@{AVRO Compound Type Serialization}}
> }
> \subsection*{Functions}
> \begin{CompactItemize}
> \item
> \hyperlink 
> {group___handle___routines_g4271ca78aabaaad628d7b632aa5a1499}{avro\_ 
> \-status\_\-t}  
> \hyperlink{group___compound_g52f0a4383812a3d19a00f461ddb1a27c}{avro\_ 
> \-array} (\hyperlink{struct_a_v_r_o}{AVRO} $\ast$avro, caddr\_\-t $ 
> \ast$addrp, uint32\_\-t $\ast$sizep, uint32\_\-t maxsize, uint32\_\- 
> t elsize, avroproc\_\-t elproc)
> \end{CompactItemize}
>
>
> \subsection{Function Documentation}
> \hypertarget{group___compound_g52f0a4383812a3d19a00f461ddb1a27c}{
> \index{Compound@{Compound}!avro\_\-array@{avro\_\-array}}
> \index{avro\_\-array@{avro\_\-array}!Compound@{Compound}}
> \subsubsection[{avro\_\-array}]{\setlength{\rightskip}{0pt plus 5cm} 
> {\bf avro\_\-status\_\-t} avro\_\-array ({\bf AVRO} $\ast$ {\em  
> avro}, \/  caddr\_\-t $\ast$ {\em addrp}, \/  uint32\_\-t $\ast$  
> {\em sizep}, \/  uint32\_\-t {\em maxsize}, \/  uint32\_\-t {\em  
> elsize}, \/  avroproc\_\-t {\em elproc})}}
> \label{group___compound_g52f0a4383812a3d19a00f461ddb1a27c}
>
>
> \hyperlink{group___compound_g52f0a4383812a3d19a00f461ddb1a27c}{avro\_ 
> \-array()} encodes/decodes an array of avro elements \begin{Desc}
> \item[Parameters:]
> \begin{description}
> \item[{\em avro}]The Avro handle \item[{\em addrp}]Pointer to the  
> array \item[{\em sizep}]Pointer to the number of elements \item[{\em  
> maxsize}]The maximum number of Avro elements \item[{\em elsize}]The  
> size in bytes of each element \item[{\em elproc}]The Avro routine to  
> handle each element \end{description}
> \end{Desc}
> \begin{Desc}
> \item[Returns:]The Avro status \end{Desc}
>
> = 
> ======================================================================
> ==./doc/api/c/latex/group___handle___routines.tex
> = 
> ======================================================================
> \hypertarget{group___handle___routines}{
> \section{AVRO Handles}
> \label{group___handle___routines}\index{AVRO Handles@{AVRO Handles}}
> }
> \subsection*{Data Structures}
> \begin{CompactItemize}
> \item
> struct \hyperlink{struct_a_v_r_o}{AVRO}
> \end{CompactItemize}
> \subsection*{Defines}
> \begin{CompactItemize}
> \item
> \hypertarget 
> {group___handle___routines_gec7f77fb08d34504a65e49f23673e2f2}{
> \#define \textbf{CHECK\_\-ERROR}(\_\-\_\-status)~if(\_\-\_\-status ! 
> = AVRO\_\-OK)\{ return \_\-\_\-status; \}}
> \label{group___handle___routines_gec7f77fb08d34504a65e49f23673e2f2}
>
> \item
> \hypertarget 
> {group___handle___routines_ga11bb99285d5512c5739aacb0b9352ca}{
> \#define \textbf{AVRO\_\-GETBYTES}(avro, addr, len)~($\ast$(avro) $ 
> \rightarrow$ a\_\-ops $\rightarrow$ a\_\-getbytes)(avro, addr, len)}
> \label{group___handle___routines_ga11bb99285d5512c5739aacb0b9352ca}
>
> \item
> \hypertarget 
> {group___handle___routines_gec949ab6bc010632000ad15f9adad118}{
> \#define \textbf{AVRO\_\-PUTBYTES}(avro, addr, len)~($\ast$(avro) $ 
> \rightarrow$ a\_\-ops $\rightarrow$ a\_\-putbytes)(avro, addr, len)}
> \label{group___handle___routines_gec949ab6bc010632000ad15f9adad118}
>
> \end{CompactItemize}
> \subsection*{Typedefs}
> \begin{CompactItemize}
> \item
> \hypertarget 
> {group___handle___routines_g845b3c301ea3d376db7167e40b8cc77e}{
> typedef enum  
> \hyperlink 
> {group___handle___routines_gcd8ee9ad4a4882eef8e3d9a0d5faec68}{avro\_ 
> \-op} \textbf{avro\_\-op}}
> \label{group___handle___routines_g845b3c301ea3d376db7167e40b8cc77e}
>
> \item
> \hypertarget 
> {group___handle___routines_g0c34cda845744621fb4e6bb24b82c416}{
> typedef enum  
> \hyperlink 
> {group___handle___routines_g4271ca78aabaaad628d7b632aa5a1499}{avro\_ 
> \-status\_\-t} \textbf{avro\_\-status\_\-t}}
> \label{group___handle___routines_g0c34cda845744621fb4e6bb24b82c416}
>
> \item
> \hypertarget 
> {group___handle___routines_g6e3ec80aeb6c2317c76d6fb2a919b665}{
> typedef struct \hyperlink{struct_a_v_r_o}{AVRO} \textbf{AVRO}}
> \label{group___handle___routines_g6e3ec80aeb6c2317c76d6fb2a919b665}
>
> \end{CompactItemize}
> \subsection*{Enumerations}
> \begin{CompactItemize}
> \item
> enum  
> \hyperlink 
> {group___handle___routines_gcd8ee9ad4a4882eef8e3d9a0d5faec68}{avro\_ 
> \-op} \ 
> { \hyperlink 
> {group___handle___routines_ggcd8ee9ad4a4882eef8e3d9a0d5faec68037c26ec9dd8b98243aa9aed3f80160b 
> }{AVRO\_\-ENCODE} =  0,
> \hyperlink 
> {group___handle___routines_ggcd8ee9ad4a4882eef8e3d9a0d5faec682802292d4fd32b8eb68872bcc03bd1dd 
> }{AVRO\_\-DECODE} =  1
>
> = 
> ======================================================================
> ==./doc/api/c/latex/group___primitives.tex
> = 
> ======================================================================
> \hypertarget{group___primitives}{
> \section{AVRO Primitive Type Serialization}
> \label{group___primitives}\index{AVRO Primitive Type  
> Serialization@{AVRO Primitive Type Serialization}}
> }
> \subsection*{Functions}
> \begin{CompactItemize}
> \item
> \hyperlink 
> {group___handle___routines_g4271ca78aabaaad628d7b632aa5a1499}{avro\_ 
> \-status\_\-t}  
> \hyperlink{group___primitives_gad3a89fbddd4853036ed861dba1ee2c1}{avro 
> \_\-null} (void)
> \item
> \hyperlink 
> {group___handle___routines_g4271ca78aabaaad628d7b632aa5a1499}{avro\_ 
> \-status\_\-t}  
> \hyperlink{group___primitives_gef604d6a5f83d9769b4c5d47e8b505f2}{avro 
> \_\-int64} (\hyperlink{struct_a_v_r_o}{AVRO} $\ast$avro, int64\_\-t $ 
> \ast$lp)
> \item
> \hyperlink 
> {group___handle___routines_g4271ca78aabaaad628d7b632aa5a1499}{avro\_ 
> \-status\_\-t}  
> \hyperlink{group___primitives_g4d568c22cdd854ea5a9c85ed622f7d91}{avro 
> \_\-string} (\hyperlink{struct_a_v_r_o}{AVRO} $\ast$avro, char $\ast$ 
> $\ast$str, int64\_\-t maxlen)
> \item
> \hyperlink 
> {group___handle___routines_g4271ca78aabaaad628d7b632aa5a1499}{avro\_ 
> \-status\_\-t}  
> \hyperlink{group___primitives_g883aa71b77043b51296ab278c2a84a23}{avro 
> \_\-bytes} (\hyperlink{struct_a_v_r_o}{AVRO} $\ast$avro, char $\ast$$ 
> \ast$bytes, int64\_\-t $\ast$len, int64\_\-t maxlen)
> \item
> \hyperlink 
> {group___handle___routines_g4271ca78aabaaad628d7b632aa5a1499}{avro\_ 
> \-status\_\-t}  
> \hyperlink{group___primitives_ga230ba9c2028579916da8e3ef7abbb07}{avro 
> \_\-bool} (\hyperlink{struct_a_v_r_o}{AVRO} $\ast$avro, bool\_\-t $ 
> \ast$bp)
> \item
> \hyperlink 
> {group___handle___routines_g4271ca78aabaaad628d7b632aa5a1499}{avro\_ 
> \-status\_\-t}  
> \hyperlink{group___primitives_ge1346e273aa3d82cc324992f081c6a49}{avro 
> \_\-float} (\hyperlink{struct_a_v_r_o}{AVRO} $\ast$avro, float $\ast 
> $fp)
> \item
> \hyperlink 
> {group___handle___routines_g4271ca78aabaaad628d7b632aa5a1499}{avro\_ 
> \-status\_\-t}  
> \hyperlink{group___primitives_g16c546852402edffa666a3cd214d4f7c}{avro 
> \_\-double} (\hyperlink{struct_a_v_r_o}{AVRO} $\ast$avro, double $ 
> \ast$dp)
> \end{CompactItemize}
>
>
> \subsection{Function Documentation}
> \hypertarget{group___primitives_ga230ba9c2028579916da8e3ef7abbb07}{
> \index{Primitives@{Primitives}!avro\_\-bool@{avro\_\-bool}}
> \index{avro\_\-bool@{avro\_\-bool}!Primitives@{Primitives}}
> \subsubsection[{avro\_\-bool}]{\setlength{\rightskip}{0pt plus 5cm} 
> {\bf avro\_\-status\_\-t} avro\_\-bool ({\bf AVRO} $\ast$ {\em  
> avro}, \/  bool\_\-t $\ast$ {\em bp})}}
> \label{group___primitives_ga230ba9c2028579916da8e3ef7abbb07}
>
>
> \hyperlink{group___primitives_ga230ba9c2028579916da8e3ef7abbb07}{avro 
> \_\-bool()} is called to read/write a boolean value \begin{Desc}
> \item[Parameters:]
> \begin{description}
> \item[{\em avro}]The Avro handle \item[{\em bp}]Pointer to the  
> boolean pointer \end{description}
> \end{Desc}
> \begin{Desc}
> \item[Returns:]The Avro status \end{Desc}
> \hypertarget{group___primitives_g883aa71b77043b51296ab278c2a84a23}{
> \index{Primitives@{Primitives}!avro\_\-bytes@{avro\_\-bytes}}
> \index{avro\_\-bytes@{avro\_\-bytes}!Primitives@{Primitives}}
> \subsubsection[{avro\_\-bytes}]{\setlength{\rightskip}{0pt plus 5cm} 
> {\bf avro\_\-status\_\-t} avro\_\-bytes ({\bf AVRO} $\ast$ {\em  
> avro}, \/  char $\ast$$\ast$ {\em bytes}, \/  int64\_\-t $\ast$ {\em  
> len}, \/  int64\_\-t {\em maxlen})}}
> \label{group___primitives_g883aa71b77043b51296ab278c2a84a23}
>
>
> \hyperlink{group___primitives_g883aa71b77043b51296ab278c2a84a23}{avro 
> \_\-bytes()} is called to read/write opaque bytes \begin{Desc}
> \item[Parameters:]
> \begin{description}
> \item[{\em avro}]The Avro handle \item[{\em bytes}]The pointer to  
> the bytes to read/write \item[{\em len}]Pointer to an integer which  
> either (1) expresses the number of bytes you wish to encode or (2)  
> is set on return to give the number of bytes decoded \item[{\em  
> maxlen}]The maximum number of bytes to read/write \end{description}
> \end{Desc}
>
> = 
> ======================================================================
> ==./doc/api/c/latex/modules.tex
> = 
> ======================================================================
> \section{Modules}
> Here is a list of all modules:\begin{CompactList}
> \item \contentsline{section}{Avro C API}{\pageref{group___a_v_r_o}}{}
> \begin{CompactList}
> \item \contentsline{section}{AVRO Handles} 
> {\pageref{group___handle___routines}}{}
> \item \contentsline{section}{AVRO Primitive Type Serialization} 
> {\pageref{group___primitives}}{}
> \item \contentsline{section}{AVRO Compound Type Serialization} 
> {\pageref{group___compound}}{}
> \end{CompactList}
> \end{CompactList}
>
> = 
> ======================================================================
> ==./doc/api/c/latex/refman.tex
> = 
> ======================================================================
> \documentclass[a4paper]{book}
> \usepackage{a4wide}
> \usepackage{makeidx}
> \usepackage{fancyhdr}
> \usepackage{graphicx}
> \usepackage{multicol}
> \usepackage{float}
> \usepackage{textcomp}
> \usepackage{alltt}
> \usepackage{times}
> \usepackage{ifpdf}
> \ifpdf
> \usepackage[pdftex,
>            pagebackref=true,
>            colorlinks=true,
>            linkcolor=blue,
>            unicode
>           ]{hyperref}
> \else
> \usepackage[ps2pdf,
>            pagebackref=true,
>            colorlinks=true,
>            linkcolor=blue,
>            unicode
>           ]{hyperref}
> \usepackage{pspicture}
> \fi
> \usepackage[utf8]{inputenc}
> \usepackage{doxygen}
> \makeindex
> \setcounter{tocdepth}{3}
> \renewcommand{\footrulewidth}{0.4pt}
> \begin{document}
> \begin{titlepage}
> \vspace*{7cm}
> \begin{center}
> {\Large AVRO C API }\\
> \vspace*{1cm}
> {\large Generated by Doxygen 1.5.8}\\
> \vspace*{0.5cm}
> {\small Wed Jul 1 14:58:18 2009}\\
> \end{center}
> \end{titlepage}
> \clearemptydoublepage
> \pagenumbering{roman}
> \tableofcontents
> \clearemptydoublepage
> \pagenumbering{arabic}
> \chapter{Todo List}
> \label{todo}
>
> = 
> ======================================================================
> ==./doc/api/c/latex/struct_a_v_r_o.tex
> = 
> ======================================================================
> \hypertarget{struct_a_v_r_o}{
> \section{AVRO Struct Reference}
> \label{struct_a_v_r_o}\index{AVRO@{AVRO}}
> }
> {\tt \#include $<$avro.h$>$}
>
> \subsection*{Data Structures}
> \begin{CompactItemize}
> \item
> struct \textbf{avro\_\-ops}
> \end{CompactItemize}
> \subsection*{Data Fields}
> \begin{CompactItemize}
> \item
> enum  
> \hyperlink 
> {group___handle___routines_gcd8ee9ad4a4882eef8e3d9a0d5faec68}{avro\_ 
> \-op} \hyperlink{struct_a_v_r_o_7291c82adfe53e2d895824663e028e8e}{a\_ 
> \-op}
> \item
> \hypertarget{struct_a_v_r_o_8eb2c9c88718b2c7976429af135348e9}{
> struct AVRO::avro\_\-ops $\ast$ \textbf{a\_\-ops}}
> \label{struct_a_v_r_o_8eb2c9c88718b2c7976429af135348e9}
>
> \item
> apr\_\-pool\_\-t $\ast$  
> \hyperlink{struct_a_v_r_o_b4cc960de06bd42633124a8a62852928}{pool}
> \item
> unsigned char $\ast$  
> \hyperlink{struct_a_v_r_o_e6ff7776029faa4c4d7053f0cb7b71e5}{schema}
> \item
> apr\_\-file\_\-t $\ast$  
> \hyperlink{struct_a_v_r_o_adc436b34c7426022b819cdc2d6ced6e}{file}
> \item
> apr\_\-socket\_\-t $\ast$  
> \hyperlink{struct_a_v_r_o_33d50daaa50ad7ec3c4e22d4f1eb6143}{socket}
> \item
> caddr\_\-t  
> \hyperlink{struct_a_v_r_o_b1c64881a5280cceb600f316fbb07952}{addr}
> \item
> int64\_\-t  
> \hyperlink{struct_a_v_r_o_167d3abd38fca62643a5ceb0c34711bc}{len}
> \item
> int64\_\-t  
> \hyperlink{struct_a_v_r_o_4ce667da8e13c2b9c464aa76b414ab82}{used}
> \end{CompactItemize}
>
>
> \subsection{Detailed Description}
> Avro handle. Opaque handle for encoding/decoding data to memory,  
> file or network. \begin{Desc}
> \item[Warning:]Never operate on an Avro handle directly. Use the  
> \hyperlink{struct_a_v_r_o}{AVRO} Handle routines instead. \end{Desc}
>
>
> \subsection{Field Documentation}
> \hypertarget{struct_a_v_r_o_7291c82adfe53e2d895824663e028e8e}{
> \index{AVRO@{AVRO}!a\_\-op@{a\_\-op}}
> \index{a\_\-op@{a\_\-op}!AVRO@{AVRO}}
> \subsubsection[{a\_\-op}]{\setlength{\rightskip}{0pt plus 5cm}enum  
> {\bf avro\_\-op} {\bf AVRO::a\_\-op}}}
> \label{struct_a_v_r_o_7291c82adfe53e2d895824663e028e8e}
>
>
>
> = 
> ======================================================================
> ==./doc/api/c/latex/todo.tex
> = 
> ======================================================================
> \label{todo__todo000001}
> \hypertarget{todo__todo000001}{}
> \begin{description}
> \item[Global  
> \hyperlink 
> {group___handle___routines_g4271ca78aabaaad628d7b632aa5a1499}{avro\_ 
> \-status\_\-t} ]expand the number of states \end{description}
>
> = 
> ======================================================================
> ==./doc/api/java/package-list
> = 
> ======================================================================
> org.apache.avro
> org.apache.avro.file
> org.apache.avro.generic
> org.apache.avro.io
> org.apache.avro.ipc
> org.apache.avro.reflect
> org.apache.avro.specific
> org.apache.avro.util
>
> = 
> ======================================================================
> ==./doc/api/java/org/apache/avro/io/doc-files/parsing.html
> = 
> ======================================================================
> <html>
> <head>
> <title>Avro schemas as LL(1) CFG definitions</title>
> </head>
> <body>
>
> <center><h1>Avro schemas as LL(1) CFG definitions</h1></center>
>
> This document shows how an Avro schema can be interpreted as the  
> definition of a context-free grammar in LL(1).  We use such an  
> interpretation for two use-cases.  In one use-case, we use them to  
> validate readers and writers of data against a single Avro schema.   
> Specifically, sequences of <code>Encoder.writeXyz</code> methods can  
> be validated against a schema, and similarly sequences of  
> <code>Decoder.readXyz</code> methods can be validated against a  
> schema.
>
> The second use-case is using grammars to perform schema resolution.   
> For this use-case, we've developed a subclass of <code>Decoder</ 
> code> which takes two Avro schemas as input -- a reader and a writer  
> schema.  This subclass accepts an input stream written according to  
> the writer schema, and presents it to a client expecting the reader  
> schema.  If the writer writes a long, for example, where the reader  
> expects a double, then the <code>Decoder.readDoubl</code> method  
> will convert the writer's long into a double.
>
> This document looks at grammars in the context of these two use- 
> cases.  We first look at the single-schema case, then the double- 
> schema case.  In the future, we believe the interpretation of Avro  
> schemas as CFGs will find other uses (for example, to determine  
> whether or not a schema admits finite-sized values).
>
>
> <h1>The interpretation</h1>
>
> <p> We parse a schema into a set of JSON objects.  For each record,  
> map, array, union schema inside this set, this parse is going to  
> generate a unique identifier "n<sub>i</sub>" (the "pointer" to the  
> schema).  By convention, n<sub>0</sub> is the identifier for the  
> "top-level" schema (i.e., the schema we want to read or write).  In  
> addition, where n<sub>i</sub> is a union, the parse will generate a  
> unique identifier "b<sub>ij</sub>" for each branch of the union.
>
> <p> A context-free grammar (CFG) consists of a set of terminal- 
> symbols, a set of non-terminal symbols, a set of productions, and a  
> start symbol.  Here's how we interpret an Avro schema as a CFG:
>
> <p> <b>Terminal symbols:</b> The terminal symbols of the CFG consist  
> of <code>null</code>, <code>bool</code>, <code>int</code>,  
> <code>long</code>, <code>float</code>, <code>double</code>,  
> <code>string</code>, <code>bytes</code>, <code>enum</code>,  
> <code>fixed</code>, <code>arraystart</code>, <code>arrayend</code>,  
> <code>mapstart</code>, <code>mapend</code>, and <code>union</code>.   
> In addition, we define the special terminals <code>"1"</code>,  
> <code>"2"</code>, <code>"3"</code>, <code>...</code> which designate  
> the "tag" of a union (i.e., which branch of the union is actually  
> being written or was found in the data).
>
> <p> Below, we use the variable <i>P</i> to represent any one of  
> <code>null</code>, <code>bool</code>, <code>int</code>, <code>long</ 
> code>, <code>double</code>, <code>string</code>, <code>bytes</code>  
> (i.e., the "primitives").
>
> <p><b>Non-terminal symbols:</b> The non-terminal symbols of the CFG  
> consist of the identifiers n<sub>i</sub>, u<sub>i</sub>, r<sub>i</ 
> sub>, e<sub>i</sub>, f<sub>i</sub> and r<sub>p</sub> (there is a non- 
> terminal r<sub>p</sub> for each symbol in <i>P</i>).
>
> <p><b>Productions:</b> The productions of the CFG are as follows:
>
> <p><i>Records:</i> If n<sub>i</sub> is a record-schema, then it  
> defines the following production:
> <br>&nbsp;&nbsp;&nbsp;n<sub>i</sub> ::= sym(f<sub>i1</sub>)  
> sym(f<sub>i2</sub>) .. sym(f<sub>im</sub>)
> <br>where f<sub>ij</sub> is field "j" of record n<sub>i</sub>, and  
> sym(f<sub>ij</sub>) is the appropriate member of <i>P</i> if  
> f<sub>ij</sub> is a primitive type, or the appropriate n<sub>k</sub>  
> for some k if f<sub>ij</sub> is a map, array, union, or record schema.
>
> <p><i>Arrays:</i> If n<sub>i</sub> is an array schema, then it  
> defines the following productions:
> <br> &nbsp;&nbsp;&nbsp;n<sub>i</sub> ::= <code>arraystart</code>  
> r<sub>i</sub> <code>arrayend</code>
> <br> &nbsp;&nbsp;&nbsp;r<sub>i</sub> ::= sym(n<sub>i</sub>) r<sub>i</ 
> sub> | &#949;
> <br> where "sym(n<sub>i</sub>)" is either some <i>P</i>, if this is  
> an array of primitives, or the non-terminal associated with the  
> schema of the element-type of n<sub>k</sub>.
>
> <p><i>Maps:</i> If n<sub>i</sub> is a map schema of element type  
> <i>P</i>, then it defines the following production:
> <br>&nbsp;&nbsp;&nbsp;n<sub>i</sub> ::= <code>mapstart</code>  
> r<sub>i</sub> <code>mapend</code>
> <br>&nbsp;&nbsp;&nbsp;r<sub>i</sub> ::= <code>string</code>  
> sym(n<sub>i</sub>) r<sub>i</sub> | &#949;
> <br> where "sym(n<sub>i</sub>)" is either some <i>P</i>, if the  
> value-type is a primitive, or the non-terminal associated with the  
> schema of the value-type of n<sub>k</sub>.
>
> <p><i>Unions:</i> If n<sub>i</sub> is a union schema, then it  
> defines the following productions:
> <br>&nbsp;&nbsp;&nbsp;n<sub>i</sub> ::= <code>union</code> u<sub>i</ 
> sub>
> <br>&nbsp;&nbsp;&nbsp;u<sub>i</sub> ::= 1 sym(b<sub>i1</sub>) | 2  
> sym(b<sub>i2</sub>) | ... | j sym(b<sub>ij</sub>)
> <br> where the "1", "2", "3" are the tags for the union, and the  
> b<sub>ij</sub> is branch "j" of union "n<sub>i</sub>", and  
> sym(b<sub>ij</sub>) is the appropriate member of <i>P</i> if  
> b<sub>ij</sub> is a primitive type, or the appropriate n<sub>k</sub>  
> if b<sub>ij</sub> is a map, array, union, or record schema.  (The  
> introduction of the terminal symbol "UNION" plus the introduction of  
> the additional non-terminal "u<sub>i</sub>" is a convenience to our  
> parsing implementation.)
>
> <p><i>Enum</i> If n<sub>i</sub> is an enum schema, then it defines  
> the following production:
> <br>&nbsp;&nbsp;&nbsp;n<sub>i</sub> ::= <code>enum</code> e<sub>i</ 
> sub>
>
> = 
> ======================================================================
> ==./doc/api/py/avro.genericio.html
> = 
> ======================================================================
>
> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
> <html><head><title>Python: module avro.genericio</title>
> </head><body bgcolor="#f0f0f8">
>
> <table width="100%" cellspacing=0 cellpadding=2 border=0  
> summary="heading">
> <tr bgcolor="#7799ee">
> <td valign=bottom>&nbsp;<br>
> <font color="#ffffff" face="helvetica,  
> arial">&nbsp;<br><big><big><strong><a href="avro.html"><font  
> color="#ffffff">avro</font></a>.genericio</strong></big></big></ 
> font></td
>> <td align=right valign=bottom
>> <font color="#ffffff" face="helvetica, arial"><a href=".">index</ 
>> a><br><a href="file:/home/cutting/src/avro/test/src/py/avro/ 
>> genericio.py">/home/cutting/src/avro/test/src/py/avro/genericio.py</ 
>> a></font></td></tr></table>
>    <p><tt>Generic&nbsp;representation&nbsp;for&nbsp;data.&nbsp;<br>
> Represent 
> &nbsp 
> ;Schema&nbsp;data&nbsp;with&nbsp;generic&nbsp;python&nbsp;types.<br>
> &nbsp;<br>
> Uses&nbsp;the&nbsp;following&nbsp;mapping:<br>
> &nbsp 
> ;&nbsp 
> ;*&nbsp 
> ;Schema&nbsp;records&nbsp;are&nbsp;implemented&nbsp;as&nbsp;dict.<br>
> &nbsp 
> ;&nbsp 
> ;*&nbsp 
> ;Schema&nbsp;arrays&nbsp;are&nbsp;implemented&nbsp;as&nbsp;list.<br>
> &nbsp 
> ;&nbsp 
> ;*&nbsp 
> ;Schema&nbsp;maps&nbsp;are&nbsp;implemented&nbsp;as&nbsp;dict.<br>
> &nbsp 
> ;&nbsp 
> ;*&nbsp 
> ;Schema 
> &nbsp;strings&nbsp;are&nbsp;implemented&nbsp;as&nbsp;unicode.<br>
> &nbsp 
> ;&nbsp 
> ;*&nbsp 
> ;Schema&nbsp;bytes&nbsp;are&nbsp;implemented&nbsp;as&nbsp;str.<br>
> &nbsp 
> ;&nbsp 
> ;*&nbsp 
> ;Schema&nbsp;ints&nbsp;are&nbsp;implemented&nbsp;as&nbsp;int.<br>
> &nbsp 
> ;&nbsp 
> ;*&nbsp 
> ;Schema&nbsp;longs&nbsp;are&nbsp;implemented&nbsp;as&nbsp;long.<br>
> &nbsp 
> ;&nbsp 
> ;*&nbsp 
> ;Schema&nbsp;floats&nbsp;are&nbsp;implemented&nbsp;as&nbsp;float.<br>
> &nbsp 
> ;&nbsp 
> ;*&nbsp 
> ;Schema&nbsp;doubles&nbsp;are&nbsp;implemented&nbsp;as&nbsp;float.<br>
> &nbsp 
> ;&nbsp 
> ;*&nbsp 
> ;Schema&nbsp;booleans&nbsp;are&nbsp;implemented&nbsp;as&nbsp;bool.</ 
> tt></p>
> <p>
> <table width="100%" cellspacing=0 cellpadding=2 border=0  
> summary="section">
> <tr bgcolor="#aa55cc">
> <td colspan=3 valign=bottom>&nbsp;<br>
> <font color="#ffffff" face="helvetica, arial"><big><strong>Modules</ 
> strong></big></font></td></tr>
>
> <tr><td bgcolor="#aa55cc"><tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</ 
> tt></td><td>&nbsp;</td>
> <td width="100%"><table width="100%" summary="list"><tr><td  
> width="25%" valign=top><a href="avro.io.html">avro.io</a><br>
> </td><td width="25%" valign=top><a  
> href="avro.schema.html">avro.schema</a><br>
> </td><td width="25%" valign=top></td><td width="25%" valign=top></ 
> td></tr></table></td></tr></table><p>
> <table width="100%" cellspacing=0 cellpadding=2 border=0  
> summary="section">
> <tr bgcolor="#ee77aa">
> <td colspan=3 valign=bottom>&nbsp;<br>
> <font color="#ffffff" face="helvetica, arial"><big><strong>Classes</ 
> strong></big></font></td></tr>
>
> <tr><td bgcolor="#ee77aa"><tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</ 
> tt></td><td>&nbsp;</td>
> <td width="100%"><dl>
> <dt><font face="helvetica, arial"><a  
> href="avro.io.html#DatumReaderBase">avro.io.DatumReaderBase</a>(<a  
> href="__builtin__.html#object">__builtin__.object</a>)
> </font></dt><dd>
> <dl>
> <dt><font face="helvetica, arial"><a  
> href="avro.genericio.html#DatumReader">DatumReader</a>
> </font></dt></dl>
> </dd>
> <dt><font face="helvetica, arial"><a  
> href="avro.io.html#DatumWriterBase">avro.io.DatumWriterBase</a>(<a  
> href="__builtin__.html#object">__builtin__.object</a>)
> </font></dt><dd>
>
> = 
> ======================================================================
> ==./doc/api/py/avro.io.html
> = 
> ======================================================================
>
> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
> <html><head><title>Python: module avro.io</title>
> </head><body bgcolor="#f0f0f8">
>
> <table width="100%" cellspacing=0 cellpadding=2 border=0  
> summary="heading">
> <tr bgcolor="#7799ee">
> <td valign=bottom>&nbsp;<br>
> <font color="#ffffff" face="helvetica,  
> arial">&nbsp;<br><big><big><strong><a href="avro.html"><font  
> color="#ffffff">avro</font></a>.io</strong></big></big></font></td
>> <td align=right valign=bottom
>> <font color="#ffffff" face="helvetica, arial"><a href=".">index</ 
>> a><br><a href="file:/home/cutting/src/avro/test/src/py/avro/io.py">/ 
>> home/cutting/src/avro/test/src/py/avro/io.py</a></font></td></tr></ 
>> table>
>    <p><tt>Input/Output&nbsp;utilities.</tt></p>
> <p>
> <table width="100%" cellspacing=0 cellpadding=2 border=0  
> summary="section">
> <tr bgcolor="#aa55cc">
> <td colspan=3 valign=bottom>&nbsp;<br>
> <font color="#ffffff" face="helvetica, arial"><big><strong>Modules</ 
> strong></big></font></td></tr>
>
> <tr><td bgcolor="#aa55cc"><tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</ 
> tt></td><td>&nbsp;</td>
> <td width="100%"><table width="100%" summary="list"><tr><td  
> width="25%" valign=top><a href="cStringIO.html">cStringIO</a><br>
> </td><td width="25%" valign=top><a  
> href="avro.schema.html">avro.schema</a><br>
> </td><td width="25%" valign=top><a href="struct.html">struct</a><br>
> </td><td width="25%" valign=top><a href="uuid.html">uuid</a><br>
> </td></tr></table></td></tr></table><p>
> <table width="100%" cellspacing=0 cellpadding=2 border=0  
> summary="section">
> <tr bgcolor="#ee77aa">
> <td colspan=3 valign=bottom>&nbsp;<br>
> <font color="#ffffff" face="helvetica, arial"><big><strong>Classes</ 
> strong></big></font></td></tr>
>
> <tr><td bgcolor="#ee77aa"><tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</ 
> tt></td><td>&nbsp;</td>
> <td width="100%"><dl>
> <dt><font face="helvetica, arial"><a  
> href="__builtin__.html#object">__builtin__.object</a>
> </font></dt><dd>
> <dl>
> <dt><font face="helvetica, arial"><a  
> href="avro.io.html#DataFileReader">DataFileReader</a>
> </font></dt><dt><font face="helvetica, arial"><a  
> href="avro.io.html#DataFileWriter">DataFileWriter</a>
> </font></dt><dt><font face="helvetica, arial"><a  
> href="avro.io.html#DatumReaderBase">DatumReaderBase</a>
> </font></dt><dt><font face="helvetica, arial"><a  
> href="avro.io.html#DatumWriterBase">DatumWriterBase</a>
> </font></dt><dt><font face="helvetica, arial"><a  
> href="avro.io.html#Decoder">Decoder</a>
> </font></dt><dt><font face="helvetica, arial"><a  
> href="avro.io.html#Encoder">Encoder</a>
> </font></dt></dl>
> </dd>
> <dt><font face="helvetica, arial"><a  
> href="avro.schema.html#AvroException">avro.schema.AvroException</ 
> a>(<a href="exceptions.html#Exception">exceptions.Exception</a>)
> </font></dt><dd>
> <dl>
> <dt><font face="helvetica, arial"><a  
> href="avro.io.html#AvroTypeException">AvroTypeException</a>
> </font></dt></dl>
> </dd>
> </dl>
> <p>
>
> = 
> ======================================================================
> ==./doc/api/py/avro.reflectio.html
> = 
> ======================================================================
>
> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
> <html><head><title>Python: module avro.reflectio</title>
> </head><body bgcolor="#f0f0f8">
>
> <table width="100%" cellspacing=0 cellpadding=2 border=0  
> summary="heading">
> <tr bgcolor="#7799ee">
> <td valign=bottom>&nbsp;<br>
> <font color="#ffffff" face="helvetica,  
> arial">&nbsp;<br><big><big><strong><a href="avro.html"><font  
> color="#ffffff">avro</font></a>.reflectio</strong></big></big></ 
> font></td
>> <td align=right valign=bottom
>> <font color="#ffffff" face="helvetica, arial"><a href=".">index</ 
>> a><br><a href="file:/home/cutting/src/avro/test/src/py/avro/ 
>> reflectio.py">/home/cutting/src/avro/test/src/py/avro/reflectio.py</ 
>> a></font></td></tr></table>
>     
> < 
> p 
> > 
> < 
> tt 
> > 
> Define 
> &nbsp 
> ;Record 
> &nbsp 
> ;schema 
> &nbsp 
> ;and 
> &nbsp 
> ;protocol 
> &nbsp 
> ;classes 
> &nbsp;at&nbsp;runtime.&nbsp;This&nbsp;can&nbsp;be&nbsp;used&nbsp;<br>
> to 
> &nbsp 
> ;invoke 
> &nbsp 
> ;the&nbsp;methods&nbsp;on&nbsp;Protocol&nbsp;proxy&nbsp;directly.</ 
> tt></p>
> <p>
> <table width="100%" cellspacing=0 cellpadding=2 border=0  
> summary="section">
> <tr bgcolor="#aa55cc">
> <td colspan=3 valign=bottom>&nbsp;<br>
> <font color="#ffffff" face="helvetica, arial"><big><strong>Modules</ 
> strong></big></font></td></tr>
>
> <tr><td bgcolor="#aa55cc"><tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</ 
> tt></td><td>&nbsp;</td>
> <td width="100%"><table width="100%" summary="list"><tr><td  
> width="25%" valign=top><a href="avro.genericio.html">avro.genericio</ 
> a><br>
> </td><td width="25%" valign=top><a href="avro.io.html">avro.io</a><br>
> </td><td width="25%" valign=top><a  
> href="avro.schema.html">avro.schema</a><br>
> </td><td width="25%" valign=top></td></tr></table></td></tr></ 
> table><p>
> <table width="100%" cellspacing=0 cellpadding=2 border=0  
> summary="section">
> <tr bgcolor="#ee77aa">
> <td colspan=3 valign=bottom>&nbsp;<br>
> <font color="#ffffff" face="helvetica, arial"><big><strong>Classes</ 
> strong></big></font></td></tr>
>
> <tr><td bgcolor="#ee77aa"><tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</ 
> tt></td><td>&nbsp;</td>
> <td width="100%"><dl>
> <dt><font face="helvetica, arial"><a  
> href="avro.genericio.html#DatumReader">avro.genericio.DatumReader</ 
> a>(<a href="avro.io.html#DatumReaderBase">avro.io.DatumReaderBase</a>)
> </font></dt><dd>
> <dl>
> <dt><font face="helvetica, arial"><a  
> href="avro.reflectio.html#ReflectDatumReader">ReflectDatumReader</a>
> </font></dt></dl>
> </dd>
> <dt><font face="helvetica, arial"><a  
> href="avro.genericio.html#DatumWriter">avro.genericio.DatumWriter</ 
> a>(<a href="avro.io.html#DatumWriterBase">avro.io.DatumWriterBase</a>)
> </font></dt><dd>
> <dl>
> <dt><font face="helvetica, arial"><a  
> href="avro.reflectio.html#ReflectDatumWriter">ReflectDatumWriter</a>
> </font></dt></dl>
> </dd>
> </dl>
> <p>
> <table width="100%" cellspacing=0 cellpadding=2 border=0  
> summary="section">
> <tr bgcolor="#ffc8d8">
> <td colspan=3 valign=bottom>&nbsp;<br>
> <font color="#000000" face="helvetica, arial"><a  
> name="ReflectDatumReader">class <strong>ReflectDatumReader</strong></ 
> a>(<a  
> href="avro.genericio.html#DatumReader">avro.genericio.DatumReader</ 
> a>)</font></td></tr>
>
>
> = 
> ======================================================================
> ==./doc/api/py/avro.schema.html
> = 
> ======================================================================
>
> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
> <html><head><title>Python: module avro.schema</title>
> </head><body bgcolor="#f0f0f8">
>
> <table width="100%" cellspacing=0 cellpadding=2 border=0  
> summary="heading">
> <tr bgcolor="#7799ee">
> <td valign=bottom>&nbsp;<br>
> <font color="#ffffff" face="helvetica,  
> arial">&nbsp;<br><big><big><strong><a href="avro.html"><font  
> color="#ffffff">avro</font></a>.schema</strong></big></big></font></td
>> <td align=right valign=bottom
>> <font color="#ffffff" face="helvetica, arial"><a href=".">index</ 
>> a><br><a href="file:/home/cutting/src/avro/test/src/py/avro/ 
>> schema.py">/home/cutting/src/avro/test/src/py/avro/schema.py</a></ 
>> font></td></tr></table>
>    <p><tt>Contains&nbsp;the&nbsp;<a href="#Schema">Schema</ 
> a>&nbsp;classes.<br>
> A&nbsp;schema&nbsp;may&nbsp;be&nbsp;one&nbsp;of:<br>
> &nbsp 
> ;&nbsp 
> ;An 
> &nbsp 
> ;record 
> ,&nbsp 
> ;mapping 
> &nbsp;field&nbsp;names&nbsp;to&nbsp;field&nbsp;value&nbsp;data;<br>
> &nbsp 
> ;&nbsp 
> ;An 
> &nbsp 
> ;enum 
> ,&nbsp 
> ;containing 
> &nbsp;one&nbsp;of&nbsp;a&nbsp;small&nbsp;set&nbsp;of&nbsp;symbols;<br>
> &nbsp 
> ;&nbsp 
> ;An 
> &nbsp 
> ;array 
> &nbsp 
> ;of&nbsp;values,&nbsp;all&nbsp;of&nbsp;the&nbsp;same&nbsp;schema;<br>
> &nbsp;&nbsp;A&nbsp;map&nbsp;containing&nbsp;string/ 
> value 
> &nbsp;pairs,&nbsp;each&nbsp;of&nbsp;a&nbsp;declared&nbsp;schema;<br>
> &nbsp;&nbsp;A&nbsp;union&nbsp;of&nbsp;other&nbsp;schemas;<br>
> &nbsp;&nbsp;A&nbsp;fixed&nbsp;sized&nbsp;binary&nbsp;<a  
> href="__builtin__.html#object">object</a>;<br>
> &nbsp;&nbsp;A&nbsp;unicode&nbsp;string;<br>
> &nbsp;&nbsp;A&nbsp;sequence&nbsp;of&nbsp;bytes;<br>
> &nbsp;&nbsp;A&nbsp;32-bit&nbsp;signed&nbsp;int;<br>
> &nbsp;&nbsp;A&nbsp;64-bit&nbsp;signed&nbsp;long;<br>
> &nbsp;&nbsp;A&nbsp;32-bit&nbsp;floating-point&nbsp;float;<br>
> &nbsp;&nbsp;A&nbsp;64-bit&nbsp;floating-point&nbsp;double;&nbsp;or<br>
> &nbsp;&nbsp;A&nbsp;boolean.</tt></p>
> <p>
> <table width="100%" cellspacing=0 cellpadding=2 border=0  
> summary="section">
> <tr bgcolor="#aa55cc">
> <td colspan=3 valign=bottom>&nbsp;<br>
> <font color="#ffffff" face="helvetica, arial"><big><strong>Modules</ 
> strong></big></font></td></tr>
>
> <tr><td bgcolor="#aa55cc"><tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</ 
> tt></td><td>&nbsp;</td>
> <td width="100%"><table width="100%" summary="list"><tr><td  
> width="25%" valign=top><a href="cStringIO.html">cStringIO</a><br>
> </td><td width="25%" valign=top><a href="odict.html">odict</a><br>
> </td><td width="25%" valign=top><a  
> href="simplejson.html">simplejson</a><br>
> </td><td width="25%" valign=top></td></tr></table></td></tr></ 
> table><p>
> <table width="100%" cellspacing=0 cellpadding=2 border=0  
> summary="section">
> <tr bgcolor="#ee77aa">
> <td colspan=3 valign=bottom>&nbsp;<br>
> <font color="#ffffff" face="helvetica, arial"><big><strong>Classes</ 
> strong></big></font></td></tr>
>
> <tr><td bgcolor="#ee77aa"><tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</ 
> tt></td><td>&nbsp;</td>
> <td width="100%"><dl>
> <dt><font face="helvetica, arial"><a  
> href="__builtin__.html#object">__builtin__.object</a>
> </font></dt><dd>
> <dl>
> <dt><font face="helvetica, arial"><a  
> href="avro.schema.html#Field">Field</a>
> </font></dt><dt><font face="helvetica, arial"><a  
> href="avro.schema.html#Schema">Schema</a>
> </font></dt><dd>
>
> = 
> ======================================================================
> ==./doc/skin/note.txt
> = 
> ======================================================================
> Notes for developer:
>
> --Legend-------------------
> TODO -> blocker
> DONE -> blocker
> ToDo -> enhancement bug
> done -> enhancement bug
>
> --Issues-------------------
> - the corner images should be rendered through svg with the header  
> color.
> -> DONE
> -> ToDo: get rid of the images and use only divs!
>
> - the menu points should be displayed "better".
> -> DONE
> -- Use the krysalis-site menu approach for the overall menu display.
> -> DONE
> -- Use the old lenya innermenu approch to further enhance the menu .
> -> DONE
>
> - the content area needs some attention.
> -> DONE
> -- introduce the heading scheme from krysalis (<headings type="clean| 
> box|underlined"/>)
> -> DONE
> -> ToDo: make box with round corners
> -> done: make underlined with variable border height
> -> ToDo: make underline with bottom round corner
> -- introduce the toc for each html-page
> -> DONE
> -- introduce the external-link-images.
> -> DONE
>
> - the publish note should be where now only a border is.
> Like <div id="published"/>
> -> DONE
> , but make it configurable.
> -> DONE
> - footer needs some attention
> -> DONE
> -- the footer do not have the color profile! Enable it!
> -> DONE
> -- the footer should as well contain a feedback link. 
> See http://issues.apache.org/eyebrowse/ReadMsg?listName=forrest-user@xml.apache.org&msgNo=71
> -> DONE
>
> - introduce credits alternativ location
> -> DONE
>
> - border for published / breadtrail / menu /tab divs
> -> ToDo
>
> = 
> ======================================================================
> ==./doc/skin/profile.css
> = 
> ======================================================================
>
>
> /* ==================== aural ============================ */
>
> @media aural {
>  h1, h2, h3, h4, h5, h6 { voice-family: paul, male; stress: 20;  
> richness: 90 }
>  h1 { pitch: x-low; pitch-range: 90 }
>  h2 { pitch: x-low; pitch-range: 80 }
>  h3 { pitch: low; pitch-range: 70 }
>  h4 { pitch: medium; pitch-range: 60 }
>  h5 { pitch: medium; pitch-range: 50 }
>  h6 { pitch: medium; pitch-range: 40 }
>  li, dt, dd { pitch: medium; richness: 60 }
>  dt { stress: 80 }
>  pre, code, tt { pitch: medium; pitch-range: 0; stress: 0; richness:  
> 80 }
>  em { pitch: medium; pitch-range: 60; stress: 60; richness: 50 }
>  strong { pitch: medium; pitch-range: 60; stress: 90; richness: 90 }
>  dfn { pitch: high; pitch-range: 60; stress: 60 }
>  s, strike { richness: 0 }
>  i { pitch: medium; pitch-range: 60; stress: 60; richness: 50 }
>  b { pitch: medium; pitch-range: 60; stress: 90; richness: 90 }
>  u { richness: 0 }
>
>  :link { voice-family: harry, male }
>  :visited { voice-family: betty, female }
>  :active { voice-family: betty, female; pitch-range: 80; pitch: x- 
> high }
> }
>
> a.external  {
>  padding: 0 20px 0px 0px;
> 	display:inline;
>  background-repeat: no-repeat;
> 	background-position: center right;
> 	background-image: url(images/external-link.gif);
> }
>
> #top          { background-color: #FFFFFF;}
>
> #top .header .current { background-color: #4C6C8F;}
> #top .header .current a:link {  color: #ffffff;  }
> #top .header .current a:visited { color: #ffffff; }
> #top .header .current a:hover { color: #ffffff; }
>
> #tabs li      { background-color: #E5E4D9 ;}
> #tabs li a:link {  color: #000000;  }
> #tabs li a:visited { color: #000000; }
> #tabs li a:hover { color: #000000; }
>
> #level2tabs a.selected      { background-color: #4C6C8F ;}
> #level2tabs a:link {  color: #ffffff;  }
>
> = 
> ======================================================================
> ==./lib/py/odict.py
> = 
> ======================================================================
> # odict.py
> # An Ordered Dictionary object
> # Copyright (C) 2005 Nicola Larosa, Michael Foord
> # E-mail: nico AT tekNico DOT net, fuzzyman AT voidspace DOT org DOT  
> uk
>
> # This software is licensed under the terms of the BSD license.
> # http://www.voidspace.org.uk/python/license.shtml
> # Basically you're free to copy, modify, distribute and relicense it,
> # So long as you keep a copy of the license with it.
>
> # Documentation at http://www.voidspace.org.uk/python/odict.html
> # For information about bugfixes, updates and support, please join the
> # Pythonutils mailing list:
> # http://groups.google.com/group/pythonutils/
> # Comments, suggestions and bug reports welcome.
>
> """A dict that keeps keys in insertion order"""
> from __future__ import generators
>
> __author__ = ('Nicola Larosa <ni...@m-tekNico.net>,'
>    'Michael Foord <fuzzyman AT voidspace DOT org DOT uk>')
>
> __docformat__ = "restructuredtext en"
>
> __revision__ = '$Id: odict.py 129 2005-09-12 18:15:28Z teknico $'
>
> __version__ = '0.2.2'
>
> __all__ = ['OrderedDict', 'SequenceOrderedDict']
>
> import sys
> INTP_VER = sys.version_info[:2]
> if INTP_VER < (2, 2):
>    raise RuntimeError("Python v.2.2 or later required")
>
> import types, warnings
>
> class OrderedDict(dict):
>    """
>    A class of dictionary that keeps the insertion order of keys.
>
>    All appropriate methods return keys, items, or values in an  
> ordered way.
>
>    All normal dictionary methods are available. Update and  
> comparison is
>    restricted to other OrderedDict objects.
>
>    Various sequence methods are available, including the ability to  
> explicitly
>    mutate the key ordering.
>
>    __contains__ tests:
>
> = 
> ======================================================================
> ==./lib/py/simplejson/__init__.py
> = 
> ======================================================================
> r"""JSON (JavaScript Object Notation) <http://json.org> is a subset of
> JavaScript syntax (ECMA-262 3rd edition) used as a lightweight data
> interchange format.
>
> :mod:`simplejson` exposes an API familiar to users of the standard  
> library
> :mod:`marshal` and :mod:`pickle` modules. It is the externally  
> maintained
> version of the :mod:`json` library contained in Python 2.6, but  
> maintains
> compatibility with Python 2.4 and Python 2.5 and (currently) has
> significant performance advantages, even without using the optional C
> extension for speedups.
>
> Encoding basic Python object hierarchies::
>
>>>> import simplejson as json
>>>> json.dumps(['foo', {'bar': ('baz', None, 1.0, 2)}])
>    '["foo", {"bar": ["baz", null, 1.0, 2]}]'
>>>> print json.dumps("\"foo\bar")
>    "\"foo\bar"
>>>> print json.dumps(u'\u1234')
>    "\u1234"
>>>> print json.dumps('\\')
>    "\\"
>>>> print json.dumps({"c": 0, "b": 0, "a": 0}, sort_keys=True)
>    {"a": 0, "b": 0, "c": 0}
>>>> from StringIO import StringIO
>>>> io = StringIO()
>>>> json.dump(['streaming API'], io)
>>>> io.getvalue()
>    '["streaming API"]'
>
> Compact encoding::
>
>>>> import simplejson as json
>>>> json.dumps([1,2,3,{'4': 5, '6': 7}], separators=(',',':'))
>    '[1,2,3,{"4":5,"6":7}]'
>
> Pretty printing::
>
>>>> import simplejson as json
>>>> s = json.dumps({'4': 5, '6': 7}, sort_keys=True, indent=4)
>>>> print '\n'.join([l.rstrip() for l in  s.splitlines()])
>    {
>        "4": 5,
>        "6": 7
>    }
>
> Decoding JSON::
>
>>>> import simplejson as json
>>>> obj = [u'foo', {u'bar': [u'baz', None, 1.0, 2]}]
>
> = 
> ======================================================================
> ==./lib/py/simplejson/_speedups.c
> = 
> ======================================================================
> #include "Python.h"
> #include "structmember.h"
> #if PY_VERSION_HEX < 0x02060000 && !defined(Py_TYPE)
> #define Py_TYPE(ob)     (((PyObject*)(ob))->ob_type)
> #endif
> #if PY_VERSION_HEX < 0x02050000 && !defined(PY_SSIZE_T_MIN)
> typedef int Py_ssize_t;
> #define PY_SSIZE_T_MAX INT_MAX
> #define PY_SSIZE_T_MIN INT_MIN
> #define PyInt_FromSsize_t PyInt_FromLong
> #define PyInt_AsSsize_t PyInt_AsLong
> #endif
> #ifndef Py_IS_FINITE
> #define Py_IS_FINITE(X) (!Py_IS_INFINITY(X) && !Py_IS_NAN(X))
> #endif
>
> #ifdef __GNUC__
> #define UNUSED __attribute__((__unused__))
> #else
> #define UNUSED
> #endif
>
> #define DEFAULT_ENCODING "utf-8"
>
> #define PyScanner_Check(op) PyObject_TypeCheck(op, &PyScannerType)
> #define PyScanner_CheckExact(op) (Py_TYPE(op) == &PyScannerType)
> #define PyEncoder_Check(op) PyObject_TypeCheck(op, &PyEncoderType)
> #define PyEncoder_CheckExact(op) (Py_TYPE(op) == &PyEncoderType)
>
> static PyTypeObject PyScannerType;
> static PyTypeObject PyEncoderType;
>
> typedef struct _PyScannerObject {
>    PyObject_HEAD
>    PyObject *encoding;
>    PyObject *strict;
>    PyObject *object_hook;
>    PyObject *parse_float;
>    PyObject *parse_int;
>    PyObject *parse_constant;
> } PyScannerObject;
>
> static PyMemberDef scanner_members[] = {
>    {"encoding", T_OBJECT, offsetof(PyScannerObject, encoding),  
> READONLY, "encoding"},
>    {"strict", T_OBJECT, offsetof(PyScannerObject, strict), READONLY,  
> "strict"},
>    {"object_hook", T_OBJECT, offsetof(PyScannerObject, object_hook),  
> READONLY, "object_hook"},
>    {"parse_float", T_OBJECT, offsetof(PyScannerObject, parse_float),  
> READONLY, "parse_float"},
>    {"parse_int", T_OBJECT, offsetof(PyScannerObject, parse_int),  
> READONLY, "parse_int"},
>    {"parse_constant", T_OBJECT, offsetof(PyScannerObject,  
> parse_constant), READONLY, "parse_constant"},
>    {NULL}
>
> = 
> ======================================================================
> ==./lib/py/simplejson/decoder.py
> = 
> ======================================================================
> """Implementation of JSONDecoder
> """
> import re
> import sys
> import struct
>
> from simplejson.scanner import make_scanner
> try:
>    from simplejson._speedups import scanstring as c_scanstring
> except ImportError:
>    c_scanstring = None
>
> __all__ = ['JSONDecoder']
>
> FLAGS = re.VERBOSE | re.MULTILINE | re.DOTALL
>
> def _floatconstants():
>    _BYTES = '7FF80000000000007FF0000000000000'.decode('hex')
>    if sys.byteorder != 'big':
>        _BYTES = _BYTES[:8][::-1] + _BYTES[8:][::-1]
>    nan, inf = struct.unpack('dd', _BYTES)
>    return nan, inf, -inf
>
> NaN, PosInf, NegInf = _floatconstants()
>
>
> def linecol(doc, pos):
>    lineno = doc.count('\n', 0, pos) + 1
>    if lineno == 1:
>        colno = pos
>    else:
>        colno = pos - doc.rindex('\n', 0, pos)
>    return lineno, colno
>
>
> def errmsg(msg, doc, pos, end=None):
>    # Note that this function is called from _speedups
>    lineno, colno = linecol(doc, pos)
>    if end is None:
>        #fmt = '{0}: line {1} column {2} (char {3})'
>        #return fmt.format(msg, lineno, colno, pos)
>        fmt = '%s: line %d column %d (char %d)'
>        return fmt % (msg, lineno, colno, pos)
>    endlineno, endcolno = linecol(doc, end)
>    #fmt = '{0}: line {1} column {2} - line {3} column {4} (char {5}  
> - {6})'
>    #return fmt.format(msg, lineno, colno, endlineno, endcolno, pos,  
> end)
>    fmt = '%s: line %d column %d - line %d column %d (char %d - %d)'
>    return fmt % (msg, lineno, colno, endlineno, endcolno, pos, end)
>
>
>
> = 
> ======================================================================
> ==./lib/py/simplejson/encoder.py
> = 
> ======================================================================
> """Implementation of JSONEncoder
> """
> import re
>
> try:
>    from simplejson._speedups import encode_basestring_ascii as  
> c_encode_basestring_ascii
> except ImportError:
>    c_encode_basestring_ascii = None
> try:
>    from simplejson._speedups import make_encoder as c_make_encoder
> except ImportError:
>    c_make_encoder = None
>
> ESCAPE = re.compile(r'[\x00-\x1f\\"\b\f\n\r\t]')
> ESCAPE_ASCII = re.compile(r'([\\"]|[^\ -~])')
> HAS_UTF8 = re.compile(r'[\x80-\xff]')
> ESCAPE_DCT = {
>    '\\': '\\\\',
>    '"': '\\"',
>    '\b': '\\b',
>    '\f': '\\f',
>    '\n': '\\n',
>    '\r': '\\r',
>    '\t': '\\t',
> }
> for i in range(0x20):
>    #ESCAPE_DCT.setdefault(chr(i), '\\u{0:04x}'.format(i))
>    ESCAPE_DCT.setdefault(chr(i), '\\u%04x' % (i,))
>
> # Assume this produces an infinity on all machines (probably not  
> guaranteed)
> INFINITY = float('1e66666')
> FLOAT_REPR = repr
>
> def encode_basestring(s):
>    """Return a JSON representation of a Python string
>
>    """
>    def replace(match):
>        return ESCAPE_DCT[match.group(0)]
>    return '"' + ESCAPE.sub(replace, s) + '"'
>
>
> def py_encode_basestring_ascii(s):
>    """Return an ASCII-only JSON representation of a Python string
>
>    """
>    if isinstance(s, str) and HAS_UTF8.search(s) is not None:
>        s = s.decode('utf-8')
>    def replace(match):
>        s = match.group(0)
>
> = 
> ======================================================================
> ==./lib/py/simplejson/scanner.py
> = 
> ======================================================================
> """JSON token scanner
> """
> import re
> try:
>    from simplejson._speedups import make_scanner as c_make_scanner
> except ImportError:
>    c_make_scanner = None
>
> __all__ = ['make_scanner']
>
> NUMBER_RE = re.compile(
>    r'(-?(?:0|[1-9]\d*))(\.\d+)?([eE][-+]?\d+)?',
>    (re.VERBOSE | re.MULTILINE | re.DOTALL))
>
> def py_make_scanner(context):
>    parse_object = context.parse_object
>    parse_array = context.parse_array
>    parse_string = context.parse_string
>    match_number = NUMBER_RE.match
>    encoding = context.encoding
>    strict = context.strict
>    parse_float = context.parse_float
>    parse_int = context.parse_int
>    parse_constant = context.parse_constant
>    object_hook = context.object_hook
>
>    def _scan_once(string, idx):
>        try:
>            nextchar = string[idx]
>        except IndexError:
>            raise StopIteration
>
>        if nextchar == '"':
>            return parse_string(string, idx + 1, encoding, strict)
>        elif nextchar == '{':
>            return parse_object((string, idx + 1), encoding, strict,  
> _scan_once, object_hook)
>        elif nextchar == '[':
>            return parse_array((string, idx + 1), _scan_once)
>        elif nextchar == 'n' and string[idx:idx + 4] == 'null':
>            return None, idx + 4
>        elif nextchar == 't' and string[idx:idx + 4] == 'true':
>            return True, idx + 4
>        elif nextchar == 'f' and string[idx:idx + 5] == 'false':
>            return False, idx + 5
>
>        m = match_number(string, idx)
>        if m is not None:
>            integer, frac, exp = m.groups()
>            if frac or exp:
>                res = parse_float(integer + (frac or '') + (exp or ''))
>
> = 
> ======================================================================
> ==./lib/py/simplejson/tool.py
> = 
> ======================================================================
> r"""Command-line tool to validate and pretty-print JSON
>
> Usage::
>
>    $ echo '{"json":"obj"}' | python -m simplejson.tool
>    {
>        "json": "obj"
>    }
>    $ echo '{ 1.2:3.4}' | python -m simplejson.tool
>    Expecting property name: line 1 column 2 (char 2)
>
> """
> import sys
> import simplejson
>
> def main():
>    if len(sys.argv) == 1:
>        infile = sys.stdin
>        outfile = sys.stdout
>    elif len(sys.argv) == 2:
>        infile = open(sys.argv[1], 'rb')
>        outfile = sys.stdout
>    elif len(sys.argv) == 3:
>        infile = open(sys.argv[1], 'rb')
>        outfile = open(sys.argv[2], 'wb')
>    else:
>        raise SystemExit(sys.argv[0] + " [infile [outfile]]")
>    try:
>        obj = simplejson.load(infile)
>    except ValueError, e:
>        raise SystemExit(e)
>    simplejson.dump(obj, outfile, sort_keys=True, indent=4)
>    outfile.write('\n')
>
>
> if __name__ == '__main__':
>    main()
>
> = 
> ======================================================================
> ==./src/c/.gitignore
> = 
> ======================================================================
> .deps
> .libs
> Makefile
> Makefile.in
> *.la
> *.lo
> *.o
> configure
> stamp-h1
> aclocal.m4
> config
> libtool
> config.status
> config.log
> config.h.in
> config.h
> autom4te.cache
> test_avro_*[!.][!c]
> test_json_*[!.][!c]
> INSTALL
> lemon
> avro_schema.c
> avro_schema.h
> avro_schema.out
> json_schema.c
> json_schema.h
> json_schema.out
> trace.txt
> *.swp
>
> = 
> ======================================================================
> ==./src/c/Makefile
> = 
> ======================================================================
> # Makefile.in generated by automake 1.10.2 from Makefile.am.
> # Makefile.  Generated from Makefile.in by configure.
>
> # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
> # 2003, 2004, 2005, 2006, 2007, 2008  Free Software Foundation, Inc.
> # This Makefile.in is free software; the Free Software Foundation
> # gives unlimited permission to copy and/or distribute it,
> # with or without modifications, as long as this notice is preserved.
>
> # This program is distributed in the hope that it will be useful,
> # but WITHOUT ANY WARRANTY, to the extent permitted by law; without
> # even the implied warranty of MERCHANTABILITY or FITNESS FOR A
> # PARTICULAR PURPOSE.
>
>
>
>
>
>
> pkgdatadir = $(datadir)/avro-c
> pkglibdir = $(libdir)/avro-c
> pkgincludedir = $(includedir)/avro-c
> am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
> install_sh_DATA = $(install_sh) -c -m 644
> install_sh_PROGRAM = $(install_sh) -c
> install_sh_SCRIPT = $(install_sh) -c
> INSTALL_HEADER = $(INSTALL_DATA)
> transform = $(program_transform_name)
> NORMAL_INSTALL = :
> PRE_INSTALL = :
> POST_INSTALL = :
> NORMAL_UNINSTALL = :
> PRE_UNINSTALL = :
> POST_UNINSTALL = :
> build_triplet = i686-pc-linux-gnu
> host_triplet = i686-pc-linux-gnu
> check_PROGRAMS = test_avro_zigzag$(EXEEXT) test_avro_string$(EXEEXT) \
> 	test_avro_bytes$(EXEEXT) test_avro_raw$(EXEEXT) \
> 	test_avro_float_double$(EXEEXT) test_json_parser$(EXEEXT)
> noinst_PROGRAMS = lemon$(EXEEXT)
> subdir = .
> DIST_COMMON = README $(am__configure_deps) $(include_HEADERS) \
> 	$(srcdir)/Makefile.am $(srcdir)/Makefile.in \
> 	$(srcdir)/config.h.in $(top_srcdir)/configure AUTHORS COPYING \
> 	ChangeLog INSTALL NEWS config/config.guess config/config.sub \
> 	config/depcomp config/install-sh config/ltmain.sh \
> 	config/missing
> ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
> am__aclocal_m4_deps = $(top_srcdir)/configure.in
> am__configure_deps = $(am__aclocal_m4_deps) $ 
> (CONFIGURE_DEPENDENCIES) \
>
> = 
> ======================================================================
> ==./src/c/Makefile.am
> = 
> ======================================================================
> AM_CFLAGS=$(APR_CFLAGS) $(APR_INCLUDES) $(APU_INCLUDES) -Wall - 
> pedantic
> C_DOCS_OUTPUT ?= "docs/dox"
>
> EXTRA_DIST=json_schema.y
>
> include_HEADERS = avro.h
>
> lib_LTLIBRARIES = libavro.la
> libavro_la_SOURCES = avro_memory.c avro_socket.c avro_file.c \
> dump.c dump.h avro.c avro_string.c avro_zigzag.c error.c error.h  
> avro_raw.c \
> avro_double.c json_schema.h json_schema.c json_tokenizer.c json.c  
> json.h
>
> check_PROGRAMS=test_avro_zigzag test_avro_string test_avro_bytes  
> test_avro_raw \
> test_avro_float_double test_json_parser
>
> noinst_PROGRAMS=lemon
> lemon_SOURCES=lemon.c
>
> json_schema.h json_schema.c: lemon json_schema.y
> 	./lemon ./json_schema.y
> 	touch json_schema.c json_schema.h
>
> test_avro_zigzag_SOURCE=test_avro_zigzag.c
> test_avro_zigzag_LDADD=$(APR_LIBS) $(APU_LIBS) $(top_builddir)/ 
> libavro.la
>
> test_avro_string_SOURCE=test_avro_string.c
> test_avro_string_LDADD=$(APR_LIBS) $(APU_LIBS) $(top_builddir)/ 
> libavro.la
>
> test_avro_bytes_SOURCE=test_avro_bytes.c
> test_avro_bytes_LDADD=$(APR_LIBS) $(APU_LIBS) $(top_builddir)/ 
> libavro.la
>
> test_avro_raw_SOURCE=test_avro_raw.c
> test_avro_raw_LDADD=$(APR_LIBS) $(APU_LIBS) $(top_builddir)/libavro.la
>
> test_avro_float_double_SOURCE=test_avro_float_double.c
> test_avro_float_double_LDADD=$(APR_LIBS) $(APU_LIBS) $(top_builddir)/ 
> libavro.la
>
> test_json_parser=test_json_parser.c
> test_json_parser_LDADD=$(APR_LIBS) $(APU_LIBS) $(top_builddir)/ 
> libavro.la
>
> TESTS=$(check_PROGRAMS)
>
> # Some files should not be run through indent
> pretty_files := $(shell echo *.[c,h]| sed s/lempar.c// | sed s/ 
> avro.h// | sed s/lemon.c//)
> pretty:
> 	@indent $(pretty_files)
>
> docs:
> 	@(cat docs/doxygen.conf; echo "OUTPUT_DIRECTORY=$(C_DOCS_OUTPUT)")|  
> doxygen -
>
>
> = 
> ======================================================================
> ==./src/c/Makefile.in
> = 
> ======================================================================
> # Makefile.in generated by automake 1.10.2 from Makefile.am.
> # @configure_input@
>
> # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
> # 2003, 2004, 2005, 2006, 2007, 2008  Free Software Foundation, Inc.
> # This Makefile.in is free software; the Free Software Foundation
> # gives unlimited permission to copy and/or distribute it,
> # with or without modifications, as long as this notice is preserved.
>
> # This program is distributed in the hope that it will be useful,
> # but WITHOUT ANY WARRANTY, to the extent permitted by law; without
> # even the implied warranty of MERCHANTABILITY or FITNESS FOR A
> # PARTICULAR PURPOSE.
>
> @SET_MAKE@
>
>
>
> VPATH = @srcdir@
> pkgdatadir = $(datadir)/@PACKAGE@
> pkglibdir = $(libdir)/@PACKAGE@
> pkgincludedir = $(includedir)/@PACKAGE@
> am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
> install_sh_DATA = $(install_sh) -c -m 644
> install_sh_PROGRAM = $(install_sh) -c
> install_sh_SCRIPT = $(install_sh) -c
> INSTALL_HEADER = $(INSTALL_DATA)
> transform = $(program_transform_name)
> NORMAL_INSTALL = :
> PRE_INSTALL = :
> POST_INSTALL = :
> NORMAL_UNINSTALL = :
> PRE_UNINSTALL = :
> POST_UNINSTALL = :
> build_triplet = @build@
> host_triplet = @host@
> check_PROGRAMS = test_avro_zigzag$(EXEEXT) test_avro_string$(EXEEXT) \
> 	test_avro_bytes$(EXEEXT) test_avro_raw$(EXEEXT) \
> 	test_avro_float_double$(EXEEXT) test_json_parser$(EXEEXT)
> noinst_PROGRAMS = lemon$(EXEEXT)
> subdir = .
> DIST_COMMON = README $(am__configure_deps) $(include_HEADERS) \
> 	$(srcdir)/Makefile.am $(srcdir)/Makefile.in \
> 	$(srcdir)/config.h.in $(top_srcdir)/configure AUTHORS COPYING \
> 	ChangeLog INSTALL NEWS config/config.guess config/config.sub \
> 	config/depcomp config/install-sh config/ltmain.sh \
> 	config/missing
> ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
> am__aclocal_m4_deps = $(top_srcdir)/configure.in
> am__configure_deps = $(am__aclocal_m4_deps) $ 
> (CONFIGURE_DEPENDENCIES) \
>
> = 
> ======================================================================
> ==./src/c/avro.c
> = 
> ======================================================================
> #include "avro.h"
>
> avro_status_t
> avro_null (void)
> {
>  /* Do nothing */
>  return AVRO_OK;
> }
>
> avro_status_t
> avro_bool (AVRO * avro, bool_t * bp)
> {
>  avro_status_t status;
>  char b;
>  if (!avro || !bp)
>    {
>      return AVRO_FAILURE;
>    }
>  switch (avro->a_op)
>    {
>    case AVRO_ENCODE:
>      {
> 	b = *bp ? 1 : 0;
> 	return AVRO_PUTBYTES (avro, &b, 1);
>      }
>    case AVRO_DECODE:
>      {
> 	status = AVRO_GETBYTES (avro, &b, 1);
> 	CHECK_ERROR (status);
> 	*bp = b ? 1 : 0;
>      }
>    default:
>      return AVRO_FAILURE;
>    }
>  return AVRO_OK;
> }
>
> = 
> ======================================================================
> ==./src/c/avro.h
> = 
> ======================================================================
> #ifndef AVRO_H
> #define AVRO_H
>
> /**
> @file avro.h
> @brief AVRO API
> */
>
> #include <stdarg.h>
> #include <stdint.h>
> #include <sys/types.h>
> #include <apr_pools.h>
> #include <apr_file_io.h>
> #include <apr_network_io.h>
>
> #ifdef __cplusplus
> extern "C" {
> #endif
>
> /**
> @defgroup AVRO Avro C API
> @{
> */
>
> /**
> * @defgroup Handle_Routines AVRO Handles
> * @ingroup AVRO
> * @{
> */
>
> /**
> Avro operation enum.
> Enum for discriminating whether an Avro handle is for encoding or  
> decoding data.
> */
> enum avro_op
> {
>  AVRO_ENCODE = 0, /**< Marks a handle as encoding Avro data */
>  AVRO_DECODE = 1  /**< Marks a handle as decoding Avro data */
> };
> typedef enum avro_op avro_op;
>
> /**
> Avro status enum.
> Enum used by Avro functions to return state.
> @todo expand the number of states
> */
> enum avro_status_t
> {
>  AVRO_OK = 0, /**< Function success */
>  AVRO_FAILURE = 1 /**< Function failure */
>
> = 
> ======================================================================
> ==./src/c/avro.lo
> = 
> ======================================================================
> # avro.lo - a libtool object file
> # Generated by ltmain.sh (GNU libtool) 2.2.6 Debian-2.2.6a-1ubuntu1
> #
> # Please DO NOT delete this file!
> # It is necessary for linking the library.
>
> # Name of the PIC object.
> pic_object='.libs/avro.o'
>
> # Name of the non-PIC object
> non_pic_object='avro.o'
>
>
> = 
> ======================================================================
> ==./src/c/avro_array.c
> = 
> ======================================================================
> #include "avro.h"
>
> avro_status_t
> avro_array (AVRO * avro, caddr_t * addrp, uint32_t * sizep,
> 	    uint32_t maxsize, uint32_t elsize, avroproc_t elproc)
> {
>
>
>  return AVRO_OK;
> }
>
> = 
> ======================================================================
> ==./src/c/avro_double.c
> = 
> ======================================================================
> #include "avro.h"
>
> avro_status_t
> avro_float (AVRO * avro, float *fp)
> {
>  if (!avro || !fp)
>    {
>      return AVRO_FAILURE;
>    }
>  switch (avro->a_op)
>    {
>    case AVRO_ENCODE:
>      return avro_putint32_raw (avro, *(int32_t *) fp);
>    case AVRO_DECODE:
>      return avro_getint32_raw (avro, (int32_t *) fp);
>    default:
>      return AVRO_FAILURE;
>    }
>  return AVRO_OK;
> }
>
> avro_status_t
> avro_double (AVRO * avro, double *dp)
> {
>  if (!avro || !dp)
>    {
>      return AVRO_FAILURE;
>    }
>  switch (avro->a_op)
>    {
>    case AVRO_ENCODE:
>      return avro_putint64_raw (avro, *(int64_t *) dp);
>    case AVRO_DECODE:
>      return avro_getint64_raw (avro, (int64_t *) dp);
>    default:
>      return AVRO_FAILURE;
>    }
>  return AVRO_OK;
> }
>
> = 
> ======================================================================
> ==./src/c/avro_double.lo
> = 
> ======================================================================
> # avro_double.lo - a libtool object file
> # Generated by ltmain.sh (GNU libtool) 2.2.6 Debian-2.2.6a-1ubuntu1
> #
> # Please DO NOT delete this file!
> # It is necessary for linking the library.
>
> # Name of the PIC object.
> pic_object='.libs/avro_double.o'
>
> # Name of the non-PIC object
> non_pic_object='avro_double.o'
>
>
> = 
> ======================================================================
> ==./src/c/avro_file.c
> = 
> ======================================================================
> #include "avro.h"
> #include <string.h>
> #include "dump.h"
>
> /**
> @todo We could likely speedup file i/o by reading ahead
> */
> static avro_status_t
> file_get_bytes (struct AVRO *avro, caddr_t addr, const int64_t len)
> {
>  apr_status_t apr_status;
>  if ((avro->len - avro->used) < len || len < 0)
>    {
>      return AVRO_FAILURE;
>    }
>  if (len > 0)
>    {
>      apr_status =
> 	apr_file_read_full (avro->file, addr, (apr_size_t) len, NULL);
>      if (apr_status != APR_SUCCESS)
> 	{
> 	  return AVRO_FAILURE;
> 	}
>    }
>  return AVRO_OK;
> }
>
> static avro_status_t
> file_put_bytes (struct AVRO *avro, const char *addr, const int64_t  
> len)
> {
>  apr_status_t apr_status;
>  if ((avro->len - avro->used) < len || len < 0)
>    {
>      return AVRO_FAILURE;
>    }
>  if (len > 0)
>    {
>      apr_status =
> 	apr_file_write_full (avro->file, addr, (apr_size_t) len, NULL);
>      if (apr_status != APR_SUCCESS)
> 	{
> 	  return AVRO_FAILURE;
> 	}
>    }
>  return AVRO_OK;
> }
>
> static const struct avro_ops avro_file_ops = {
>  file_get_bytes,
>  file_put_bytes
>
> = 
> ======================================================================
> ==./src/c/avro_file.lo
> = 
> ======================================================================
> # avro_file.lo - a libtool object file
> # Generated by ltmain.sh (GNU libtool) 2.2.6 Debian-2.2.6a-1ubuntu1
> #
> # Please DO NOT delete this file!
> # It is necessary for linking the library.
>
> # Name of the PIC object.
> pic_object='.libs/avro_file.o'
>
> # Name of the non-PIC object
> non_pic_object='avro_file.o'
>
>
> = 
> ======================================================================
> ==./src/c/avro_memory.c
> = 
> ======================================================================
> #include "avro.h"
> #include <string.h>
> #include "dump.h"
>
> static avro_status_t
> memory_get_bytes (struct AVRO *avro, caddr_t addr, const int64_t len)
> {
>  if ((avro->len - avro->used) < len || len < 0)
>    {
>      return AVRO_FAILURE;
>    }
>  if (len > 0)
>    {
>      memcpy (addr, avro->addr + avro->used, len);
>      avro->used += len;
>    }
>  return AVRO_OK;
> }
>
> static avro_status_t
> memory_put_bytes (struct AVRO *avro, const char *addr, const int64_t  
> len)
> {
>  if ((avro->len - avro->used) < len || len < 0)
>    {
>      return AVRO_FAILURE;
>    }
>  if (len > 0)
>    {
>      memcpy (avro->addr + avro->used, addr, len);
>      avro->used += len;
>    }
>  return AVRO_OK;
> }
>
> static const struct avro_ops avro_memory_ops = {
>  memory_get_bytes,
>  memory_put_bytes
> };
>
> avro_status_t
> avro_create_memory (AVRO * avro, apr_pool_t * pool, caddr_t addr,  
> int64_t len,
> 		    avro_op op)
> {
>  if (!avro || !pool || !addr || len <= 0)
>    {
>      return AVRO_FAILURE;
>    }
>  avro->pool = pool;
>  avro->a_op = op;
>  avro->a_ops = (struct avro_ops *) &avro_memory_ops;
>
> = 
> ======================================================================
> ==./src/c/avro_memory.lo
> = 
> ======================================================================
> # avro_memory.lo - a libtool object file
> # Generated by ltmain.sh (GNU libtool) 2.2.6 Debian-2.2.6a-1ubuntu1
> #
> # Please DO NOT delete this file!
> # It is necessary for linking the library.
>
> # Name of the PIC object.
> pic_object='.libs/avro_memory.o'
>
> # Name of the non-PIC object
> non_pic_object='avro_memory.o'
>
>
> = 
> ======================================================================
> ==./src/c/avro_raw.c
> = 
> ======================================================================
> #include "avro.h"
>
> avro_status_t
> avro_getint32_raw (AVRO * avro, int32_t * value)
> {
>  avro_status_t status;
>  uint8_t buf[4];
>  status = AVRO_GETBYTES (avro, (char *) buf, sizeof (buf));
>  CHECK_ERROR (status);
>  *value = ((int32_t) buf[0] << 0)
>    | ((int32_t) buf[1] << 8)
>    | ((int32_t) buf[2] << 16) | ((int32_t) buf[3] << 24);
>  return AVRO_OK;
> }
>
> avro_status_t
> avro_putint32_raw (AVRO * avro, const int32_t value)
> {
>  uint8_t buf[4];
>  buf[0] = (uint8_t) (value >> 0);
>  buf[1] = (uint8_t) (value >> 8);
>  buf[2] = (uint8_t) (value >> 16);
>  buf[3] = (uint8_t) (value >> 24);
>  return AVRO_PUTBYTES (avro, (char *) buf, sizeof (buf));
> }
>
> avro_status_t
> avro_getint64_raw (AVRO * avro, int64_t * value)
> {
>  avro_status_t status;
>  uint8_t buf[8];
>  status = AVRO_GETBYTES (avro, (char *) buf, sizeof (buf));
>  CHECK_ERROR (status);
>  *value = ((int64_t) buf[0] << 0)
>    | ((int64_t) buf[1] << 8)
>    | ((int64_t) buf[2] << 16)
>    | ((int64_t) buf[3] << 24)
>    | ((int64_t) buf[4] << 32)
>    | ((int64_t) buf[5] << 40)
>    | ((int64_t) buf[6] << 48) | ((int64_t) buf[7] << 56);
>  return AVRO_OK;
> }
>
> avro_status_t
> avro_putint64_raw (AVRO * avro, const int64_t value)
> {
>  uint8_t buf[8];
>  buf[0] = (uint8_t) (value >> 0);
>  buf[1] = (uint8_t) (value >> 8);
>  buf[2] = (uint8_t) (value >> 16);
>
> = 
> ======================================================================
> ==./src/c/avro_raw.lo
> = 
> ======================================================================
> # avro_raw.lo - a libtool object file
> # Generated by ltmain.sh (GNU libtool) 2.2.6 Debian-2.2.6a-1ubuntu1
> #
> # Please DO NOT delete this file!
> # It is necessary for linking the library.
>
> # Name of the PIC object.
> pic_object='.libs/avro_raw.o'
>
> # Name of the non-PIC object
> non_pic_object='avro_raw.o'
>
>
> = 
> ======================================================================
> ==./src/c/avro_socket.c
> = 
> ======================================================================
> #include "avro.h"
> #include <string.h>
> #include "dump.h"
>
> static avro_status_t
> socket_get_bytes (struct AVRO *avro, caddr_t addr, const int64_t len)
> {
>  apr_status_t apr_status;
>  if ((avro->len - avro->used) < len || len < 0)
>    {
>      return AVRO_FAILURE;
>    }
>  if (len > 0)
>    {
>      /* TODO: len can overflow an apr_size_t */
>      apr_size_t bytes_wanted = len;
>      apr_size_t bytes_recvd = 0;
>      while (bytes_recvd < bytes_wanted)
> 	{
> 	  apr_size_t bytes_requested = bytes_wanted - bytes_recvd;
> 	  apr_status = apr_socket_recv (avro->socket, addr,  
> &bytes_requested);
> 	  if (apr_status != APR_SUCCESS)
> 	    {
> 	      return AVRO_FAILURE;
> 	    }
> 	  bytes_recvd += bytes_requested;
> 	}
>    }
>  return AVRO_OK;
> }
>
> static avro_status_t
> socket_put_bytes (struct AVRO *avro, const char *addr, const int64_t  
> len)
> {
>  apr_status_t apr_status;
>  if ((avro->len - avro->used) < len || len < 0)
>    {
>      return AVRO_FAILURE;
>    }
>  if (len > 0)
>    {
>      /* TODO: len can overflow an apr_size_t */
>      apr_size_t bytes_wanted = len;
>      apr_size_t bytes_sent = 0;
>      while (bytes_sent < bytes_wanted)
> 	{
> 	  apr_size_t bytes_requested = bytes_wanted - bytes_sent;
> 	  apr_status = apr_socket_send (avro->socket, addr,  
> &bytes_requested);
> 	  if (apr_status != APR_SUCCESS)
> 	    {
>
> = 
> ======================================================================
> ==./src/c/avro_socket.lo
> = 
> ======================================================================
> # avro_socket.lo - a libtool object file
> # Generated by ltmain.sh (GNU libtool) 2.2.6 Debian-2.2.6a-1ubuntu1
> #
> # Please DO NOT delete this file!
> # It is necessary for linking the library.
>
> # Name of the PIC object.
> pic_object='.libs/avro_socket.o'
>
> # Name of the non-PIC object
> non_pic_object='avro_socket.o'
>
>
> = 
> ======================================================================
> ==./src/c/avro_string.c
> = 
> ======================================================================
> #include "avro.h"
>
> static avro_status_t
> avro_string_bytes_encode (AVRO * avro, char **str, int64_t * len,
> 			  int64_t maxlen)
> {
>  avro_status_t status = avro_int64 (avro, len);
>  CHECK_ERROR (status);
>  return AVRO_PUTBYTES (avro, *str, *len);
> }
>
> static avro_status_t
> avro_string_bytes_decode (AVRO * avro, char **str, int64_t * len,
> 			  int null_terminated, int64_t maxlen)
> {
>  avro_status_t status = avro_int64 (avro, len);
>  CHECK_ERROR (status);
>  if (*len < 0)
>    {
>      return AVRO_FAILURE;
>    }
>  *str = (caddr_t) apr_palloc (avro->pool, *len + null_terminated);
>  if (*str == NULL)
>    {
>      return AVRO_FAILURE;
>    }
>  status = AVRO_GETBYTES (avro, *str, *len);
>  CHECK_ERROR (status);
>  if (null_terminated)
>    {
>      (*str)[*len] = '\0';
>    }
>  return AVRO_OK;
> }
>
> avro_status_t
> avro_string (AVRO * avro, char **str, int64_t maxlen)
> {
>  int64_t len;
>  if (!avro || !str)
>    {
>      return AVRO_FAILURE;
>    }
>  switch (avro->a_op)
>    {
>    case AVRO_ENCODE:
>      len = strlen (*str);
>      return avro_string_bytes_encode (avro, str, &len, maxlen);
>    case AVRO_DECODE:
>      return avro_string_bytes_decode (avro, str, &len, 1, maxlen);
>
> = 
> ======================================================================
> ==./src/c/avro_string.lo
> = 
> ======================================================================
> # avro_string.lo - a libtool object file
> # Generated by ltmain.sh (GNU libtool) 2.2.6 Debian-2.2.6a-1ubuntu1
> #
> # Please DO NOT delete this file!
> # It is necessary for linking the library.
>
> # Name of the PIC object.
> pic_object='.libs/avro_string.o'
>
> # Name of the non-PIC object
> non_pic_object='avro_string.o'
>
>
> = 
> ======================================================================
> ==./src/c/avro_zigzag.c
> = 
> ======================================================================
> #include "avro.h"
>
> /* TODO: add avro_int32 */
>
> static avro_status_t
> avro_int64_encode (AVRO * avro, int64_t * lp)
> {
>  avro_status_t status;
>  int64_t n = *lp;
>  uint8_t b;
>
>  /* move sign to low-order bit */
>  n = (n << 1) ^ (n >> 63);
>  while ((n & ~0x7F) != 0)
>    {
>      b = ((((uint8_t) n) & 0x7F) | 0x80);
>      status = AVRO_PUTBYTES (avro, (caddr_t) & b, 1);
>      CHECK_ERROR (status);
>      n >>= 7;
>    }
>  b = (uint8_t) n;
>  return AVRO_PUTBYTES (avro, (caddr_t) & b, 1);
> }
>
> static avro_status_t
> avro_int64_decode (AVRO * avro, int64_t * lp)
> {
>  avro_status_t status;
>  int64_t value = 0;
>  int offset = 0;
>  uint8_t b;
>  const int MAX_VARINT_BUF_SIZE = 10;
>  do
>    {
>      if (offset == MAX_VARINT_BUF_SIZE)
> 	{
> 	  return AVRO_FAILURE;
> 	}
>      status = AVRO_GETBYTES (avro, &b, 1);
>      CHECK_ERROR (status);
>      value |= (int64_t) (b & 0x7F) << (7 * offset);
>      ++offset;
>    }
>  while (b & 0x80);
>  /* back to two's-complement value; */
>  *lp = (value >> 1) ^ -(value & 1);
>  return AVRO_OK;
> }
>
> /**
>
> = 
> ======================================================================
> ==./src/c/avro_zigzag.lo
> = 
> ======================================================================
> # avro_zigzag.lo - a libtool object file
> # Generated by ltmain.sh (GNU libtool) 2.2.6 Debian-2.2.6a-1ubuntu1
> #
> # Please DO NOT delete this file!
> # It is necessary for linking the library.
>
> # Name of the PIC object.
> pic_object='.libs/avro_zigzag.o'
>
> # Name of the non-PIC object
> non_pic_object='avro_zigzag.o'
>
>
> = 
> ======================================================================
> ==./src/c/config.h
> = 
> ======================================================================
> /* config.h.  Generated from config.h.in by configure.  */
> /* config.h.in.  Generated from configure.in by autoheader.  */
>
> /* Define to 1 if you have the `bzero' function. */
> #define HAVE_BZERO 1
>
> /* Define to 1 if you have the <dlfcn.h> header file. */
> #define HAVE_DLFCN_H 1
>
> /* Define to 1 if you have the <inttypes.h> header file. */
> #define HAVE_INTTYPES_H 1
>
> /* Define to 1 if you have the <libintl.h> header file. */
> #define HAVE_LIBINTL_H 1
>
> /* Define to 1 if you have the <limits.h> header file. */
> #define HAVE_LIMITS_H 1
>
> /* Define to 1 if your system has a GNU libc compatible `malloc'  
> function, and
>   to 0 otherwise. */
> #define HAVE_MALLOC 1
>
> /* Define to 1 if you have the <memory.h> header file. */
> #define HAVE_MEMORY_H 1
>
> /* Define to 1 if you have the <netinet/in.h> header file. */
> #define HAVE_NETINET_IN_H 1
>
> /* Define to 1 if you have the <stdint.h> header file. */
> #define HAVE_STDINT_H 1
>
> /* Define to 1 if you have the <stdlib.h> header file. */
> #define HAVE_STDLIB_H 1
>
> /* Define to 1 if you have the <strings.h> header file. */
> #define HAVE_STRINGS_H 1
>
> /* Define to 1 if you have the <string.h> header file. */
> #define HAVE_STRING_H 1
>
> /* Define to 1 if you have the <sys/param.h> header file. */
> #define HAVE_SYS_PARAM_H 1
>
> /* Define to 1 if you have the <sys/stat.h> header file. */
> #define HAVE_SYS_STAT_H 1
>
> /* Define to 1 if you have the <sys/time.h> header file. */
> #define HAVE_SYS_TIME_H 1
>
> /* Define to 1 if you have the <sys/types.h> header file. */
>
> = 
> ======================================================================
> ==./src/c/config.h.in
> = 
> ======================================================================
> /* config.h.in.  Generated from configure.in by autoheader.  */
>
> /* Define to 1 if you have the `bzero' function. */
> #undef HAVE_BZERO
>
> /* Define to 1 if you have the <dlfcn.h> header file. */
> #undef HAVE_DLFCN_H
>
> /* Define to 1 if you have the <inttypes.h> header file. */
> #undef HAVE_INTTYPES_H
>
> /* Define to 1 if you have the <libintl.h> header file. */
> #undef HAVE_LIBINTL_H
>
> /* Define to 1 if you have the <limits.h> header file. */
> #undef HAVE_LIMITS_H
>
> /* Define to 1 if your system has a GNU libc compatible `malloc'  
> function, and
>   to 0 otherwise. */
> #undef HAVE_MALLOC
>
> /* Define to 1 if you have the <memory.h> header file. */
> #undef HAVE_MEMORY_H
>
> /* Define to 1 if you have the <netinet/in.h> header file. */
> #undef HAVE_NETINET_IN_H
>
> /* Define to 1 if you have the <stdint.h> header file. */
> #undef HAVE_STDINT_H
>
> /* Define to 1 if you have the <stdlib.h> header file. */
> #undef HAVE_STDLIB_H
>
> /* Define to 1 if you have the <strings.h> header file. */
> #undef HAVE_STRINGS_H
>
> /* Define to 1 if you have the <string.h> header file. */
> #undef HAVE_STRING_H
>
> /* Define to 1 if you have the <sys/param.h> header file. */
> #undef HAVE_SYS_PARAM_H
>
> /* Define to 1 if you have the <sys/stat.h> header file. */
> #undef HAVE_SYS_STAT_H
>
> /* Define to 1 if you have the <sys/time.h> header file. */
> #undef HAVE_SYS_TIME_H
>
> /* Define to 1 if you have the <sys/types.h> header file. */
> #undef HAVE_SYS_TYPES_H
>
> = 
> ======================================================================
> ==./src/c/config.log
> = 
> ======================================================================
> This file contains any messages produced by compilers while
> running configure, to aid debugging if configure makes a mistake.
>
> It was created by avro-c configure 0.1.0, which was
> generated by GNU Autoconf 2.63.  Invocation command line was
>
>  $ ./configure --prefix=/home/cutting/src/avro/test/build/c/Linux- 
> i386-32
>
> ## --------- ##
> ## Platform. ##
> ## --------- ##
>
> hostname = cutting-nc6400
> uname -m = i686
> uname -r = 2.6.28-13-generic
> uname -s = Linux
> uname -v = #44-Ubuntu SMP Tue Jun 2 07:57:31 UTC 2009
>
> /usr/bin/uname -p = unknown
> /bin/uname -X     = unknown
>
> /bin/arch              = unknown
> /usr/bin/arch -k       = unknown
> /usr/convex/getsysinfo = unknown
> /usr/bin/hostinfo      = unknown
> /bin/machine           = unknown
> /usr/bin/oslevel       = unknown
> /bin/universe          = unknown
>
> PATH: /home/cutting/bin
> PATH: /usr/local/sbin
> PATH: /usr/local/bin
> PATH: /usr/sbin
> PATH: /usr/bin
> PATH: /sbin
> PATH: /bin
> PATH: /usr/games
> PATH: /opt/real/RealPlayer
>
>
> ## ----------- ##
> ## Core tests. ##
> ## ----------- ##
>
> configure:2072: checking for a BSD-compatible install
> configure:2140: result: /usr/bin/install -c
> configure:2151: checking whether build environment is sane
> configure:2194: result: yes
> configure:2219: checking for a thread-safe mkdir -p
> configure:2258: result: /bin/mkdir -p
>
> = 
> ======================================================================
> ==./src/c/config.status
> = 
> ======================================================================
> #! /bin/bash
> # Generated by configure.
> # Run this file to recreate the current configuration.
> # Compiler output produced by configure, useful for debugging
> # configure, is in config.log if it exists.
>
> debug=false
> ac_cs_recheck=false
> ac_cs_silent=false
> SHELL=${CONFIG_SHELL-/bin/bash}
> ## --------------------- ##
> ## M4sh Initialization.  ##
> ## --------------------- ##
>
> # Be more Bourne compatible
> DUALCASE=1; export DUALCASE # for MKS sh
> if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
>  emulate sh
>  NULLCMD=:
>  # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
>  # is contrary to our usage.  Disable this feature.
>  alias -g '${1+"$@"}'='"$@"'
>  setopt NO_GLOB_SUBST
> else
>  case `(set -o) 2>/dev/null` in
>  *posix*) set -o posix ;;
> esac
>
> fi
>
>
>
>
> # PATH needs CR
> # Avoid depending upon Character Ranges.
> as_cr_letters='abcdefghijklmnopqrstuvwxyz'
> as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
> as_cr_Letters=$as_cr_letters$as_cr_LETTERS
> as_cr_digits='0123456789'
> as_cr_alnum=$as_cr_Letters$as_cr_digits
>
> as_nl='
> '
> export as_nl
> # Printing a long string crashes Solaris 7 /usr/bin/printf.
> as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ 
> \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
> as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo
> as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo
> if (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then
>  as_echo='printf %s\n'
>
> = 
> ======================================================================
> ==./src/c/configure
> = 
> ======================================================================
> #! /bin/sh
> # Guess values for system-dependent variables and create Makefiles.
> # Generated by GNU Autoconf 2.63 for avro-c 0.1.0.
> #
> # Report bugs to <ma...@cloudera.com>.
> #
> # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
> # 2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation,  
> Inc.
> # This configure script is free software; the Free Software Foundation
> # gives unlimited permission to copy, distribute and modify it.
> ## --------------------- ##
> ## M4sh Initialization.  ##
> ## --------------------- ##
>
> # Be more Bourne compatible
> DUALCASE=1; export DUALCASE # for MKS sh
> if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
>  emulate sh
>  NULLCMD=:
>  # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
>  # is contrary to our usage.  Disable this feature.
>  alias -g '${1+"$@"}'='"$@"'
>  setopt NO_GLOB_SUBST
> else
>  case `(set -o) 2>/dev/null` in
>  *posix*) set -o posix ;;
> esac
>
> fi
>
>
>
>
> # PATH needs CR
> # Avoid depending upon Character Ranges.
> as_cr_letters='abcdefghijklmnopqrstuvwxyz'
> as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
> as_cr_Letters=$as_cr_letters$as_cr_LETTERS
> as_cr_digits='0123456789'
> as_cr_alnum=$as_cr_Letters$as_cr_digits
>
> as_nl='
> '
> export as_nl
> # Printing a long string crashes Solaris 7 /usr/bin/printf.
> as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ 
> \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
> as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo
> as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo
> if (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then
>  as_echo='printf %s\n'
>
> = 
> ======================================================================
> ==./src/c/configure.in
> = 
> ======================================================================
> #                                               -*- Autoconf -*-
> # Process this file with autoconf to produce a configure script.
>
> AC_PREREQ(2.59)
> AC_INIT([avro-c], [0.1.0], [matt@cloudera.com])
> AC_CONFIG_AUX_DIR([config])
> AM_INIT_AUTOMAKE
> AC_CONFIG_SRCDIR([avro.h])
> AC_CONFIG_HEADER([config.h])
>
> # Checks for programs.
> AC_PROG_CC
> AC_PROG_LIBTOOL
>
> # Checks for libraries.
> AC_MSG_CHECKING(for apr-1-config)
> AC_PATH_PROG(APR_CONFIG, apr-1-config)
> if test -z "$APR_CONFIG"; then
>  AC_MSG_ERROR(Please make sure that you have the Apache Portable  
> Runtime 'apr' installed
>  and the apr-1-config binary is on your path.)
> else
>  AC_MSG_RESULT(Found $APR_CONFIG for version `$APR_CONFIG --version`)
> fi
> APR_CFLAGS=$($APR_CONFIG --cflags --cppflags)
> APR_INCLUDES=$($APR_CONFIG --includes)
> APR_LIBS=$($APR_CONFIG --link-libtool --libs)
> AC_SUBST(APR_CFLAGS)
> AC_SUBST(APR_INCLUDES)
> AC_SUBST(APR_LIBS)
> AC_MSG_CHECKING(for APR cflags)
> AC_MSG_RESULT($APR_CFLAGS)
> AC_MSG_CHECKING(for APR includes)
> AC_MSG_RESULT($APR_INCLUDES)
> AC_MSG_CHECKING(for APR libraries)
> AC_MSG_RESULT($APR_LIBS)
>
> AC_MSG_CHECKING(for apu-1-config)
> AC_PATH_PROG(APR_UTIL_CONFIG, apu-1-config)
> if test -z "$APR_UTIL_CONFIG"; then
>  AC_MSG_ERROR(Please make sure that you have the Apache Portable  
> Runtime Utility 'apr-util'
>  installed and the apu-1-config script is on your path.)
> else
>  AC_MSG_RESULT(Found $APR_UTIL_CONFIG for version `$APR_UTIL_CONFIG  
> --version`)
> fi
> #APU_CFLAGS=$($APR_UTIL_CONFIG --cflags --cppflags)
> APU_INCLUDES=$($APR_UTIL_CONFIG --includes)
> APU_LIBS=$($APR_UTIL_CONFIG --link-libtool --libs)
> #AC_SUBST(APU_CFLAGS)
> AC_SUBST(APU_INCLUDES)
> AC_SUBST(APU_LIBS)
>
> = 
> ======================================================================
> ==./src/c/dump.c
> = 
> ======================================================================
> #include "dump.h"
> #include <ctype.h>
> #include <string.h>
> #include <stdint.h>
>
> static void
> dump_line (FILE * out, const caddr_t addr, const long len)
> {
>  int i;
>  fprintf (out, "|");
>  for (i = 0; i < 16; i++)
>    {
>      if (i < len)
> 	{
> 	  fprintf (out, " %02X", ((uint8_t *) addr)[i]);
> 	}
>      else
> 	{
> 	  fprintf (out, " ..");
> 	}
>      if (!((i + 1) % 8))
> 	{
> 	  fprintf (out, " |");
> 	}
>    }
>  fprintf (out, "\t");
>  for (i = 0; i < 16; i++)
>    {
>      char c = 0x7f & ((uint8_t *) addr)[i];
>      if (i < len && isprint (c))
> 	{
> 	  fprintf (out, "%c", c);
> 	}
>      else
> 	{
> 	  fprintf (out, ".");
> 	}
>    }
> }
>
> void
> dump (FILE * out, const caddr_t addr, const long len)
> {
>  int i;
>  for (i = 0; i < len; i += 16)
>    {
>      dump_line (out, addr + i, (len - i) < 16 ? (len - i) : 16);
>      fprintf (out, "\n");
>    }
>  fflush (out);
>
> = 
> ======================================================================
> ==./src/c/dump.h
> = 
> ======================================================================
> #ifndef DUMP_H
> #define DUMP_H
>
> #include <stdio.h>
> #include <sys/types.h>
>
> void dump (FILE * out, const caddr_t addr, const long len);
>
> #endif
>
> = 
> ======================================================================
> ==./src/c/dump.lo
> = 
> ======================================================================
> # dump.lo - a libtool object file
> # Generated by ltmain.sh (GNU libtool) 2.2.6 Debian-2.2.6a-1ubuntu1
> #
> # Please DO NOT delete this file!
> # It is necessary for linking the library.
>
> # Name of the PIC object.
> pic_object='.libs/dump.o'
>
> # Name of the non-PIC object
> non_pic_object='dump.o'
>
>
> = 
> ======================================================================
> ==./src/c/error.c
> = 
> ======================================================================
> #include <stdio.h>
> #include <stdarg.h>		/* ANSI C header file */
> #include <errno.h>
> #include <string.h>
> #include <stdlib.h>
> #include <syslog.h>		/* for syslog() */
> #include "error.h"
>
> int daemon_proc = 0;		/* set nonzero by daemon_init() */
>
> static void err_doit (int, int, const char *, va_list);
>
> /* Nonfatal error related to a system call.
> * Print a message and return. */
>
> void
> err_ret (const char *fmt, ...)
> {
>  va_list ap;
>
>  va_start (ap, fmt);
>  err_doit (1, LOG_INFO, fmt, ap);
>  va_end (ap);
>  return;
> }
>
> /* Fatal error related to a system call.
> * Print a message and terminate. */
>
> void
> err_sys (const char *fmt, ...)
> {
>  va_list ap;
>
>  va_start (ap, fmt);
>  err_doit (1, LOG_ERR, fmt, ap);
>  va_end (ap);
>  exit (EXIT_FAILURE);
> }
>
> /* Fatal error related to a system call.
> * Print a message, dump core, and terminate. */
>
> void
> err_dump (const char *fmt, ...)
> {
>  va_list ap;
>
>  va_start (ap, fmt);
>  err_doit (1, LOG_ERR, fmt, ap);
>
> = 
> ======================================================================
> ==./src/c/error.h
> = 
> ======================================================================
> #ifndef ERROR_H
> #define ERROR_H
>
> /* Nonfatal error related to a system call.
> * Print a message and return. */
>
> void err_ret (const char *fmt, ...);
>
> /* Fatal error related to a system call.
> * Print a message and terminate. */
>
> void err_sys (const char *fmt, ...);
>
> /* Fatal error related to a system call.
> * Print a message, dump core, and terminate. */
>
> void err_dump (const char *fmt, ...);
>
> /* Nonfatal error unrelated to a system call.
> * Print a message and return. */
>
> void err_msg (const char *fmt, ...);
>
> /* Fatal error unrelated to a system call.
> * Print a message and terminate. */
>
> void err_quit (const char *fmt, ...);
>
> #endif
>
> = 
> ======================================================================
> ==./src/c/error.lo
> = 
> ======================================================================
> # error.lo - a libtool object file
> # Generated by ltmain.sh (GNU libtool) 2.2.6 Debian-2.2.6a-1ubuntu1
> #
> # Please DO NOT delete this file!
> # It is necessary for linking the library.
>
> # Name of the PIC object.
> pic_object='.libs/error.o'
>
> # Name of the non-PIC object
> non_pic_object='error.o'
>
>
> = 
> ======================================================================
> ==./src/c/json.c
> = 
> ======================================================================
> #include <stdio.h>
> #include <stdlib.h>
>
> #include "json.h"
> #include "json_tokenizer.h"
>
> static void
> ws_depth (FILE * file, int depth)
> {
>  int i;
>  for (i = 0; i < depth; i++)
>    {
>      fprintf (file, "   ");
>    }
> }
>
> static void
> JSON_print_private (FILE * file, JSON_value * value, int *depth)
> {
>  int i;
>  switch (value->type)
>    {
>    case JSON_UNKNOWN:
>      fprintf (file, "???");
>      return;
>    case JSON_STRING:
>      fprintf (file, "\"%s\"", value->string_value);
>      return;
>    case JSON_NUMBER:
>      fprintf (file, "%E", value->number_value);
>      return;
>    case JSON_BOOLEAN:
>      fprintf (file, "%s", value->boolean_value ? "true" : "false");
>      return;
>    case JSON_NULL:
>      fprintf (file, "null");
>      return;
>    case JSON_ARRAY:
>      (*depth)++;
>      fprintf (file, "[\n");
>      for (i = 0; i < value->array_value->nelts; i++)
> 	{
> 	  if (i)
> 	    {
> 	      fprintf (file, ",\n");
> 	    }
> 	  ws_depth (file, *depth);
> 	  JSON_print_private (file,
> 			      ((JSON_value **) value->array_value->elts)[i],
> 			      depth);
>
> = 
> ======================================================================
> ==./src/c/json.h
> = 
> ======================================================================
> #ifndef JSON_H
> #define JSON_H
>
> #include <apr.h>
> #include <apr_pools.h>
> #include <apr_tables.h>
> #include <apr_hash.h>
>
> enum JSON_type
> {
>  JSON_UNKNOWN,
>  JSON_OBJECT,
>  JSON_ARRAY,
>  JSON_STRING,
>  JSON_NUMBER,
>  JSON_BOOLEAN,
>  JSON_NULL
> };
> typedef enum JSON_type JSON_type;
>
> struct JSON_value
> {
>  JSON_type type;
>  union
>  {
>    apr_hash_t *object;
>    apr_array_header_t *array;
>    char *z;
>    double number;
>    int boolean;
>  } value_u;
>  apr_pool_t *pool;
> };
> typedef struct JSON_value JSON_value;
> #define object_value value_u.object
> #define array_value value_u.array
> #define string_value value_u.z
> #define number_value value_u.number
> #define boolean_value value_u.boolean
>
> JSON_value *JSON_parse (apr_pool_t * pool, char *text, int text_len);
>
> JSON_value *JSON_value_new (apr_pool_t * pool, int type);
>
> void JSON_print (FILE * file, JSON_value * value);
>
> struct JSON_ctx
> {
>  apr_pool_t *pool;
>  JSON_value *result;
>
> = 
> ======================================================================
> ==./src/c/json.lo
> = 
> ======================================================================
> # json.lo - a libtool object file
> # Generated by ltmain.sh (GNU libtool) 2.2.6 Debian-2.2.6a-1ubuntu1
> #
> # Please DO NOT delete this file!
> # It is necessary for linking the library.
>
> # Name of the PIC object.
> pic_object='.libs/json.o'
>
> # Name of the non-PIC object
> non_pic_object='json.o'
>
>
> = 
> ======================================================================
> ==./src/c/json_schema.c
> = 
> ======================================================================
> /* Driver template for the LEMON parser generator.
> ** The author disclaims copyright to this source code.
> */
> /* First off, code is included that follows the "include" declaration
> ** in the input grammar file. */
> #include <stdio.h>
> #line 12 "./json_schema.y"
>
> #include <stdio.h>
> #include <assert.h>
> #include "json.h"
> #include "json_tokenizer.h"
>
> #if 0
> #define DEBUG_PARSER(stmt) stmt
> #else
> #define DEBUG_PARSER(stmt)
> #endif
>
> #define NUM_INIT_ELEMENTS 16
> #line 22 "./json_schema.c"
> /* Next is all token values, in a form suitable for use by  
> makeheaders.
> ** This section will be null unless lemon is run with the -m switch.
> */
> /*
> ** These constants (all generated automatically by the parser  
> generator)
> ** specify the various kinds of tokens (terminals) that the parser
> ** understands.
> **
> ** Each symbol here is a terminal symbol in the grammar.
> */
> /* Make sure the INTERFACE macro is defined.
> */
> #ifndef INTERFACE
> # define INTERFACE 1
> #endif
> /* The next thing included is series of defines which control
> ** various aspects of the generated parser.
> **    YYCODETYPE         is the data type used for storing terminal
> **                       and nonterminal numbers.  "unsigned char" is
> **                       used if there are fewer than 250 terminals
> **                       and nonterminals.  "int" is used otherwise.
> **    YYNOCODE           is a number of type YYCODETYPE which  
> corresponds
> **                       to no legal terminal or nonterminal  
> number.  This
> **                       number is used to fill in empty slots of  
> the hash
> **                       table.
> **    YYFALLBACK         If defined, this indicates that one or more  
> tokens
> **                       have fall-back values which should be used  
> if the
> **                       original value of the token will not parse.
> **    YYACTIONTYPE       is the data type used for storing terminal
>
> = 
> ======================================================================
> ==./src/c/json_schema.h
> = 
> ======================================================================
> #define TK_STRING                          1
> #define TK_NUMBER                          2
> #define TK_TRUE                            3
> #define TK_FALSE                           4
> #define TK_NULL                            5
> #define TK_COMMA                           6
> #define TK_LBRACKET                        7
> #define TK_RBRACKET                        8
> #define TK_COLON                           9
> #define TK_LCURLY                         10
> #define TK_RCURLY                         11
>
> = 
> ======================================================================
> ==./src/c/json_schema.lo
> = 
> ======================================================================
> # json_schema.lo - a libtool object file
> # Generated by ltmain.sh (GNU libtool) 2.2.6 Debian-2.2.6a-1ubuntu1
> #
> # Please DO NOT delete this file!
> # It is necessary for linking the library.
>
> # Name of the PIC object.
> pic_object='.libs/json_schema.o'
>
> # Name of the non-PIC object
> non_pic_object='json_schema.o'
>
>
> = 
> ======================================================================
> ==./src/c/json_schema.out
> = 
> ======================================================================
> State 0:
>          json ::= * jsontext
>          jsontext ::= * object
>          jsontext ::= * array
>          array ::= * LBRACKET elements RBRACKET
>          object ::= * LCURLY members RCURLY
>
>                      LBRACKET shift  3
>                        LCURLY shift  4
>                          json accept
>                      jsontext shift  7
>                        object shift  10
>                         array shift  11
>
> State 1:
>          value ::= * STRING
>          value ::= * NUMBER
>          value ::= * object
>          value ::= * array
>          value ::= * TRUE
>          value ::= * FALSE
>          value ::= * NULL
>          elements ::= element_list * value
>     (13) elements ::= element_list *
>          array ::= * LBRACKET elements RBRACKET
>          object ::= * LCURLY members RCURLY
>
>                        STRING shift  14
>                        NUMBER shift  15
>                          TRUE shift  18
>                         FALSE shift  19
>                          NULL shift  20
>                      LBRACKET shift  3
>                        LCURLY shift  4
>                        object shift  16
>                         array shift  17
>                         value shift  21
>                     {default} reduce 13
>
> State 2:
>          value ::= * STRING
>          value ::= * NUMBER
>          value ::= * object
>          value ::= * array
>          value ::= * TRUE
>          value ::= * FALSE
>          value ::= * NULL
>          array ::= * LBRACKET elements RBRACKET
>          members ::= member_list STRING COLON * value
>          object ::= * LCURLY members RCURLY
>
> = 
> ======================================================================
> ==./src/c/json_schema.y
> = 
> ======================================================================
> /*
> RFC 4627
> http://tools.ietf.org/html/rfc4627
> */
> %name JSONParser
>
> %token_type {JSON_value *}
> %default_type {JSON_value *}
>
> %extra_argument { JSON_ctx *ctx }
>
> %include {
> #include <stdio.h>
> #include <assert.h>
> #include "json.h"
> #include "json_tokenizer.h"
>
> #if 0
> #define DEBUG_PARSER(stmt) stmt
> #else
> #define DEBUG_PARSER(stmt)
> #endif
>
> #define NUM_INIT_ELEMENTS 16
> }
>
> %parse_accept {
>   DEBUG_PARSER(fprintf(stderr,"Input parsed and accepted\n"));
> }
>
> %syntax_error {
>   ctx->error = 1;
>   DEBUG_PARSER(fprintf(stderr,"Syntax error\n"));
> }
>
> %token_prefix TK_
>
> json ::= jsontext(A).
> {
>      ctx->result = A;
> }
>
> jsontext(A) ::= object(B). { A=B; }
> jsontext(A) ::= array(B).  { A=B; }
>
> /* Values */
> value(A) ::= STRING(B).  { A=B; }
> value(A) ::= NUMBER(B).  { A=B; }
> value(A) ::= object(B).  { A=B; }
> value(A) ::= array(B).   { A=B; }
>
> = 
> ======================================================================
> ==./src/c/json_tokenizer.c
> = 
> ======================================================================
> #include <stdio.h>
> #include <stdlib.h>
> #include <string.h>
> #include <ctype.h>
>
> #include "json_tokenizer.h"
>
> static struct keyword
> {
>  char *z;
>  int len;
>  int tokenType;
> } keywords[] =
> {
>  {
>  "true", 4, TK_TRUE},
>  {
>  "false", 5, TK_FALSE},
>  {
>  "null", 4, TK_NULL}
> };
>
> #define NUM_KEYWORDS (sizeof(keywords)/sizeof(keywords[0]))
>
> int
> json_get_token (const char *z, const unsigned len, int *tokenType,
> 		double *number)
> {
>  char *p;
>  int i;
>  if (!z || !tokenType || len == 0 || !number)
>    {
>      return -1;
>    }
>
>  if (isspace (z[0]))
>    {
>      for (i = 1; isspace (z[i]); i++)
> 	{
> 	}
>      *tokenType = TK_SPACE;
>      return i;
>    }
>
>  switch (*z)
>    {
>    case '"':
>      {
> 	/* Find the end quote */
> 	for (i = 1; i < len; i++)
>
> = 
> ======================================================================
> ==./src/c/json_tokenizer.h
> = 
> ======================================================================
> #ifndef JSON_TOKENIZER_H
> #define JSON_TOKENIZER_H
>
> #include "json_schema.h"
>
> /* Tokens which are not part of the schema */
> enum json_tokens
> {
>  TK_SPACE = 42424242
> };
>
> struct Token
> {
>  char *z;
>  double d;
>  int b;
> };
> typedef struct Token Token;
>
> int json_get_token (const char *z, const unsigned len, int *tokenType,
> 		    double *number);
>
> #endif
>
> = 
> ======================================================================
> ==./src/c/json_tokenizer.lo
> = 
> ======================================================================
> # json_tokenizer.lo - a libtool object file
> # Generated by ltmain.sh (GNU libtool) 2.2.6 Debian-2.2.6a-1ubuntu1
> #
> # Please DO NOT delete this file!
> # It is necessary for linking the library.
>
> # Name of the PIC object.
> pic_object='.libs/json_tokenizer.o'
>
> # Name of the non-PIC object
> non_pic_object='json_tokenizer.o'
>
>
> = 
> ======================================================================
> ==./src/c/lemon.c
> = 
> ======================================================================
> /*
> ** This file contains all sources (including headers) to the LEMON
> ** LALR(1) parser generator.  The sources have been combined into a
> ** single file to make it easy to include LEMON in the source tree
> ** and Makefile of another program.
> **
> ** The author of this program disclaims copyright.
> */
> #include <stdio.h>
> #include <stdarg.h>
> #include <string.h>
> #include <ctype.h>
> #include <stdlib.h>
> #include <assert.h>
>
> #ifndef __WIN32__
> #   if defined(_WIN32) || defined(WIN32)
> #	define __WIN32__
> #   endif
> #endif
>
> #ifdef __WIN32__
> extern int access();
> #else
> #include <unistd.h>
> #endif
>
> /* #define PRIVATE static */
> #define PRIVATE
>
> #ifdef TEST
> #define MAXRHS 5       /* Set low to exercise exception code */
> #else
> #define MAXRHS 1000
> #endif
>
> static char *msort(char*,char**,int(*)(const char*,const char*));
>
> /*
> ** Compilers are getting increasingly pedantic about type conversions
> ** as C evolves ever closer to Ada....  To work around the latest  
> problems
> ** we have to define the following variant of strlen().
> */
> #define lemonStrlen(X)   ((int)strlen(X))
>
> static struct action *Action_new(void);
> static struct action *Action_sort(struct action *);
>
> /********** From the file "build.h"  
> ************************************/
> void FindRulePrecedences();
>
> = 
> ======================================================================
> ==./src/c/lempar.c
> = 
> ======================================================================
> /* Driver template for the LEMON parser generator.
> ** The author disclaims copyright to this source code.
> */
> /* First off, code is included that follows the "include" declaration
> ** in the input grammar file. */
> #include <stdio.h>
> %%
> /* Next is all token values, in a form suitable for use by  
> makeheaders.
> ** This section will be null unless lemon is run with the -m switch.
> */
> /*
> ** These constants (all generated automatically by the parser  
> generator)
> ** specify the various kinds of tokens (terminals) that the parser
> ** understands.
> **
> ** Each symbol here is a terminal symbol in the grammar.
> */
> %%
> /* Make sure the INTERFACE macro is defined.
> */
> #ifndef INTERFACE
> # define INTERFACE 1
> #endif
> /* The next thing included is series of defines which control
> ** various aspects of the generated parser.
> **    YYCODETYPE         is the data type used for storing terminal
> **                       and nonterminal numbers.  "unsigned char" is
> **                       used if there are fewer than 250 terminals
> **                       and nonterminals.  "int" is used otherwise.
> **    YYNOCODE           is a number of type YYCODETYPE which  
> corresponds
> **                       to no legal terminal or nonterminal  
> number.  This
> **                       number is used to fill in empty slots of  
> the hash
> **                       table.
> **    YYFALLBACK         If defined, this indicates that one or more  
> tokens
> **                       have fall-back values which should be used  
> if the
> **                       original value of the token will not parse.
> **    YYACTIONTYPE       is the data type used for storing terminal
> **                       and nonterminal numbers.  "unsigned char" is
> **                       used if there are fewer than 250 rules and
> **                       states combined.  "int" is used otherwise.
> **    ParseTOKENTYPE     is the data type used for minor tokens given
> **                       directly to the parser from the tokenizer.
> **    YYMINORTYPE        is the data type used for all minor tokens.
> **                       This is typically a union of many types,  
> one of
> **                       which is ParseTOKENTYPE.  The entry in the  
> union
> **                       for base tokens is called "yy0".
> **    YYSTACKDEPTH       is the maximum depth of the parser's  
> stack.  If
> **                       zero the stack is dynamically sized using  
> realloc()
> **    ParseARG_SDECL     A static variable declaration for the  
> %extra_argument
> **    ParseARG_PDECL     A parameter declaration for the  
> %extra_argument
>
> = 
> ======================================================================
> ==./src/c/libavro.la
> = 
> ======================================================================
> # libavro.la - a libtool library file
> # Generated by ltmain.sh (GNU libtool) 2.2.6 Debian-2.2.6a-1ubuntu1
> #
> # Please DO NOT delete this file!
> # It is necessary for linking the library.
>
> # The name that we can dlopen(3).
> dlname='libavro.so.0'
>
> # Names of this library.
> library_names='libavro.so.0.0.0 libavro.so.0 libavro.so'
>
> # The name of the static archive.
> old_library='libavro.a'
>
> # Linker flags that can not go in dependency_libs.
> inherited_linker_flags=' -pthread'
>
> # Libraries that this one depends upon.
> dependency_libs=''
>
> # Names of additional weak libraries provided by this library
> weak_library_names=''
>
> # Version information for libavro.
> current=0
> age=0
> revision=0
>
> # Is this an already installed library?
> installed=no
>
> # Should we warn about portability when linking against -modules?
> shouldnotlink=no
>
> # Files to dlopen/dlpreopen
> dlopen=''
> dlpreopen=''
>
> # Directory that this library needs to be installed in:
> libdir='/home/cutting/src/avro/test/build/c/Linux-i386-32/lib'
>
> = 
> ======================================================================
> ==./src/c/libtool
> = 
> ======================================================================
> #! /bin/bash
>
> # libtool - Provide generalized library-building support services.
> # Generated automatically by config.status (avro-c) 0.1.0
> # Libtool was configured on host cutting-nc6400:
> # NOTE: Changes made to this file will be lost: look at ltmain.sh.
> #
> #   Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004,  
> 2005,
> #                 2006, 2007, 2008 Free Software Foundation, Inc.
> #   Written by Gordon Matzigkeit, 1996
> #
> #   This file is part of GNU Libtool.
> #
> # GNU Libtool is free software; you can redistribute it and/or
> # modify it under the terms of the GNU General Public License as
> # published by the Free Software Foundation; either version 2 of
> # the License, or (at your option) any later version.
> #
> # As a special exception to the GNU General Public License,
> # if you distribute this file as part of a program or library that
> # is built using GNU Libtool, you may include this file under the
> # same distribution terms that you use for the rest of that program.
> #
> # GNU Libtool is distributed in the hope that it will be useful,
> # but WITHOUT ANY WARRANTY; without even the implied warranty of
> # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> # GNU General Public License for more details.
> #
> # You should have received a copy of the GNU General Public License
> # along with GNU Libtool; see the file COPYING.  If not, a copy
> # can be downloaded from http://www.gnu.org/licenses/gpl.html, or
> # obtained by writing to the Free Software Foundation, Inc.,
> # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
>
>
> # The names of the tagged configurations supported by this script.
> available_tags=""
>
> # ### BEGIN LIBTOOL CONFIG
>
> # Which release of libtool.m4 was used?
> macro_version=2.2.6
> macro_revision=1.3012
>
> # Whether or not to build shared libraries.
> build_libtool_libs=yes
>
> # Whether or not to build static libraries.
> build_old_libs=yes
>
>
> = 
> ======================================================================
> ==./src/c/stamp-h1
> = 
> ======================================================================
> timestamp for config.h
>
> = 
> ======================================================================
> ==./src/c/test_avro_bytes.c
> = 
> ======================================================================
> #include <apr.h>
> #include <apr_pools.h>
> #include <apr_buckets.h>
> #include <apr_file_io.h>
> #include <stdlib.h>
> #include <time.h>
> #include "avro.h"
> #include "error.h"
>
> int
> main (void)
> {
>  apr_pool_t *pool;
>  AVRO avro_in, avro_out;
>  avro_status_t avro_status;
>  char buf[1024];
>  long long_in, long_out;
>  char *bytes_in, *bytes_out;
>  int i;
>  int64_t len_in, len_out;
>
>  apr_initialize ();
>  atexit (apr_terminate);
>
>  srand (time (NULL));
>
>  for (i = 0; i < 10; i++)
>    {
>      apr_pool_create (&pool, NULL);
>      avro_status =
> 	avro_create_memory (&avro_in, pool, buf, sizeof (buf), AVRO_ENCODE);
>      if (avro_status != AVRO_OK)
> 	{
> 	  err_quit ("Unable to create AVRO encoder");
> 	}
>
>      long_in = rand ();
>      bytes_in = (char *) &long_in;
>      len_in = sizeof (bytes_in);
>      avro_status = avro_bytes (&avro_in, &bytes_in, &len_in, -1);
>      if (avro_status != AVRO_OK)
> 	{
> 	  err_quit ("Unable to encode bytes value=%s", long_in);
> 	}
>
>      avro_status =
> 	avro_create_memory (&avro_out, pool, buf, sizeof (buf), AVRO_DECODE);
>      if (avro_status != AVRO_OK)
> 	{
> 	  err_quit ("Unable to create AVRO decoder");
>
> = 
> ======================================================================
> ==./src/c/test_avro_float_double.c
> = 
> ======================================================================
> #include <apr.h>
> #include <apr_pools.h>
> #include <apr_buckets.h>
> #include <apr_file_io.h>
> #include <stdlib.h>
> #include <time.h>
> #include "avro.h"
> #include "error.h"
>
> int
> main (void)
> {
>  apr_pool_t *pool;
>  AVRO avro_in, avro_out;
>  avro_status_t avro_status;
>  char buf[1024];
>  float f_in, f_out;
>  double d_in, d_out;
>  int i;
>
>  apr_initialize ();
>  atexit (apr_terminate);
>
>  srand (time (NULL));
>
>  for (i = 0; i < 10; i++)
>    {
>      apr_pool_create (&pool, NULL);
>      avro_status =
> 	avro_create_memory (&avro_in, pool, buf, sizeof (buf), AVRO_ENCODE);
>      if (avro_status != AVRO_OK)
> 	{
> 	  err_quit ("Unable to create AVRO encoder");
> 	}
>
>      f_in = rand () + (rand () / (RAND_MAX + 1.0));
>      d_in = f_in * f_in;
>
>      avro_status = avro_float (&avro_in, &f_in);
>      if (avro_status != AVRO_OK)
> 	{
> 	  err_quit ("Unable to encode float value=%f", f_in);
> 	}
>
>      avro_status = avro_double (&avro_in, &d_in);
>      if (avro_status != AVRO_OK)
> 	{
> 	  err_quit ("Unable to encode double value=%f", d_in);
> 	}
>
>
> = 
> ======================================================================
> ==./src/c/test_avro_raw.c
> = 
> ======================================================================
> #include <apr.h>
> #include <apr_pools.h>
> #include <apr_buckets.h>
> #include <apr_file_io.h>
> #include <stdlib.h>
> #include <time.h>
> #include "avro.h"
> #include "error.h"
>
> int
> main (void)
> {
>  apr_pool_t *pool;
>  AVRO avro_in, avro_out;
>  avro_status_t avro_status;
>  char buf[1024];
>  int32_t i32_in, i32_out;
>  int64_t i64_in, i64_out;
>  int i;
>
>  apr_initialize ();
>  atexit (apr_terminate);
>
>  srand (time (NULL));
>
>  for (i = 0; i < 10; i++)
>    {
>      apr_pool_create (&pool, NULL);
>      avro_status =
> 	avro_create_memory (&avro_in, pool, buf, sizeof (buf), AVRO_ENCODE);
>      if (avro_status != AVRO_OK)
> 	{
> 	  err_quit ("Unable to create AVRO encoder");
> 	}
>
>      i32_in = rand ();
>      i64_in = i32_in * i32_in;
>
>      avro_status = avro_putint32_raw (&avro_in, i32_in);
>      if (avro_status != AVRO_OK)
> 	{
> 	  err_quit ("Unable to encode raw int32 value=%d", i32_in);
> 	}
>
>      avro_status = avro_putint64_raw (&avro_in, i64_in);
>      if (avro_status != AVRO_OK)
> 	{
> 	  err_quit ("Unable to encode raw int64 value=%lld", i64_in);
> 	}
>
>
> = 
> ======================================================================
> ==./src/c/test_avro_string.c
> = 
> ======================================================================
> #include <apr.h>
> #include <apr_pools.h>
> #include <apr_buckets.h>
> #include <apr_file_io.h>
> #include <stdlib.h>
> #include "avro.h"
> #include "error.h"
>
> int
> main (void)
> {
>  apr_pool_t *pool;
>  AVRO avro_in, avro_out;
>  avro_status_t avro_status;
>  char buf[1024];
>  char *str_in, *str_out;
>  int i, len;
>  char *test_strings[] = {
>    "This",
>    "Is",
>    "A",
>    "Test"
>  };
>
>  apr_initialize ();
>  atexit (apr_terminate);
>
>  for (i = 0; i < sizeof (test_strings) / sizeof (test_strings[0]); i+ 
> +)
>    {
>      char *test_string = test_strings[i];
>
>      apr_pool_create (&pool, NULL);
>      avro_status =
> 	avro_create_memory (&avro_in, pool, buf, sizeof (buf), AVRO_ENCODE);
>      if (avro_status != AVRO_OK)
> 	{
> 	  err_quit ("Unable to create AVRO encoder");
> 	}
>
>      str_in = test_string;
>      avro_status = avro_string (&avro_in, &str_in, -1);
>      if (avro_status != AVRO_OK)
> 	{
> 	  err_quit ("Unable to encode string value=%s", str_in);
> 	}
>
>      avro_status =
> 	avro_create_memory (&avro_out, pool, buf, sizeof (buf), AVRO_DECODE);
>      if (avro_status != AVRO_OK)
> 	{
>
> = 
> ======================================================================
> ==./src/c/test_avro_zigzag.c
> = 
> ======================================================================
> #include <apr.h>
> #include <apr_pools.h>
> #include <apr_buckets.h>
> #include <apr_file_io.h>
> #include <stdlib.h>
> #include "avro.h"
> #include "error.h"
>
> struct test_case
> {
>  int64_t value;
>  unsigned len;
>  uint8_t bytes[16];
> };
> typedef struct test_case test_case;
>
> static const test_case test_cases[] = {
>  {0, 1, {0x0}},
>  {-1, 1, {0x1}},
>  {1, 1, {0x2}},
>  {-2, 1, {0x3}},
>  {2, 1, {0x4}},
>  {-64, 1, {0x7f}},
>  {64, 2, {0x80, 0x01}},
>  {-65, 2, {0x81, 0x01}},
>  {65, 2, {0x82, 0x01}}
> };
>
> int
> main (void)
> {
>  apr_pool_t *pool;
>  AVRO avro_in, avro_out;
>  avro_status_t avro_status;
>  char buf[1024];
>  int64_t value_in, value_out;
>  int i, j;
>
>  apr_initialize ();
>  atexit (apr_terminate);
>
>  apr_pool_create (&pool, NULL);
>
>  for (i = 0; i < sizeof (test_cases) / sizeof (test_cases[0]); i++)
>    {
>      const test_case *tc = test_cases + i;
>      avro_status =
> 	avro_create_memory (&avro_in, pool, buf, sizeof (buf), AVRO_ENCODE);
>      if (avro_status != AVRO_OK)
> 	{
>
> = 
> ======================================================================
> ==./src/c/test_json_parser.c
> = 
> ======================================================================
> #include <stdio.h>
> #include <stdlib.h>
> #include <string.h>
> #include <sys/types.h>
> #include <dirent.h>
>
> #include <apr.h>
> #include <apr_pools.h>
>
> #include "json.h"
>
> #define TRACING 1
>
> static struct test_dir
> {
>  char *path;
>  int shouldFail;
> } test_dirs[] =
> {
>  {
>  "json/pass", 0},
>  {
>  "json/fail", 1}
> };
>
> #define NUM_TEST_DIRS (sizeof(test_dirs)/sizeof(test_dirs[0]))
>
> FILE *trace = NULL;
>
> int
> main (int argc, char *argv[])
> {
>  FILE *file;
>  DIR *dir;
>  struct dirent *dent;
>  int i, fd, processed;
>  char buf[1024];
>  apr_pool_t *pool;
>  JSON_value *value;
>
>  apr_initialize ();
>  atexit (apr_terminate);
>
>  apr_pool_create (&pool, NULL);
>
> #if TRACING
>  trace = fopen ("trace.txt", "w");
>  if (trace == NULL)
>    {
>      return EXIT_FAILURE;
>
> = 
> ======================================================================
> ==./src/c/trace.txt
> = 
> ======================================================================
> { "three" : null }
> Input LCURLY
> { "three" : null }
> Shift 4
> { "three" : null }
> Stack: LCURLY
> { "three" : null }
> Input STRING
> { "three" : null }
> Reduce [member_list ::=].
> { "three" : null }
> Shift 8
> { "three" : null }
> Stack: LCURLY member_list
> { "three" : null }
> Shift 9
> { "three" : null }
> Stack: LCURLY member_list STRING
> { "three" : null }
> Input COLON
> { "three" : null }
> Shift 2
> { "three" : null }
> Stack: LCURLY member_list STRING COLON
> { "three" : null }
> Input NULL
> { "three" : null }
> Shift 20
> { "three" : null }
> Stack: LCURLY member_list STRING COLON NULL
> { "three" : null }
> Input RCURLY
> { "three" : null }
> Reduce [value ::= NULL].
> { "three" : null }
> Shift 24
> { "three" : null }
> Stack: LCURLY member_list STRING COLON value
> { "three" : null }
> Reduce [members ::= member_list STRING COLON value].
> { "three" : null }
> Shift 6
> { "three" : null }
> Stack: LCURLY members
> { "three" : null }
> Shift 23
> { "three" : null }
> Stack: LCURLY members RCURLY
> { "three" : null }
> Input $
>
> = 
> ======================================================================
> ==./src/c/autom4te.cache/output.0
> = 
> ======================================================================
> @%:@! /bin/sh
> @%:@ Guess values for system-dependent variables and create Makefiles.
> @%:@ Generated by GNU Autoconf 2.63 for avro-c 0.1.0.
> @%:@
> @%:@ Report bugs to <ma...@cloudera.com>.
> @%:@
> @%:@ Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000,  
> 2001,
> @%:@ 2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software  
> Foundation, Inc.
> @%:@ This configure script is free software; the Free Software  
> Foundation
> @%:@ gives unlimited permission to copy, distribute and modify it.
> ## --------------------- ##
> ## M4sh Initialization.  ##
> ## --------------------- ##
>
> # Be more Bourne compatible
> DUALCASE=1; export DUALCASE # for MKS sh
> if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
>  emulate sh
>  NULLCMD=:
>  # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
>  # is contrary to our usage.  Disable this feature.
>  alias -g '${1+"$@"}'='"$@"'
>  setopt NO_GLOB_SUBST
> else
>  case `(set -o) 2>/dev/null` in
>  *posix*) set -o posix ;;
> esac
>
> fi
>
>
>
>
> # PATH needs CR
> # Avoid depending upon Character Ranges.
> as_cr_letters='abcdefghijklmnopqrstuvwxyz'
> as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
> as_cr_Letters=$as_cr_letters$as_cr_LETTERS
> as_cr_digits='0123456789'
> as_cr_alnum=$as_cr_Letters$as_cr_digits
>
> as_nl='
> '
> export as_nl
> # Printing a long string crashes Solaris 7 /usr/bin/printf.
> as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ 
> \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
> as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo
> as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo
> if (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then
>  as_echo='printf %s\n'
>
> = 
> ======================================================================
> ==./src/c/autom4te.cache/output.1
> = 
> ======================================================================
> @%:@! /bin/sh
> @%:@ Guess values for system-dependent variables and create Makefiles.
> @%:@ Generated by GNU Autoconf 2.63 for avro-c 0.1.0.
> @%:@
> @%:@ Report bugs to <ma...@cloudera.com>.
> @%:@
> @%:@ Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000,  
> 2001,
> @%:@ 2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software  
> Foundation, Inc.
> @%:@ This configure script is free software; the Free Software  
> Foundation
> @%:@ gives unlimited permission to copy, distribute and modify it.
> ## --------------------- ##
> ## M4sh Initialization.  ##
> ## --------------------- ##
>
> # Be more Bourne compatible
> DUALCASE=1; export DUALCASE # for MKS sh
> if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
>  emulate sh
>  NULLCMD=:
>  # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
>  # is contrary to our usage.  Disable this feature.
>  alias -g '${1+"$@"}'='"$@"'
>  setopt NO_GLOB_SUBST
> else
>  case `(set -o) 2>/dev/null` in
>  *posix*) set -o posix ;;
> esac
>
> fi
>
>
>
>
> # PATH needs CR
> # Avoid depending upon Character Ranges.
> as_cr_letters='abcdefghijklmnopqrstuvwxyz'
> as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
> as_cr_Letters=$as_cr_letters$as_cr_LETTERS
> as_cr_digits='0123456789'
> as_cr_alnum=$as_cr_Letters$as_cr_digits
>
> as_nl='
> '
> export as_nl
> # Printing a long string crashes Solaris 7 /usr/bin/printf.
> as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ 
> \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
> as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo
> as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo
> if (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then
>  as_echo='printf %s\n'
>
> = 
> ======================================================================
> ==./src/c/autom4te.cache/traces.0
> = 
> ======================================================================
> m4trace:/usr/share/aclocal/argz.m4:12: -1- AC_DEFUN([gl_FUNC_ARGZ],  
> [gl_PREREQ_ARGZ
>
> AC_CHECK_HEADERS([argz.h], [], [], [AC_INCLUDES_DEFAULT])
>
> AC_CHECK_TYPES([error_t],
>  [],
>  [AC_DEFINE([error_t], [int],
>   [Define to a type to use for `error_t' if it is not otherwise  
> available.])
>   AC_DEFINE([__error_t_defined], [1], [Define so that glibc/gnulib  
> argp.h
>    does not typedef error_t.])],
>  [#if defined(HAVE_ARGZ_H)
> #  include <argz.h>
> #endif])
>
> ARGZ_H=
> AC_CHECK_FUNCS([argz_add argz_append argz_count argz_create_sep  
> argz_insert \
> 	argz_next argz_stringify], [], [ARGZ_H=argz.h; AC_LIBOBJ([argz])])
>
> dnl if have system argz functions, allow forced use of
> dnl libltdl-supplied implementation (and default to do so
> dnl on "known bad" systems). Could use a runtime check, but
> dnl (a) detecting malloc issues is notoriously unreliable
> dnl (b) only known system that declares argz functions,
> dnl     provides them, yet they are broken, is cygwin
> dnl     releases prior to 16-Mar-2007 (1.5.24 and earlier)
> dnl So, it's more straightforward simply to special case
> dnl this for known bad systems.
> AS_IF([test -z "$ARGZ_H"],
>    [AC_CACHE_CHECK(
>        [if argz actually works],
>        [lt_cv_sys_argz_works],
>        [[case $host_os in #(
> 	 *cygwin*)
> 	   lt_cv_sys_argz_works=no
> 	   if test "$cross_compiling" != no; then
> 	     lt_cv_sys_argz_works="guessing no"
> 	   else
> 	     lt_sed_extract_leading_digits='s/^\([0-9\.]*\).*/\1/'
> 	     save_IFS=$IFS
> 	     IFS=-.
> 	     set x `uname -r | sed -e "$lt_sed_extract_leading_digits"`
> 	     IFS=$save_IFS
> 	     lt_os_major=${2-0}
> 	     lt_os_minor=${3-0}
> 	     lt_os_micro=${4-0}
> 	     if test "$lt_os_major" -gt 1 \
> 		|| { test "$lt_os_major" -eq 1 \
> 		  && { test "$lt_os_minor" -gt 5 \
> 		    || { test "$lt_os_minor" -eq 5 \
> 		      && test "$lt_os_micro" -gt 24; }; }; }; then
>
> = 
> ======================================================================
> ==./src/c/autom4te.cache/traces.1
> = 
> ======================================================================
> m4trace:configure.in:5: -1- AC_INIT([avro-c], [0.1.0], [matt@cloudera.com 
> ])
> m4trace:configure.in:5: -1- m4_pattern_forbid([^_?A[CHUM]_])
> m4trace:configure.in:5: -1- m4_pattern_forbid([_AC_])
> m4trace:configure.in:5: -1- m4_pattern_forbid([^LIBOBJS$], [do not  
> use LIBOBJS directly, use AC_LIBOBJ (see section `AC_LIBOBJ vs  
> LIBOBJS'])
> m4trace:configure.in:5: -1- m4_pattern_allow([^AS_FLAGS$])
> m4trace:configure.in:5: -1- m4_pattern_forbid([^_?m4_])
> m4trace:configure.in:5: -1- m4_pattern_forbid([^dnl$])
> m4trace:configure.in:5: -1- m4_pattern_forbid([^_?AS_])
> m4trace:configure.in:5: -1- AC_SUBST([SHELL], [${CONFIG_SHELL-/bin/ 
> sh}])
> m4trace:configure.in:5: -1- AC_SUBST_TRACE([SHELL])
> m4trace:configure.in:5: -1- m4_pattern_allow([^SHELL$])
> m4trace:configure.in:5: -1- AC_SUBST([PATH_SEPARATOR])
> m4trace:configure.in:5: -1- AC_SUBST_TRACE([PATH_SEPARATOR])
> m4trace:configure.in:5: -1- m4_pattern_allow([^PATH_SEPARATOR$])
> m4trace:configure.in:5: -1- AC_SUBST([PACKAGE_NAME],  
> [m4_ifdef([AC_PACKAGE_NAME],      ['AC_PACKAGE_NAME'])])
> m4trace:configure.in:5: -1- AC_SUBST_TRACE([PACKAGE_NAME])
> m4trace:configure.in:5: -1- m4_pattern_allow([^PACKAGE_NAME$])
> m4trace:configure.in:5: -1- AC_SUBST([PACKAGE_TARNAME],  
> [m4_ifdef([AC_PACKAGE_TARNAME],   ['AC_PACKAGE_TARNAME'])])
> m4trace:configure.in:5: -1- AC_SUBST_TRACE([PACKAGE_TARNAME])
> m4trace:configure.in:5: -1- m4_pattern_allow([^PACKAGE_TARNAME$])
> m4trace:configure.in:5: -1- AC_SUBST([PACKAGE_VERSION],  
> [m4_ifdef([AC_PACKAGE_VERSION],   ['AC_PACKAGE_VERSION'])])
> m4trace:configure.in:5: -1- AC_SUBST_TRACE([PACKAGE_VERSION])
> m4trace:configure.in:5: -1- m4_pattern_allow([^PACKAGE_VERSION$])
> m4trace:configure.in:5: -1- AC_SUBST([PACKAGE_STRING],  
> [m4_ifdef([AC_PACKAGE_STRING],    ['AC_PACKAGE_STRING'])])
> m4trace:configure.in:5: -1- AC_SUBST_TRACE([PACKAGE_STRING])
> m4trace:configure.in:5: -1- m4_pattern_allow([^PACKAGE_STRING$])
> m4trace:configure.in:5: -1- AC_SUBST([PACKAGE_BUGREPORT],  
> [m4_ifdef([AC_PACKAGE_BUGREPORT], ['AC_PACKAGE_BUGREPORT'])])
> m4trace:configure.in:5: -1- AC_SUBST_TRACE([PACKAGE_BUGREPORT])
> m4trace:configure.in:5: -1- m4_pattern_allow([^PACKAGE_BUGREPORT$])
> m4trace:configure.in:5: -1- AC_SUBST([exec_prefix], [NONE])
> m4trace:configure.in:5: -1- AC_SUBST_TRACE([exec_prefix])
> m4trace:configure.in:5: -1- m4_pattern_allow([^exec_prefix$])
> m4trace:configure.in:5: -1- AC_SUBST([prefix], [NONE])
> m4trace:configure.in:5: -1- AC_SUBST_TRACE([prefix])
> m4trace:configure.in:5: -1- m4_pattern_allow([^prefix$])
> m4trace:configure.in:5: -1- AC_SUBST([program_transform_name],  
> [s,x,x,])
> m4trace:configure.in:5: -1- AC_SUBST_TRACE([program_transform_name])
> m4trace:configure.in:5: -1- m4_pattern_allow([^program_transform_name 
> $])
> m4trace:configure.in:5: -1- AC_SUBST([bindir], ['${exec_prefix}/bin'])
> m4trace:configure.in:5: -1- AC_SUBST_TRACE([bindir])
> m4trace:configure.in:5: -1- m4_pattern_allow([^bindir$])
> m4trace:configure.in:5: -1- AC_SUBST([sbindir], ['${exec_prefix}/ 
> sbin'])
> m4trace:configure.in:5: -1- AC_SUBST_TRACE([sbindir])
> m4trace:configure.in:5: -1- m4_pattern_allow([^sbindir$])
> m4trace:configure.in:5: -1- AC_SUBST([libexecdir], ['${exec_prefix}/ 
> libexec'])
> m4trace:configure.in:5: -1- AC_SUBST_TRACE([libexecdir])
> m4trace:configure.in:5: -1- m4_pattern_allow([^libexecdir$])
> m4trace:configure.in:5: -1- AC_SUBST([datarootdir], ['${prefix}/ 
> share'])
> m4trace:configure.in:5: -1- AC_SUBST_TRACE([datarootdir])
> m4trace:configure.in:5: -1- m4_pattern_allow([^datarootdir$])
>
> = 
> ======================================================================
> ==./src/c/config/config.guess
> = 
> ======================================================================
> #! /bin/sh
> # Attempt to guess a canonical system name.
> #   Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
> #   2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008
> #   Free Software Foundation, Inc.
>
> timestamp='2008-01-23'
>
> # This file is free software; you can redistribute it and/or modify it
> # under the terms of the GNU General Public License as published by
> # the Free Software Foundation; either version 2 of the License, or
> # (at your option) any later version.
> #
> # This program is distributed in the hope that it will be useful, but
> # WITHOUT ANY WARRANTY; without even the implied warranty of
> # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
> # General Public License for more details.
> #
> # You should have received a copy of the GNU General Public License
> # along with this program; if not, write to the Free Software
> # Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA
> # 02110-1301, USA.
> #
> # As a special exception to the GNU General Public License, if you
> # distribute this file as part of a program that contains a
> # configuration script generated by Autoconf, you may include it under
> # the same distribution terms that you use for the rest of that  
> program.
>
>
> # Originally written by Per Bothner <pe...@bothner.com>.
> # Please send patches to <co...@gnu.org>.  Submit a context
> # diff and a properly formatted ChangeLog entry.
> #
> # This script attempts to guess a canonical system name similar to
> # config.sub.  If it succeeds, it prints the system name on stdout,  
> and
> # exits with 0.  Otherwise, it exits with 1.
> #
> # The plan is that this can be called by configure scripts if you
> # don't specify an explicit build system type.
>
> me=`echo "$0" | sed -e 's,.*/,,'`
>
> usage="\
> Usage: $0 [OPTION]
>
> Output the configuration name of the system \`$me' is run on.
>
> Operation modes:
>  -h, --help         print this help, then exit
>  -t, --time-stamp   print date of last modification, then exit
>
> = 
> ======================================================================
> ==./src/c/config/config.sub
> = 
> ======================================================================
> #! /bin/sh
> # Configuration validation subroutine script.
> #   Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
> #   2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008
> #   Free Software Foundation, Inc.
>
> timestamp='2008-01-16'
>
> # This file is (in principle) common to ALL GNU software.
> # The presence of a machine in this file suggests that SOME GNU  
> software
> # can handle that machine.  It does not imply ALL GNU software can.
> #
> # This file is free software; you can redistribute it and/or modify
> # it under the terms of the GNU General Public License as published by
> # the Free Software Foundation; either version 2 of the License, or
> # (at your option) any later version.
> #
> # This program is distributed in the hope that it will be useful,
> # but WITHOUT ANY WARRANTY; without even the implied warranty of
> # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> # GNU General Public License for more details.
> #
> # You should have received a copy of the GNU General Public License
> # along with this program; if not, write to the Free Software
> # Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA
> # 02110-1301, USA.
> #
> # As a special exception to the GNU General Public License, if you
> # distribute this file as part of a program that contains a
> # configuration script generated by Autoconf, you may include it under
> # the same distribution terms that you use for the rest of that  
> program.
>
>
> # Please send patches to <co...@gnu.org>.  Submit a context
> # diff and a properly formatted ChangeLog entry.
> #
> # Configuration subroutine to validate and canonicalize a  
> configuration type.
> # Supply the specified configuration type as an argument.
> # If it is invalid, we print an error message on stderr and exit  
> with code 1.
> # Otherwise, we print the canonical config type on stdout and succeed.
>
> # This file is supposed to be the same for all GNU packages
> # and recognize all the CPU types, system types and aliases
> # that are meaningful with *any* GNU software.
> # Each package is responsible for reporting which valid configurations
> # it does not support.  The user should be able to distinguish
> # a failure to support a valid configuration from a meaningless
> # configuration.
>
> # The goal of this file is to map all the various variations of a  
> given
>
> = 
> ======================================================================
> ==./src/c/config/depcomp
> = 
> ======================================================================
> #! /bin/sh
> # depcomp - compile a program generating dependencies as side-effects
>
> scriptversion=2007-03-29.01
>
> # Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006, 2007 Free Software
> # Foundation, Inc.
>
> # This program is free software; you can redistribute it and/or modify
> # it under the terms of the GNU General Public License as published by
> # the Free Software Foundation; either version 2, or (at your option)
> # any later version.
>
> # This program is distributed in the hope that it will be useful,
> # but WITHOUT ANY WARRANTY; without even the implied warranty of
> # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> # GNU General Public License for more details.
>
> # You should have received a copy of the GNU General Public License
> # along with this program; if not, write to the Free Software
> # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
> # 02110-1301, USA.
>
> # As a special exception to the GNU General Public License, if you
> # distribute this file as part of a program that contains a
> # configuration script generated by Autoconf, you may include it under
> # the same distribution terms that you use for the rest of that  
> program.
>
> # Originally written by Alexandre Oliva <ol...@dcc.unicamp.br>.
>
> case $1 in
>  '')
>     echo "$0: No command.  Try \`$0 --help' for more information."  
> 1>&2
>     exit 1;
>     ;;
>  -h | --h*)
>    cat <<\EOF
> Usage: depcomp [--help] [--version] PROGRAM [ARGS]
>
> Run PROGRAMS ARGS to compile a file, generating dependencies
> as side-effects.
>
> Environment variables:
>  depmode     Dependency tracking mode.
>  source      Source file read by `PROGRAMS ARGS'.
>  object      Object file output by `PROGRAMS ARGS'.
>  DEPDIR      directory where to store dependencies.
>  depfile     Dependency file to output.
>  tmpdepfile  Temporary file to use when outputing dependencies.
>  libtool     Whether libtool is used (yes/no).
>
> = 
> ======================================================================
> ==./src/c/config/install-sh
> = 
> ======================================================================
> #!/bin/sh
> # install - install a program, script, or datafile
>
> scriptversion=2006-12-25.00
>
> # This originates from X11R5 (mit/util/scripts/install.sh), which was
> # later released in X11R6 (xc/config/util/install.sh) with the
> # following copyright and license.
> #
> # Copyright (C) 1994 X Consortium
> #
> # Permission is hereby granted, free of charge, to any person  
> obtaining a copy
> # of this software and associated documentation files (the  
> "Software"), to
> # deal in the Software without restriction, including without  
> limitation the
> # rights to use, copy, modify, merge, publish, distribute,  
> sublicense, and/or
> # sell copies of the Software, and to permit persons to whom the  
> Software is
> # furnished to do so, subject to the following conditions:
> #
> # The above copyright notice and this permission notice shall be  
> included in
> # all copies or substantial portions of the Software.
> #
> # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,  
> EXPRESS OR
> # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF  
> MERCHANTABILITY,
> # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT  
> SHALL THE
> # X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,  
> WHETHER IN
> # AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR  
> IN CONNEC-
> # TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
> #
> # Except as contained in this notice, the name of the X Consortium  
> shall not
> # be used in advertising or otherwise to promote the sale, use or  
> other deal-
> # ings in this Software without prior written authorization from the  
> X Consor-
> # tium.
> #
> #
> # FSF changes to this file are in the public domain.
> #
> # Calling this script install-sh is preferred over install.sh, to  
> prevent
> # `make' implicit rules from creating a file called install from it
> # when there is no Makefile.
> #
> # This script is compatible with the BSD install script, but was  
> written
> # from scratch.
>
> nl='
> '
> IFS=" ""	$nl"
>
> # set DOITPROG to echo to test this script
>
> # Don't use :- since 4.3BSD and earlier shells don't like it.
>
> = 
> ======================================================================
> ==./src/c/config/ltmain.sh
> = 
> ======================================================================
> # Generated from ltmain.m4sh.
>
> # ltmain.sh (GNU libtool) 2.2.6
> # Written by Gordon Matzigkeit <go...@gnu.ai.mit.edu>, 1996
>
> # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004,  
> 2005, 2006, 2007 2008 Free Software Foundation, Inc.
> # This is free software; see the source for copying conditions.   
> There is NO
> # warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR  
> PURPOSE.
>
> # GNU Libtool is free software; you can redistribute it and/or modify
> # it under the terms of the GNU General Public License as published by
> # the Free Software Foundation; either version 2 of the License, or
> # (at your option) any later version.
> #
> # As a special exception to the GNU General Public License,
> # if you distribute this file as part of a program or library that
> # is built using GNU Libtool, you may include this file under the
> # same distribution terms that you use for the rest of that program.
> #
> # GNU Libtool is distributed in the hope that it will be useful, but
> # WITHOUT ANY WARRANTY; without even the implied warranty of
> # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
> # General Public License for more details.
> #
> # You should have received a copy of the GNU General Public License
> # along with GNU Libtool; see the file COPYING.  If not, a copy
> # can be downloaded from http://www.gnu.org/licenses/gpl.html,
> # or obtained by writing to the Free Software Foundation, Inc.,
> # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
>
> # Usage: $progname [OPTION]... [MODE-ARG]...
> #
> # Provide generalized library-building support services.
> #
> #     --config             show all configuration variables
> #     --debug              enable verbose shell tracing
> # -n, --dry-run            display commands without modifying any  
> files
> #     --features           display basic configuration information  
> and exit
> #     --mode=MODE          use operation mode MODE
> #     --preserve-dup-deps  don't remove duplicate dependency libraries
> #     --quiet, --silent    don't print informational messages
> #     --tag=TAG            use configuration variables from tag TAG
> # -v, --verbose            print informational messages (default)
> #     --version            print version information
> # -h, --help               print short or long help message
> #
> # MODE must be one of the following:
> #
> #       clean              remove files from the build directory
> #       compile            compile a source file into a libtool object
>
> = 
> ======================================================================
> ==./src/c/config/missing
> = 
> ======================================================================
> #! /bin/sh
> # Common stub for a few missing GNU programs while installing.
>
> scriptversion=2006-05-10.23
>
> # Copyright (C) 1996, 1997, 1999, 2000, 2002, 2003, 2004, 2005, 2006
> #   Free Software Foundation, Inc.
> # Originally by Fran,cois Pinard <pi...@iro.umontreal.ca>, 1996.
>
> # This program is free software; you can redistribute it and/or modify
> # it under the terms of the GNU General Public License as published by
> # the Free Software Foundation; either version 2, or (at your option)
> # any later version.
>
> # This program is distributed in the hope that it will be useful,
> # but WITHOUT ANY WARRANTY; without even the implied warranty of
> # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> # GNU General Public License for more details.
>
> # You should have received a copy of the GNU General Public License
> # along with this program; if not, write to the Free Software
> # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
> # 02110-1301, USA.
>
> # As a special exception to the GNU General Public License, if you
> # distribute this file as part of a program that contains a
> # configuration script generated by Autoconf, you may include it under
> # the same distribution terms that you use for the rest of that  
> program.
>
> if test $# -eq 0; then
>  echo 1>&2 "Try \`$0 --help' for more information"
>  exit 1
> fi
>
> run=:
> sed_output='s/.* --output[ =]\([^ ]*\).*/\1/p'
> sed_minuso='s/.* -o \([^ ]*\).*/\1/p'
>
> # In the cases where this matters, `missing' is being run in the
> # srcdir already.
> if test -f configure.ac; then
>  configure_ac=configure.ac
> else
>  configure_ac=configure.in
> fi
>
> msg="missing on your system"
>
> case $1 in
> --run)
>
> = 
> ======================================================================
> ==./src/c/docs/doxygen.conf
> = 
> ======================================================================
> PROJECT_NAME="AVRO C API"
>
> INPUT=.
> QUIET=YES
> RECURSIVE=YES
> FILE_PATTERNS=*.h
>
> #OUTPUT_DIRECTORY=docs/dox
>
> MACRO_EXPANSION=YES
> EXPAND_ONLY_PREDEF=YES
> #EXPAND_AS_DEFINED=
> #PREDEFINED
>
> OPTIMIZE_OUTPUT_FOR_C=YES
> STRIP_CODE_COMMENTS=NO
>
> FULL_PATH_NAMES=NO
> CASE_SENSE_NAMES=NO
> #STRIP_FROM_PATH=
>
> EXCLUDE_PATTERNS=config.h dump.h error.h
>
> #GENERATE_TAGFILE=
>
> = 
> ======================================================================
> ==./src/c/json/fail/array_not_closed
> = 
> ======================================================================
> [
>
> = 
> ======================================================================
> ==./src/c/json/fail/array_not_opened
> = 
> ======================================================================
> ]
>
> = 
> ======================================================================
> ==./src/c/json/fail/array_with_start_coma
> = 
> ======================================================================
> [ , "foo" ]
>
> = 
> ======================================================================
> ==./src/c/json/fail/object_malformed
> = 
> ======================================================================
> {"foo:"}
>
> = 
> ======================================================================
> ==./src/c/json/fail/object_not_closed
> = 
> ======================================================================
> {
>
> = 
> ======================================================================
> ==./src/c/json/fail/object_not_opened
> = 
> ======================================================================
> }
>
> = 
> ======================================================================
> ==./src/c/json/fail/object_with_start_coma
> = 
> ======================================================================
> {,"foo" : "bar" }
>
> = 
> ======================================================================
> ==./src/c/json/fail/object_with_string
> = 
> ======================================================================
> { "Fail" }
>
> = 
> ======================================================================
> ==./src/c/json/fail/object_without_one_value
> = 
> ======================================================================
> { "one", "two": "foobar" }
>
> = 
> ======================================================================
> ==./src/c/json/pass/array_multidimensional
> = 
> ======================================================================
> [ [ "one", "array" ], [ "two", "array" ], [ "three", [ "four" ] ] ]
>
> = 
> ======================================================================
> ==./src/c/json/pass/array_with_false
> = 
> ======================================================================
> [ false ]
>
> = 
> ======================================================================
> ==./src/c/json/pass/array_with_ints
> = 
> ======================================================================
> [ 1, 1.0, -1, 3e4, 3e+5, 3e-10, 2.0E+13, 44E-2 ]
>
> = 
> ======================================================================
> ==./src/c/json/pass/array_with_null
> = 
> ======================================================================
> [ null ]
>
> = 
> ======================================================================
> ==./src/c/json/pass/array_with_objects
> = 
> ======================================================================
> [ { "foo" : "bar" }, {"baz": "value"}
> ]
>
> = 
> ======================================================================
> ==./src/c/json/pass/array_with_string
> = 
> ======================================================================
> [ "Hi" ]
>
> = 
> ======================================================================
> ==./src/c/json/pass/array_with_true
> = 
> ======================================================================
> [ true ]
>
> = 
> ======================================================================
> ==./src/c/json/pass/empty_array
> = 
> ======================================================================
> []
>
> = 
> ======================================================================
> ==./src/c/json/pass/empty_object
> = 
> ======================================================================
> {}
>
> = 
> ======================================================================
> ==./src/c/json/pass/object_with_false
> = 
> ======================================================================
> { "two" : false }
>
> = 
> ======================================================================
> ==./src/c/json/pass/object_with_multiple_members
> = 
> ======================================================================
> { "one" : "value",
> "two" : "value",
> "three" : "value" }
>
> = 
> ======================================================================
> ==./src/c/json/pass/object_with_null
> = 
> ======================================================================
> { "three" : null }
>
> = 
> ======================================================================
> ==./src/c/json/pass/object_with_object_member
> = 
> ======================================================================
> { "foo" : { "This" : "works" } }
>
> = 
> ======================================================================
> ==./src/c/json/pass/object_with_one_member
> = 
> ======================================================================
> { "key" : "value" }
>
> = 
> ======================================================================
> ==./src/c/json/pass/object_with_true
> = 
> ======================================================================
> { "one" : true }
>
> = 
> ======================================================================
> ==./src/c++/Doxyfile
> = 
> ======================================================================
> # Doxyfile 1.4.3
>
> # This file describes the settings to be used by the documentation  
> system
> # doxygen (www.doxygen.org) for a project
> #
> # All text after a hash (#) is considered a comment and will be  
> ignored
> # The format is:
> #       TAG = value [value, ...]
> # For lists items can also be appended using:
> #       TAG += value [value, ...]
> # Values that contain spaces should be placed between quotes (" ")
>
> #---------------------------------------------------------------------------
> # Project related configuration options
> #---------------------------------------------------------------------------
>
> # The PROJECT_NAME tag is a single word (or a sequence of words  
> surrounded
> # by quotes) that should identify the project.
>
> PROJECT_NAME           =  "Avro C++"
>
> # The PROJECT_NUMBER tag can be used to enter a project or revision  
> number.
> # This could be handy for archiving the generated documentation or
> # if some version control system is used.
>
> PROJECT_NUMBER         =
>
> # The OUTPUT_DIRECTORY tag is used to specify the (relative or  
> absolute)
> # base path where the generated documentation will be put.
> # If a relative path is entered, it will be relative to the location
> # where doxygen was started. If left blank the current directory  
> will be used.
>
> OUTPUT_DIRECTORY       =  doc
>
> # If the CREATE_SUBDIRS tag is set to YES, then doxygen will create
> # 4096 sub-directories (in 2 levels) under the output directory of  
> each output
> # format and will distribute the generated files over these  
> directories.
> # Enabling this option can be useful when feeding doxygen a huge  
> amount of
> # source files, where putting all generated files in the same  
> directory would
> # otherwise cause performance problems for the file system.
>
> CREATE_SUBDIRS         = NO
>
> # The OUTPUT_LANGUAGE tag is used to specify the language in which all
> # documentation generated by doxygen is written. Doxygen will use this
> # information to generate all constant output in the proper language.
> # The default language is English, other supported languages are:
> # Brazilian, Catalan, Chinese, Chinese-Traditional, Croatian, Czech,  
> Danish,
> # Dutch, Finnish, French, German, Greek, Hungarian, Italian, Japanese,
> # Japanese-en (Japanese with English messages), Korean, Korean-en,  
> Norwegian,
>
> = 
> ======================================================================
> ==./src/c++/Makefile
> = 
> ======================================================================
>
> system=$(shell uname)
> include System.$(system).mk
>
> INCFLAGS = -I./api -I./parser -I.
> INCFLAGS += -isystem$(BOOSTINC)
>
> LIBS = $(BOOSTREGEX)
>
> OBJDIR = obj
>
> SOURCES := $(wildcard impl/*.cc)
> INCS    := $(wildcard api/*.hh)
> files := $(SOURCES:impl/%.cc=%)
> OBJS := $(files:%=$(OBJDIR)/%.o)
> DEPENDS := $(files:%=$(OBJDIR)/%.d)
>
> OJBS += $(OBJDIR)/parserlib.o
>
> GENERATED = avro.tab.h avro.tab.c lex.yy.cc
> GENERATEDSRCS = $(GENERATED:%=parser/%)
> GENERATEDobjs = $(addsuffix .o, $(sort $(basename $(GENERATED))) )
> GENERATEDOBJS = $(GENERATEDobjs:%=$(OBJDIR)/%)
>
> EXECS = unittest testparser precompile testgen
>
> all : $(OBJDIR)/avrolib.a $(EXECS)
>
> CXXFLAGS = -Wall -g
>
> $(OBJDIR)/avrolib.a : $(OBJS) $(GENERATEDOBJS)
> 	ar ruc $@ $^
> 	ranlib $@
>
> unittest : test/unittest.cc $(OBJDIR)/avrolib.a $(INCS)
> 	$(CXX) $(CXXFLAGS) $(INCFLAGS) -o $@ $< $(OBJDIR)/avrolib.a $(LIBS)
> 	./unittest
>
> $(OBJDIR)/%.o : impl/%.cc
> 	$(CXX) $(CXXFLAGS) $(INCFLAGS) -c -o $@ $<
>
> $(OBJDIR)/%.d : impl/%.cc
> 	mkdir -p $(OBJDIR)
> 	$(CXX) $(CXXFLAGS) $(INCFLAGS) -MM -MP -MT $(OBJDIR)/$*.o -MT $@ - 
> MF $@ $<
>
> parser/lex.yy.cc : parser/avro.l parser/avro.tab.h
> 	$(LEX) -oparser/lex.yy.cc parser/avro.l
>
> parser/avro.tab.h parser/avro.tab.c : parser/avro.y
> 	$(YACC) -d --file-prefix=parser/avro parser/avro.y
>
> = 
> ======================================================================
> ==./src/c++/System.Darwin.mk
> = 
> ======================================================================
>
> BOOSTPATH=/Users/sbanacho/boost_1_39_0
> BOOSTLIB=$(BOOSTPATH)/stage/lib
> BOOSTINC=$(BOOSTPATH)
>
> BOOSTREGEX=$(BOOSTLIB)/libboost_regex-gcc40-mt.a
>
> # tested with flex 2.5.4 and 2.5.33
> LEX=/usr/bin/flex
>
> # tested with bison 1.28, 1.875c, and 2.3
> YACC=/usr/bin/bison
>
> = 
> ======================================================================
> ==./src/c++/System.Linux.mk
> = 
> ======================================================================
>
> BOOSTLIB=/usr/lib
> BOOSTINC=/usr/include/boost
>
> BOOSTREGEX=$(BOOSTLIB)/libboost_regex-gcc42-mt-1_34_1.a
>
> # tested with flex 2.5.4 and 2.5.33
> LEX=/usr/bin/flex
>
> # tested with bison 1.28, 1.875c, and 2.3
> YACC=/usr/bin/bison
>
> = 
> ======================================================================
> ==./src/c++/api/AvroParse.hh
> = 
> ======================================================================
> #ifndef avro_AvroParse_hh__
> #define avro_AvroParse_hh__
>
> #include <boost/static_assert.hpp>
> #include "AvroTraits.hh"
>
> /// \file
> ///
> /// Standalone parse functions for Avro types.
>
> namespace avro {
>
> /// The main parse entry point function.  Takes a parser (either  
> validating or
> /// plain) and the object that should receive the parsed data.
>
> template <typename Parser, typename T>
> void parse(Parser &p, T& val)
> {
>    parse(p, val, is_serializable<T>());
> }
>
> /// Type trait should be set to is_serializable in otherwise force  
> the compiler to complain.
>
> template <typename Parser, typename T>
> void parse(Parser &p, T& val, const boost::false_type &)
> {
>    BOOST_STATIC_ASSERT(sizeof(T)==0);
> }
>
> /// The remainder of the file includes default implementations for  
> serializable types.
>
> // @{
>
> template <typename Parser>
> void parse(Parser &p, int32_t &val, const boost::true_type &) {
>    val = p.getInt();
> }
>
> template <typename Parser>
> void parse(Parser &p, int64_t &val, const boost::true_type &) {
>    val = p.getLong();
> }
>
> template <typename Parser>
> void parse(Parser &p, float &val, const boost::true_type &) {
>    val = p.getFloat();
> }
>
> template <typename Parser>
> void parse(Parser &p, double &val, const boost::true_type &) {
>
> = 
> ======================================================================
> ==./src/c++/api/AvroSerialize.hh
> = 
> ======================================================================
> #ifndef avro_AvroSerialize_hh__
> #define avro_AvroSerialize_hh__
>
> #include <boost/static_assert.hpp>
> #include "AvroTraits.hh"
>
> /// \file
> ///
> /// Standalone serialize functions for Avro types.
>
> namespace avro {
>
> /// The main serializer entry point function.  Takes a serializer  
> (either validating or
> /// plain) and the object that should be serialized.
>
> template <typename Writer, typename T>
> void serialize(Writer &s, const T& val)
> {
>    serialize(s, val, is_serializable<T>());
> }
>
> /// Type trait should be set to is_serializable in otherwise force  
> the compiler to complain.
>
> template <typename Writer, typename T>
> void serialize(Writer &s, const T& val, const boost::false_type &)
> {
>    BOOST_STATIC_ASSERT(sizeof(T)==0);
> }
>
> /// The remainder of the file includes default implementations for  
> serializable types.
>
> // @{
>
> template <typename Writer, typename T>
> void serialize(Writer &s, T val, const boost::true_type &) {
>    s.putValue(val);
> }
>
> template <typename Writer>
> void serialize(Writer &s, const std::vector<uint8_t> &val, const  
> boost::true_type &) {
>    s.putBytes(&val[0], val.size());
> }
>
> // @}
>
> } // namespace avro
>
> #endif
>
> = 
> ======================================================================
> ==./src/c++/api/AvroTraits.hh
> = 
> ======================================================================
> #ifndef avro_AvroTraits_hh__
> #define avro_AvroTraits_hh__
>
> #include <boost/type_traits.hpp>
>
> #include "Types.hh"
>
> /// \file
> ///
> /// Define an is_serializable trait for types we can serialize  
> natively.
> /// New types will need to define the trait as well.
>
> namespace avro {
>
> template <typename T>
> struct is_serializable : public boost::false_type{};
>
> template <typename T>
> struct type_to_avro {
>    static const Type type = AVRO_NUM_TYPES;
> };
>
> #define DEFINE_PRIMITIVE(CTYPE, AVROTYPE) \
> template <> \
> struct is_serializable<CTYPE> : public boost::true_type{}; \
> \
> template <> \
> struct type_to_avro<CTYPE> { \
>    static const Type type = AVROTYPE; \
> };
>
> DEFINE_PRIMITIVE(int32_t, AVRO_INT)
> DEFINE_PRIMITIVE(int64_t, AVRO_LONG)
> DEFINE_PRIMITIVE(float, AVRO_FLOAT)
> DEFINE_PRIMITIVE(double, AVRO_DOUBLE)
> DEFINE_PRIMITIVE(bool, AVRO_BOOL)
> DEFINE_PRIMITIVE(Null, AVRO_NULL)
> DEFINE_PRIMITIVE(std::string, AVRO_STRING)
> DEFINE_PRIMITIVE(std::vector<uint8_t>, AVRO_BYTES)
>
>
> } // namespace avro
>
> #endif
>
> = 
> ======================================================================
> ==./src/c++/api/AvroTypes.hh
> = 
> ======================================================================
>
> = 
> ======================================================================
> ==./src/c++/api/Compiler.hh
> = 
> ======================================================================
> #ifndef avro_Compiler_hh__
> #define avro_Compiler_hh__
>
> #include <vector>
>
> #include <FlexLexer.h>
> #include "Types.hh"
> #include "Node.hh"
> #include "SymbolMap.hh"
>
> namespace avro {
>
> /// This class is used to implement an avro spec parser using a flex/ 
> bison
> /// compiler.  In order for the lexer to be reentrant, this class  
> provides a
> /// lexer object for each parse.  The bison parser also uses this  
> class to
> /// build up an avro parse tree as the avro spec is parsed.
>
> class CompilerContext {
>
>  public:
>
>    CompilerContext(std::istream &is) :
>        lexer_(&is),
>        size_(0),
>        inEnum_(false)
>    {}
>
>    /// Called by the lexer whenever it encounters text that is not a  
> symbol it recognizes
>    /// (names, fieldnames, values to be converted to integers, etc).
>    void setText(const char *text) {
>        text_ = text;
>    }
>
>    void addRecord();
>    void addEnum();
>    void addArray();
>    void addMap();
>    void addUnion();
>    void addFixed();
>
>    void endCompound(avro::Type type);
>
>    void addPrimitive(avro::Type type);
>    void addSymbol();
>    void addSize();
>
>    void addName();
>    void addFieldName();
>
>    const FlexLexer &lexer() const {
>
> = 
> ======================================================================
> ==./src/c++/api/Exception.hh
> = 
> ======================================================================
> #ifndef avro_Exception_hh__
> #define avro_Exception_hh__
>
> #include <stdexcept>
>
> namespace avro {
>
> typedef std::runtime_error Exception;
>
> } // namespace avro
>
> #endif
>
> = 
> ======================================================================
> ==./src/c++/api/InputStreamer.hh
> = 
> ======================================================================
> #ifndef avro_InputStreamer_hh__
> #define avro_InputStreamer_hh__
>
> #include <iostream>
>
> namespace avro {
>
> ///
> /// A generic object for reading inputs from a stream.  Serves as a  
> base class,
> /// so that avro parser objects can read from different sources (for  
> example,
> /// istreams or blocks of memory),  but the derived class provides the
> /// implementation for the different source.
> ///
> /// Right now this class is very bare-bones.
> ///
>
> class InputStreamer {
>
>  public:
>
>    virtual ~InputStreamer()
>    { }
>
>    virtual size_t getByte(uint8_t &byte) = 0;
>    virtual size_t getWord(uint32_t &word) = 0;
>    virtual size_t getLongWord(uint64_t &word) = 0;
>    virtual size_t getBytes(uint8_t *bytes, size_t size) = 0;
> };
>
>
> ///
> /// An implementation of InputStreamer that uses a std::istream for  
> input.
> ///
> /// Right now this class is very bare-bones, without much in way of  
> error
> /// handling.
> ///
>
> class IStreamer : public InputStreamer {
>
>  public:
>
>    IStreamer(std::istream &is) :
>        is_(is)
>    {}
>
>    size_t getByte(uint8_t &byte) {
>        char val;
>        is_.get(val);
>        byte = val;
>        return 1;
>
> = 
> ======================================================================
> ==./src/c++/api/Node.hh
> = 
> ======================================================================
> #ifndef avro_Node_hh__
> #define avro_Node_hh__
>
> #include <cassert>
> #include <boost/noncopyable.hpp>
> #include <boost/intrusive_ptr.hpp>
>
> #include "Exception.hh"
> #include "Types.hh"
>
> namespace avro {
>
> class Node;
>
> typedef boost::intrusive_ptr<Node> NodePtr;
>
>
> /// Node is the building block for parse trees.  Each node  
> represents an avro
> /// type.  Compound types have leaf nodes that represent the types  
> they are
> /// composed of.
> ///
> /// The user does not use the Node object directly, they interface  
> with Schema
> /// objects.
> ///
> /// The Node object has an embedded reference count for use in the
> /// boost::intrusive_ptr smart pointer.  This is so that schemas may  
> be reused
> /// in other other schemas, without needing to worry about memory  
> deallocation
> /// for nodes that are added to multiple schema parse trees.
> ///
> /// Node has minimal implementation, serving as an abstract base  
> class for
> /// different node types.
> ///
>
> class Node : private boost::noncopyable
> {
>  public:
>
>    Node(Type type) :
>        type_(type),
>        refCount_(0),
>        locked_(false)
>    {}
>
>    virtual ~Node();
>
>    Type type() const {
>        return type_;
>    }
>
>    void lock() {
>
> = 
> ======================================================================
> ==./src/c++/api/NodeConcepts.hh
> = 
> ======================================================================
> #ifndef avro_NodeConcepts_hh__
> #define avro_NodeConcepts_hh__
>
> #include <vector>
>
> namespace avro {
>
>
> ///
> /// The concept classes are used to simplify NodeImpl.  Since  
> different types
> /// of avro types carry different attributes, such as names, or  
> field names for
> /// record members.  Using the concept class of NoAttribute vs  
> Attribute, the
> /// NodeImpl object can enable/disable the attribute, but the code  
> is the same
> /// in either case.
> ///
> /// Furthermore, attributes may have different types, for example,  
> most
> /// attributes are strings, but fixed types have a size attribute,  
> which is
> /// integer.
> ///
> /// Since compound types are composed of other types, the leaf  
> attribute
> /// concepts extend a NodeImpl to include leaf nodes, and attributes  
> for leaf
> /// nodes, which are used to build parse trees.
> ///
> ///
>
> namespace concepts {
>
> template <typename Attribute>
> struct NoAttribute
> {
>    static const bool hasAttribute = false;
>
>    const Attribute &get() const {
>        static Attribute empty;
>        throw Exception("This type does not have attribute");
>        return empty;
>    }
>
>    void set(const Attribute &value) {
>        throw Exception("This type does not have attribute");
>    }
> };
>
> template <typename Attribute>
> struct HasAttribute
> {
>    static const bool hasAttribute = true;
>
>    const Attribute &get() const {
>        return val_;
>
> = 
> ======================================================================
> ==./src/c++/api/NodeImpl.hh
> = 
> ======================================================================
> #ifndef avro_NodeImpl_hh__
> #define avro_NodeImpl_hh__
>
> #include <limits>
>
> #include "Node.hh"
> #include "NodeConcepts.hh"
>
> namespace avro {
>
> /// Implementation details for Node.  NodeImpl represents all the  
> avro types,
> /// whose properties are enabled are disabled by selecting concept  
> classes.
>
> template
> <
>    class NameConcept,
>    class LeavesConcept,
>    class LeafNamesConcept,
>    class SizeConcept
>>
> class NodeImpl : public Node
> {
>
>  protected:
>
>    NodeImpl(Type type, size_t minLeaves = 0, size_t maxLeaves = 0) :
>        Node(type),
>        leafAttributes_(minLeaves, maxLeaves),
>        leafNamesAttributes_(minLeaves, maxLeaves)
>    { }
>
>    bool hasName() const {
>        return nameAttribute_.hasAttribute;
>    }
>
>    void doSetName(const std::string &name) {
>        nameAttribute_.set(name);
>    }
>
>    const std::string &name() const {
>        return nameAttribute_.get();
>    }
>
>    void doAddLeaf(const NodePtr &newLeaf) {
>        leafAttributes_.add(newLeaf);
>    }
>
>    size_t leaves() const {
>        return leafAttributes_.size();
>    }
>
> = 
> ======================================================================
> ==./src/c++/api/OutputStreamer.hh
> = 
> ======================================================================
> #ifndef avro_OutputStreamer_hh__
> #define avro_OutputStreamer_hh__
>
> #include <iostream>
>
> namespace avro {
>
> ///
> /// A generic object for outputing data to a stream.
> ///
> /// Serves as a base class, so that avro serializer objects can  
> write to
> /// different sources (for example, istreams or blocks of memory),   
> but the
> /// derived class provides the implementation for the different  
> source.
> ///
> /// Right now this class is very bare-bones.
> ///
>
> class OutputStreamer {
>
>  public:
>
>    virtual ~OutputStreamer()
>    { }
>
>    virtual size_t putByte(uint8_t byte) = 0;
>    virtual size_t putWord(uint32_t word) = 0;
>    virtual size_t putLongWord(uint64_t word) = 0;
>    virtual size_t putBytes(const uint8_t *bytes, size_t size) = 0;
> };
>
>
> ///
> /// An implementation of OutputStreamer that writes bytes to screen  
> in ascii
> /// representation of the hex digits, used for debugging.
> ///
>
> class ScreenStreamer : public OutputStreamer {
>
>    size_t putByte(uint8_t byte) {
>        std::cout << "0x" << std::hex << static_cast<int32_t>(byte)  
> << std::dec << " ";
>        return 1;
>    }
>
>    size_t putWord(uint32_t word) {
>        ScreenStreamer::putBytes(reinterpret_cast<uint8_t *>(&word),  
> sizeof(word));
>        return sizeof(uint32_t);
>    }
>
>    size_t putLongWord(uint64_t word) {
>        ScreenStreamer::putBytes(reinterpret_cast<uint8_t *>(&word),  
> sizeof(word));
>
> = 
> ======================================================================
> ==./src/c++/api/Parser.hh
> = 
> ======================================================================
> #ifndef avro_Parser_hh__
> #define avro_Parser_hh__
>
> #include <stdint.h>
> #include <vector>
> #include <boost/noncopyable.hpp>
>
> #include "InputStreamer.hh"
> #include "Zigzag.hh"
>
> namespace avro {
>
> ///
> /// Parses from an avro encoding to the requested type.  Assumes the  
> next item
> /// in the avro binary data is the expected type.
> ///
>
> class Parser : private boost::noncopyable
> {
>
>  public:
>
>    explicit Parser(InputStreamer &in) :
>        in_(in)
>    {}
>
>    void getNull() {}
>
>    bool getBool() {
>        uint8_t ival = 0;
>        in_.getByte(ival);
>        return(ival != 0);
>    }
>
>    int32_t getInt() {
>        uint32_t encoded = getVarInt();
>        return decodeZigzag32(encoded);
>    }
>
>    int64_t getLong() {
>        uint64_t encoded = getVarInt();
>        return decodeZigzag64(encoded);
>    }
>
>    float getFloat() {
>        union {
>            float f;
>            uint32_t i;
>        } v;
>        in_.getWord(v.i);
>
> = 
> ======================================================================
> ==./src/c++/api/Schema.hh
> = 
> ======================================================================
> #ifndef avro_Schema_hh__
> #define avro_Schema_hh__
>
> #include "NodeImpl.hh"
>
> /// \file
> ///
> /// Schemas for representing all the avro types.  The compound  
> schema objects
> /// allow composition from other schemas.
> ///
>
> namespace avro {
>
> class ValidSchema;
>
>
> /// The root Schema object is a base class.  Nobody constructs this  
> class directly.
>
> class Schema
> {
>  public:
>
>    virtual ~Schema();
>
>    Type type() const {
>        return node_->type();
>    }
>
>    const NodePtr &root() const {
>        return node_;
>    }
>
>    NodePtr &root() {
>        return node_;
>    }
>
>  protected:
>
>    friend int compileJsonSchema(std::istream &is, ValidSchema  
> &schema);
>
>    Schema();
>    explicit Schema(const NodePtr &node);
>    explicit Schema(Node *node);
>
>    NodePtr node_;
> };
>
> class NullSchema : public Schema
> {
>  public:
>
> = 
> ======================================================================
> ==./src/c++/api/Serializer.hh
> = 
> ======================================================================
> #ifndef avro_Serializer_hh__
> #define avro_Serializer_hh__
>
> #include <boost/noncopyable.hpp>
>
> #include "Writer.hh"
> #include "ValidatingWriter.hh"
>
> namespace avro {
>
> /// Class that wraps a Writer or ValidatingWriter with an interface  
> that uses
> /// explicit put* names instead of putValue
>
> template<class Writer>
> class Serializer : private boost::noncopyable
> {
>
>  public:
>
>    /// Constructor only works with Writer
>    explicit Serializer(OutputStreamer &out) :
>        writer_(out)
>    {}
>
>    /// Constructor only works with ValidatingWriter
>    Serializer(const ValidSchema &schema, OutputStreamer &out) :
>        writer_(schema, out)
>    {}
>
>    void putNull() {
>        writer_.putValue(Null());
>    }
>
>    void putBool(bool val) {
>        writer_.putValue(val);
>    }
>
>    void putInt(int32_t val) {
>        writer_.putValue(val);
>    }
>
>    void putLong(int64_t val) {
>        writer_.putValue(val);
>    }
>
>    void putFloat(float val) {
>        writer_.putValue(val);
>    }
>
>    void putDouble(double val) {
>
> = 
> ======================================================================
> ==./src/c++/api/SymbolMap.hh
> = 
> ======================================================================
> #ifndef avro_SymbolMap_hh__
> #define avro_SymbolMap_hh__
>
> #include <map>
>
> #include "Node.hh"
> #include "Schema.hh"
>
> namespace avro {
>
> /// Avro schemas can include types that were previously defined with  
> names in
> /// the same avro schema.  In order to identify new types, they are  
> stored in a
> /// map so that the actual type may be identified by name.  This class
> /// implements the symbolic name to node mapping.
> ///
>
> class SymbolMap
> {
>
>  public:
>
>    SymbolMap()
>    {}
>
>    bool registerSymbol(const NodePtr &node) {
>
>        const std::string name = node->name();
>        if(name.empty()) {
>            throw Exception("Node must have a name to be registered");
>        }
>        bool added = false;
>        MapImpl::iterator lb = map_.lower_bound(name);
>
>        if(lb == map_.end() || map_.key_comp()(name, lb->first)) {
>            map_.insert(lb, std::make_pair(name, node));
>            added = true;
>        }
>        return added;
>    }
>
>    bool hasSymbol(const std::string &name) const {
>        return map_.find(name) != map_.end();
>    }
>
>    NodePtr locateSymbol(const std::string &name) const {
>        MapImpl::const_iterator iter = map_.find(name);
>        return (iter == map_.end()) ? NodePtr() : iter->second;
>    }
>
>  private:
>
> = 
> ======================================================================
> ==./src/c++/api/Types.hh
> = 
> ======================================================================
> #ifndef avro_Types_hh__
> #define avro_Types_hh__
>
> #include <iostream>
>
> namespace avro {
>
> enum Type {
>
>    AVRO_STRING,
>    AVRO_BYTES,
>    AVRO_INT,
>    AVRO_LONG,
>    AVRO_FLOAT,
>    AVRO_DOUBLE,
>    AVRO_BOOL,
>    AVRO_NULL,
>
>    AVRO_RECORD,
>    AVRO_ENUM,
>    AVRO_ARRAY,
>    AVRO_MAP,
>    AVRO_UNION,
>    AVRO_FIXED,
>
>    AVRO_SYMBOLIC,
>
>    AVRO_NUM_TYPES,
> };
>
> inline bool isPrimitive(Type t) {
>    return (t >= AVRO_STRING) && (t < AVRO_RECORD);
> }
>
> inline bool isCompound(Type t) {
>    return (t>= AVRO_RECORD) && (t < AVRO_NUM_TYPES);
> }
>
> inline bool isAvroType(Type t) {
>    return (t >= AVRO_STRING) && (t < AVRO_NUM_TYPES);
> }
>
> std::ostream &operator<< (std::ostream &os, const avro::Type type);
>
> /// define a type to identify Null in template functions
> struct Null {};
>
> } // namespace avro
>
>
>
> = 
> ======================================================================
> ==./src/c++/api/ValidSchema.hh
> = 
> ======================================================================
> #ifndef avro_ValidSchema_hh__
> #define avro_ValidSchema_hh__
>
> #include <boost/noncopyable.hpp>
>
> #include "Node.hh"
> #include "SymbolMap.hh"
>
> namespace avro {
>
> class Schema;
>
> /// A ValidSchema is basically a non-mutable Schema that has passed  
> some
> /// minumum of sanity checks.  Once valididated, any Schema that is  
> part of
> /// this ValidSchema is considered locked, and cannot be modified  
> (an attempt
> /// to modify a locked Schema will throw).  Also, as it is  
> validated, any
> /// recursive duplications of schemas are replaced with symbolic  
> links to the
> /// original.
> ///
> /// Once a Schema is converted to a valid schema it can be used in  
> validating
> /// parsers/serializers, converted to a json schema, etc.
> ///
>
> class ValidSchema : private boost::noncopyable
> {
>  public:
>
>    explicit ValidSchema(const Schema &schema);
>    ValidSchema();
>
>    void setSchema(const Schema &schema);
>
>    const NodePtr &root() const {
>        return node_;
>    }
>
>    void toJson(std::ostream &os);
>
>    void toFlatList(std::ostream &os);
>
>    NodePtr followSymbol(const std::string &name) const {
>        return symbolMap_.locateSymbol(name);
>    }
>
>  protected:
>
>    bool validate(const NodePtr &node);
>
>    SymbolMap symbolMap_;
>    NodePtr node_;
>
> = 
> ======================================================================
> ==./src/c++/api/ValidatingParser.hh
> = 
> ======================================================================
> #ifndef avro_ValidatingParser_hh__
> #define avro_ValidatingParser_hh__
>
> #include <stdint.h>
> #include <vector>
> #include <boost/noncopyable.hpp>
>
> #include "Parser.hh"
> #include "Validator.hh"
>
> namespace avro {
>
> class ValidSchema;
> class InputStreamer;
>
> /// As an avro object is being parsed from binary data to its C++
> /// representation, this parser will walk the parse tree and ensure  
> that the
> /// correct type is being asked for.  If the user attempts to parse  
> a type that
> /// does not match what the schema says, an exception will be thrown.
> ///
> /// The ValidatingParser object can also be used to tell what the  
> next type is,
> /// so that callers can dynamically discover the contents.  It also  
> tells
> /// the attribute names of the objects or their fields, if they exist.
> ///
>
> class ValidatingParser : private boost::noncopyable
> {
>
>  public:
>
>    explicit ValidatingParser(const ValidSchema &schema,  
> InputStreamer &in);
>
>    void getNull();
>
>    bool getBool();
>
>    int32_t getInt();
>
>    int64_t getLong();
>
>    float getFloat();
>
>    double getDouble();
>
>    void getBytes(std::vector<uint8_t> &val);
>
>    void getFixed(uint8_t *val, size_t size) {
>        checkSafeToGet(AVRO_FIXED);
>        checkSizeExpected(size);
>        validator_.advance();
>
> = 
> ======================================================================
> ==./src/c++/api/ValidatingSerializer.hh
> = 
> ======================================================================
>
> = 
> ======================================================================
> ==./src/c++/api/ValidatingWriter.hh
> = 
> ======================================================================
> #ifndef avro_ValidatingWriter_hh__
> #define avro_ValidatingWriter_hh__
>
> #include <boost/noncopyable.hpp>
>
> #include "Writer.hh"
> #include "Validator.hh"
> #include "AvroTraits.hh"
>
> namespace avro {
>
> class ValidSchema;
> class OutputStreamer;
>
> /// This class walks the parse tree as data is being serialized, and  
> throws if
> /// attempt to serialize a data type does not match the type  
> expected in the
> /// schema.
>
> class ValidatingWriter : private boost::noncopyable
> {
>
>  public:
>
>    ValidatingWriter(const ValidSchema &schema, OutputStreamer &out);
>
>    template<typename T>
>    void putValue(T val) {
>        checkSafeToPut(type_to_avro<T>::type);
>        writer_.putValue(val);
>        validator_.advance();
>    }
>
>    void putValue(const std::string &val) {
>        checkSafeToPut(type_to_avro<std::string>::type);
>        writer_.putValue(val);
>        validator_.advance();
>    }
>
>    void putBytes(const void *val, size_t size);
>
>    void putFixed(const uint8_t *val, size_t size) {
>        checkSafeToPut(AVRO_FIXED);
>        checkSizeExpected(size);
>        writer_.putFixed(val, size);
>        validator_.advance();
>    }
>
>    void beginRecord();
>
>    void beginArrayBlock(int64_t size);
>
> = 
> ======================================================================
> ==./src/c++/api/Validator.hh
> = 
> ======================================================================
> #ifndef avro_Validating_hh__
> #define avro_Validating_hh__
>
> #include <boost/noncopyable.hpp>
> #include <vector>
>
> #include "Types.hh"
> #include "Node.hh"
>
> namespace avro {
>
> class ValidSchema;
> class OutputStreamer;
>
> /// This class is used by both the ValidatingSerializer and  
> ValidationParser
> /// objects.  It advances the parse tree (containing logic how to  
> advance
> /// through the various compound types, for example a record must  
> advance
> /// through all leaf nodes but a union only skips to one), and  
> reports which
> /// type is next.
>
> class Validator : private boost::noncopyable
> {
>    typedef uint64_t flag_t;
>
>  public:
>
>    Validator(const ValidSchema &schema);
>
>    void advance();
>    void advanceWithCount(int64_t val);
>
>    bool typeIsExpected(Type type) const {
>        return (expectedTypesFlag_ & typeToFlag(type));
>    }
>
>    Type nextTypeExpected() const {
>        return nextType_;
>    }
>
>    int nextSizeExpected() const;
>
>    bool getCurrentRecordName(std::string &name) const;
>    bool getNextFieldName(std::string &name) const;
>
>  private:
>
>    flag_t typeToFlag(Type type) const {
>        flag_t flag = (1L << type);
>        return flag;
>    }
>
> = 
> ======================================================================
> ==./src/c++/api/Writer.hh
> = 
> ======================================================================
> #ifndef avro_Writer_hh__
> #define avro_Writer_hh__
>
> #include <boost/noncopyable.hpp>
>
> #include "OutputStreamer.hh"
> #include "Zigzag.hh"
> #include "Types.hh"
>
> namespace avro {
>
> /// Class for writing avro data to a stream.
>
> class Writer : private boost::noncopyable
> {
>
>  public:
>
>    explicit Writer(OutputStreamer &out) :
>        out_(out)
>    {}
>
>    void putValue(const Null &) {}
>
>    void putValue(bool val) {
>        int8_t byte = (val != 0);
>        out_.putByte(byte);
>    }
>
>    void putValue(int32_t val) {
>        boost::array<uint8_t, 5> bytes;
>        size_t size = encodeInt32(val, bytes);
>        out_.putBytes(bytes.data(), size);
>    }
>
>    void putValue(int64_t val) {
>        boost::array<uint8_t, 9> bytes;
>        size_t size = encodeInt64(val, bytes);
>        out_.putBytes(bytes.data(), size);
>    }
>
>    void putValue(float val) {
>        union {
>            float f;
>            int32_t i;
>        } v;
>
>        v.f = val;
>        out_.putWord(v.i);
>    }
>
> = 
> ======================================================================
> ==./src/c++/api/Zigzag.hh
> = 
> ======================================================================
> #ifndef avro_Encoding_hh__
> #define avro_Encoding_hh__
>
> #include <stdint.h>
> #include <boost/array.hpp>
>
> /// \file
> /// Functions for encoding and decoding integers with zigzag  
> compression
>
> namespace avro {
>
> uint64_t encodeZigzag64(int64_t input);
> int64_t decodeZigzag64(uint64_t input);
>
> uint32_t encodeZigzag32(int32_t input);
> int32_t decodeZigzag32(uint32_t input);
>
> size_t encodeInt32(int32_t input, boost::array<uint8_t, 5> &output);
> size_t encodeInt64(int64_t input, boost::array<uint8_t, 9> &output);
>
> } // namespace avro
>
> #endif
>
> = 
> ======================================================================
> ==./src/c++/impl/Compiler.cc
> = 
> ======================================================================
> #include "Compiler.hh"
> #include "InputStreamer.hh"
> #include "Types.hh"
> #include "Schema.hh"
> #include "ValidSchema.hh"
>
> extern void yyparse(void *ctx);
>
> namespace avro {
>
> //#define DEBUG_VERBOSE
>
> int
> compileJsonSchema(std::istream &is, ValidSchema &schema)
> {
>     CompilerContext myctx(is);
>     yyparse(&myctx);
>
>     Schema s(myctx.getRoot());
>
>     schema.setSchema(s);
>
>     return 1;
> }
>
> void
> CompilerContext::add(const NodePtr &node)
> {
>    if(stack_.empty() ) {
>        root_ = node;
>    }
>    else {
>
>        NodePtr &owner = stack_.back();
>
>        owner->addLeaf(node);
>        if(owner->type() == AVRO_RECORD) {
>            owner->addName(fieldName_);
>        }
>    }
> }
>
> void
> CompilerContext::addCompound(const NodePtr &node)
> {
>    add(node);
>    stack_.push_back(node);
> }
>
> void
>
> = 
> ======================================================================
> ==./src/c++/impl/Node.cc
> = 
> ======================================================================
> #include <boost/regex.hpp>
> #include "Node.hh"
>
> namespace avro {
>
> Node::~Node()
> { }
>
> void
> Node::checkName(const std::string &name) const
> {
>    static const boost::regex exp("[A-Za-z_][A-Za-z0-9_]*");
>    if(!name.empty() && !boost::regex_match(name, exp)) {
>        throw Exception("Names must match [A-Za-z_][A-Za-z0-9_]*");
>    }
> }
>
> } // namespace avro
>
> = 
> ======================================================================
> ==./src/c++/impl/NodeImpl.cc
> = 
> ======================================================================
>
> #include "NodeImpl.hh"
>
> namespace avro {
>
> /// Wrap an indentation in a struct for ostream operator<<
> struct indent {
>    indent(int depth) :
>        d(depth)
>    { }
>    int d;
> };
>
> /// ostream operator for indent
> std::ostream& operator <<(std::ostream &os, indent x)
> {
>    static const std::string spaces("    ");
>    while(x.d--) {
>        os << spaces;
>    }
>    return os;
> }
>
> void
> NodePrimitive::printJson(std::ostream &os, int depth) const
> {
>    // printing long form is optional
>    /*
>    if(depth == 0) {
>        os << "{\n";
>        os << indent(depth+1) << "\"type\": " << '"' << type() << '"';
>        os << indent(depth) << "\n}";
>    }
>    else {
>        os << type();
>    }
>    */
>    os << '"' << type() << '"';
> }
>
> void
> NodeSymbolic::printJson(std::ostream &os, int depth) const
> {
>    os << '\"' << nameAttribute_.get() << '\"';
> }
>
> void
> NodeRecord::printJson(std::ostream &os, int depth) const
> {
>    os << "{\n";
>
> = 
> ======================================================================
> ==./src/c++/impl/Schema.cc
> = 
> ======================================================================
>
> #include "Schema.hh"
>
> namespace avro {
>
> Schema::Schema()
> { }
>
> Schema::~Schema()
> { }
>
> Schema::Schema(const NodePtr &node) :
>    node_(node)
> { }
>
> Schema::Schema(Node *node) :
>    node_(node)
> { }
>
> RecordSchema::RecordSchema(const std::string &name) :
>    Schema(new NodeRecord)
> {
>    node_->setName(name);
> }
>
> void
> RecordSchema::addField(const std::string &name, const Schema  
> &fieldSchema)
> {
>    node_->addLeaf(fieldSchema.root());
>    node_->addName(name);
> }
>
> EnumSchema::EnumSchema(const std::string &name) :
>    Schema(new NodeEnum)
> {
>    node_->setName(name);
> }
>
> void
> EnumSchema::addSymbol(const std::string &symbol)
> {
>    node_->addName(symbol);
> }
>
> ArraySchema::ArraySchema(const Schema &itemsSchema) :
>    Schema(new NodeArray)
> {
>    node_->addLeaf(itemsSchema.root());
> }
>
>
> = 
> ======================================================================
> ==./src/c++/impl/Types.cc
> = 
> ======================================================================
> #include <iostream>
> #include <boost/static_assert.hpp>
> #include "Types.hh"
>
> namespace avro {
>
> namespace strings {
> const std::string typeToString[] = {
>    "string",
>    "bytes",
>    "int",
>    "long",
>    "float",
>    "double",
>    "boolean",
>    "null",
>    "record",
>    "enum",
>    "array",
>    "map",
>    "union",
>    "fixed",
>    "symbolic"
> };
>
> BOOST_STATIC_ASSERT( (sizeof(typeToString)/sizeof(std::string)) ==  
> (AVRO_NUM_TYPES) );
>
> } // namespace strings
>
> BOOST_STATIC_ASSERT( AVRO_NUM_TYPES < 64 );
>
> std::ostream &operator<< (std::ostream &os, const Type type)
> {
>    if(isAvroType(type)) {
>        os << strings::typeToString[type];
>    }
>    else {
>        os << static_cast<int>(type);
>    }
>    return os;
> }
>
> } // namespace avro
>
>
> = 
> ======================================================================
> ==./src/c++/impl/ValidSchema.cc
> = 
> ======================================================================
> #include "ValidSchema.hh"
> #include "Schema.hh"
> #include "Node.hh"
>
> namespace avro {
>
>    ValidSchema::ValidSchema(const Schema &schema) :
>    node_(schema.root())
> {
>    validate(node_);
> }
>
> ValidSchema::ValidSchema() :
>   node_(NullSchema().root())
> { }
>
> void
> ValidSchema::setSchema(const Schema &schema)
> {
>    const NodePtr &node(schema.root());
>    validate(schema.root());
>    node_ = node;
> }
>
> bool
> ValidSchema::validate(const NodePtr &node)
> {
>    if(!node) {
>        node_ = new NodePrimitive(AVRO_NULL);
>    }
>
>    if(!node->isValid()) {
>        throw Exception("Schema is invalid");
>    }
>    if(node->hasName()) {
>        if(node->type() == AVRO_SYMBOLIC) {
>            if(!symbolMap_.hasSymbol(node->name())) {
>                throw Exception("Symbolic name not found");
>            }
>            return true;
>        }
>        bool registered = symbolMap_.registerSymbol(node);
>        if(!registered) {
>            return false;
>        }
>    }
>    node->lock();
>    size_t leaves = node->leaves();
>    for(size_t i = 0; i < leaves; ++i) {
>        const NodePtr &leaf(node->leafAt(i));
>
> = 
> ======================================================================
> ==./src/c++/impl/ValidatingParser.cc
> = 
> ======================================================================
> #include <boost/static_assert.hpp>
>
> #include "ValidatingParser.hh"
> #include "ValidSchema.hh"
> #include "OutputStreamer.hh"
>
> namespace avro {
>
> ValidatingParser::ValidatingParser(const ValidSchema &schema,  
> InputStreamer &in) :
>    validator_(schema),
>    parser_(in)
> { }
>
> void
> ValidatingParser::getNull()
> {
>    checkSafeToGet(AVRO_NULL);
>    validator_.advance();
>    parser_.getNull();
> }
>
> int32_t
> ValidatingParser::getInt()
> {
>    checkSafeToGet(AVRO_INT);
>    int32_t val = parser_.getInt();
>    validator_.advance();
>    return val;
> }
>
> int64_t
> ValidatingParser::getLong()
> {
>    checkSafeToGet(AVRO_LONG);
>    int64_t val = parser_.getLong();
>    validator_.advance();
>    return val;
> }
>
> float
> ValidatingParser::getFloat()
> {
>    checkSafeToGet(AVRO_FLOAT);
>    validator_.advance();
>    return parser_.getFloat();
> }
>
> double
> ValidatingParser::getDouble()
> {
>
> = 
> ======================================================================
> ==./src/c++/impl/ValidatingSerializer.cc
> = 
> ======================================================================
>
> = 
> ======================================================================
> ==./src/c++/impl/ValidatingWriter.cc
> = 
> ======================================================================
> #include <boost/static_assert.hpp>
>
> #include "ValidatingWriter.hh"
> #include "ValidSchema.hh"
> #include "OutputStreamer.hh"
> #include "AvroTraits.hh"
>
> namespace avro {
>
> ValidatingWriter::ValidatingWriter(const ValidSchema &schema,  
> OutputStreamer &out) :
>    validator_(schema),
>    writer_(out)
> { }
>
> void
> ValidatingWriter::putBytes(const void *val, size_t size)
> {
>    checkSafeToPut(AVRO_BYTES);
>    writer_.putBytes(val, size);
>    validator_.advance();
> }
>
> void
> ValidatingWriter::putCount(int64_t count)
> {
>    checkSafeToPut(AVRO_LONG);
>    writer_.putValue(count);
>    validator_.advanceWithCount(count);
> }
>
> void
> ValidatingWriter::beginRecord()
> {
>    checkSafeToPut(AVRO_RECORD);
>    validator_.advance();
> }
>
> void
> ValidatingWriter::beginArrayBlock(int64_t size)
> {
>    checkSafeToPut(AVRO_ARRAY);
>    validator_.advance();
>    putCount(size);
> }
>
> void
> ValidatingWriter::endArray()
> {
>    beginArrayBlock(0);
> }
>
> = 
> ======================================================================
> ==./src/c++/impl/Validator.cc
> = 
> ======================================================================
> #include <boost/static_assert.hpp>
>
> #include "Validator.hh"
> #include "ValidSchema.hh"
>
> namespace avro {
>
> Validator::Validator(const ValidSchema &schema) :
>    schema_(schema),
>    parseTree_(schema.root()),
>    nextType_(AVRO_NULL),
>    expectedTypesFlag_(0),
>    compoundStarted_(false),
>    waitingForCount_(false),
>    count_(0)
> {
>    setupOperation(parseTree_);
> }
>
> void
> Validator::setWaitingForCount()
> {
>    waitingForCount_ = true;
>    count_ = 0;
>    expectedTypesFlag_ = typeToFlag(AVRO_INT) | typeToFlag(AVRO_LONG);
>    nextType_ = AVRO_LONG;
> }
>
> void
> Validator::recordAdvance()
> {
>    // record doesn't use this flag because it doesn't need to set
>    // up anything at the start, but just clear it
>    compoundStarted_ = false;
>
>    // determine the next record entry to process
>    size_t index = (compoundStack_.back().pos)++;
>
>    const NodePtr &node = compoundStack_.back().node;
>    if(index < node->leaves() ) {
>        setupOperation(node->leafAt(index));
>    }
>    else {
>        // done with this record, remove it from the processing stack
>        compoundStack_.pop_back();
>    }
> }
>
> void
> Validator::enumAdvance()
>
> = 
> ======================================================================
> ==./src/c++/impl/Zigzag.cc
> = 
> ======================================================================
>
> #include "Zigzag.hh"
>
> namespace avro {
>
> uint64_t
> encodeZigzag64(int64_t input)
> {
>    return ((input << 1) ^ (input >> 63));
> }
>
> int64_t
> decodeZigzag64(uint64_t input)
> {
>    return ((input >> 1) ^ -(input & 1));
> }
>
> uint32_t
> encodeZigzag32(int32_t input)
> {
>    return ((input << 1) ^ (input >> 31));
> }
>
> int32_t
> decodeZigzag32(uint32_t input)
> {
>    return ((input >> 1) ^ -(input & 1));
> }
>
> size_t
> encodeInt64(int64_t input, boost::array<uint8_t, 9> &output)
> {
>    // get the zigzag encoding
>    uint64_t val = encodeZigzag64(input);
>
>    // put values in an array of bytes with variable length encoding
>    const int mask  = 0x7F;
>    output[0] = val & mask;
>    size_t bytesOut = 1;
>    while( val >>=7 ) {
>        output[bytesOut++] = (val & mask) | 0x80;
>    }
>
>    // arrange array so msb is first
>    int head = 0;
>    int tail = bytesOut - 1;
>    while(head < tail) {
>        std::swap(output[head++], output[tail--]);
>    }
>
>
> = 
> ======================================================================
> ==./src/c++/jsonschemas/array
> = 
> ======================================================================
> { "type" : "array", "items" : "int" }
>
> = 
> ======================================================================
> ==./src/c++/jsonschemas/bigrecord
> = 
> ======================================================================
> {
>    "type": "record",
>    "name": "RootRecord",
>    "fields": [
>        {
>            "name": "mylong",
>            "type": "long"
>        },
>        {
>            "name": "mymap",
>            "type": {
>                "type": "map",
>                "values": "int"
>            }
>        },
>        {
>            "name": "myarray",
>            "type": {
>                "type": "array",
>                "items": "double"
>            }
>        },
>        {
>            "name": "myenum",
>            "type": {
>                "type": "enum",
>                "name": "ExampleEnum",
>                "symbols": [
>                    "zero",
>                    "one",
>                    "two",
>                    "three"
>                ]
>            }
>        },
>        {
>            "name": "myunion",
>            "type": [
>                "null",
>                {
>                    "type": "map",
>                    "values": "int"
>                },
>                "float"
>            ]
>        },
>        {
>            "name": "mybool",
>            "type": "boolean"
>        },
>
> = 
> ======================================================================
> ==./src/c++/jsonschemas/enum
> = 
> ======================================================================
>        {
>            "type": "enum",
>            "name": "myenum",
>            "symbols": [
>                "zero",
>                "int",
>                "two",
>                "three"
>            ]
>        }
>
> = 
> ======================================================================
> ==./src/c++/jsonschemas/fixed
> = 
> ======================================================================
> {"type": "fixed", "size" : 16, "name":"md5" }
>
> = 
> ======================================================================
> ==./src/c++/jsonschemas/nested
> = 
> ======================================================================
> {
>    "type": "record",
>    "name": "LongList",
>    "fields": [
>        {
>            "name": "value",
>            "type": "long"
>        },
>        {
>            "name": "next",
>            "type": [
>                "LongList",
>                "null"
>            ]
>        }
>    ]
> }
>
> = 
> ======================================================================
> ==./src/c++/jsonschemas/nested.error
> = 
> ======================================================================
> {
>    "type": "record",
>    "name": "LongList",
>    "fields": [
>        {
>            "name": "value",
>            "type": "long"
>        },
>        {
>            "name": "next",
>            "type": [
>                "LongLister",
>                "null"
>            ]
>        }
>    ]
> }
>
> = 
> ======================================================================
> ==./src/c++/jsonschemas/recinrec
> = 
> ======================================================================
> {
>  "type": "record",
>  "name": "Rec1",
>  "fields" : [
>    {"name": "val1", "type": "long"},
>    {"name": "val2", "type": {
>          "type": "record",
>          "name": "Rec2",
>          "fields" : [
>            {"name": "inval1", "type": "double"},
>            {"name": "inval2", "type": "int" }
>          ]
>      }
>    },
>    {"name": "val3", "type": "float"}
>  ]
> }
>
>
> = 
> ======================================================================
> ==./src/c++/jsonschemas/record
> = 
> ======================================================================
> {
>  "type": "record",
>  "name": "LongList",
>  "fields" : [
>    {"name": "value", "type": "long"},
>    {"name": "next", "type": "int" }
>  ]
> }
>
>
> = 
> ======================================================================
> ==./src/c++/jsonschemas/record2
> = 
> ======================================================================
> {
>  "type": "record",
>  "name": "LongList",
>  "fields" : [
>    {"name": "value", "type": "long"},
>    {"name": "next", "type": ["int"] },
>    {"name": "hello", "type": {"type" : "array" , "items" :"float"}}
>  ]
> }
>
>
> = 
> ======================================================================
> ==./src/c++/jsonschemas/union
> = 
> ======================================================================
> [ "int" , "long" , "float" ]
>
> = 
> ======================================================================
> ==./src/c++/jsonschemas/unionwithmap
> = 
> ======================================================================
> [ "int" , "long" , {"type":"map", "values":[ "int", "long" ] } ]
>
> = 
> ======================================================================
> ==./src/c++/obj/Compiler.d
> = 
> ======================================================================
> obj/Compiler.o obj/Compiler.d: impl/Compiler.cc api/Compiler.hh \
>  api/Types.hh api/Node.hh api/Exception.hh api/SymbolMap.hh \
>  api/Schema.hh api/NodeImpl.hh api/NodeConcepts.hh api/ 
> InputStreamer.hh \
>  api/Types.hh api/Schema.hh api/ValidSchema.hh
>
> api/Compiler.hh:
>
> api/Types.hh:
>
> api/Node.hh:
>
> api/Exception.hh:
>
> api/SymbolMap.hh:
>
> api/Schema.hh:
>
> api/NodeImpl.hh:
>
> api/NodeConcepts.hh:
>
> api/InputStreamer.hh:
>
> api/Types.hh:
>
> api/Schema.hh:
>
> api/ValidSchema.hh:
>
> = 
> ======================================================================
> ==./src/c++/obj/Node.d
> = 
> ======================================================================
> obj/Node.o obj/Node.d: impl/Node.cc api/Node.hh api/Exception.hh \
>  api/Types.hh
>
> api/Node.hh:
>
> api/Exception.hh:
>
> api/Types.hh:
>
> = 
> ======================================================================
> ==./src/c++/obj/NodeImpl.d
> = 
> ======================================================================
> obj/NodeImpl.o obj/NodeImpl.d: impl/NodeImpl.cc api/NodeImpl.hh \
>  api/Node.hh api/Exception.hh api/Types.hh api/NodeConcepts.hh
>
> api/NodeImpl.hh:
>
> api/Node.hh:
>
> api/Exception.hh:
>
> api/Types.hh:
>
> api/NodeConcepts.hh:
>
> = 
> ======================================================================
> ==./src/c++/obj/Schema.d
> = 
> ======================================================================
> obj/Schema.o obj/Schema.d: impl/Schema.cc api/Schema.hh api/ 
> NodeImpl.hh \
>  api/Node.hh api/Exception.hh api/Types.hh api/NodeConcepts.hh
>
> api/Schema.hh:
>
> api/NodeImpl.hh:
>
> api/Node.hh:
>
> api/Exception.hh:
>
> api/Types.hh:
>
> api/NodeConcepts.hh:
>
> = 
> ======================================================================
> ==./src/c++/obj/Types.d
> = 
> ======================================================================
> obj/Types.o obj/Types.d: impl/Types.cc api/Types.hh
>
> api/Types.hh:
>
> = 
> ======================================================================
> ==./src/c++/obj/ValidSchema.d
> = 
> ======================================================================
> obj/ValidSchema.o obj/ValidSchema.d: impl/ValidSchema.cc \
>  api/ValidSchema.hh api/Node.hh api/Exception.hh api/Types.hh \
>  api/SymbolMap.hh api/Schema.hh api/NodeImpl.hh api/NodeConcepts.hh \
>  api/Schema.hh api/Node.hh
>
> api/ValidSchema.hh:
>
> api/Node.hh:
>
> api/Exception.hh:
>
> api/Types.hh:
>
> api/SymbolMap.hh:
>
> api/Schema.hh:
>
> api/NodeImpl.hh:
>
> api/NodeConcepts.hh:
>
> api/Schema.hh:
>
> api/Node.hh:
>
> = 
> ======================================================================
> ==./src/c++/obj/ValidatingParser.d
> = 
> ======================================================================
> obj/ValidatingParser.o obj/ValidatingParser.d: impl/ 
> ValidatingParser.cc \
>  api/ValidatingParser.hh api/Parser.hh api/InputStreamer.hh \
>  api/Zigzag.hh api/Validator.hh api/Types.hh api/Node.hh \
>  api/Exception.hh api/ValidSchema.hh api/SymbolMap.hh api/Schema.hh \
>  api/NodeImpl.hh api/NodeConcepts.hh api/OutputStreamer.hh
>
> api/ValidatingParser.hh:
>
> api/Parser.hh:
>
> api/InputStreamer.hh:
>
> api/Zigzag.hh:
>
> api/Validator.hh:
>
> api/Types.hh:
>
> api/Node.hh:
>
> api/Exception.hh:
>
> api/ValidSchema.hh:
>
> api/SymbolMap.hh:
>
> api/Schema.hh:
>
> api/NodeImpl.hh:
>
> api/NodeConcepts.hh:
>
> api/OutputStreamer.hh:
>
> = 
> ======================================================================
> ==./src/c++/obj/ValidatingSerializer.d
> = 
> ======================================================================
> obj/ValidatingSerializer.o obj/ValidatingSerializer.d:  \
> impl/ValidatingSerializer.cc
>
> = 
> ======================================================================
> ==./src/c++/obj/ValidatingWriter.d
> = 
> ======================================================================
> obj/ValidatingWriter.o obj/ValidatingWriter.d: impl/ 
> ValidatingWriter.cc \
>  api/ValidatingWriter.hh api/Writer.hh api/OutputStreamer.hh \
>  api/Zigzag.hh api/Types.hh api/Validator.hh api/Node.hh \
>  api/Exception.hh api/AvroTraits.hh api/ValidSchema.hh api/ 
> SymbolMap.hh \
>  api/Schema.hh api/NodeImpl.hh api/NodeConcepts.hh api/ 
> OutputStreamer.hh \
>  api/AvroTraits.hh
>
> api/ValidatingWriter.hh:
>
> api/Writer.hh:
>
> api/OutputStreamer.hh:
>
> api/Zigzag.hh:
>
> api/Types.hh:
>
> api/Validator.hh:
>
> api/Node.hh:
>
> api/Exception.hh:
>
> api/AvroTraits.hh:
>
> api/ValidSchema.hh:
>
> api/SymbolMap.hh:
>
> api/Schema.hh:
>
> api/NodeImpl.hh:
>
> api/NodeConcepts.hh:
>
> api/OutputStreamer.hh:
>
> api/AvroTraits.hh:
>
> = 
> ======================================================================
> ==./src/c++/obj/Validator.d
> = 
> ======================================================================
> obj/Validator.o obj/Validator.d: impl/Validator.cc api/Validator.hh \
>  api/Types.hh api/Node.hh api/Exception.hh api/ValidSchema.hh \
>  api/SymbolMap.hh api/Schema.hh api/NodeImpl.hh api/NodeConcepts.hh
>
> api/Validator.hh:
>
> api/Types.hh:
>
> api/Node.hh:
>
> api/Exception.hh:
>
> api/ValidSchema.hh:
>
> api/SymbolMap.hh:
>
> api/Schema.hh:
>
> api/NodeImpl.hh:
>
> api/NodeConcepts.hh:
>
> = 
> ======================================================================
> ==./src/c++/obj/Zigzag.d
> = 
> ======================================================================
> obj/Zigzag.o obj/Zigzag.d: impl/Zigzag.cc api/Zigzag.hh
>
> api/Zigzag.hh:
>
> = 
> ======================================================================
> ==./src/c++/obj/bigrecord.flat
> = 
> ======================================================================
> record RootRecord
> name mylong
> long
> name mymap
> map
> string
> int
> end map
> name myarray
> array
> double
> end array
> name myenum
> enum ExampleEnum
> name zero
> name one
> name two
> name three
> end enum
> name myunion
> union
> null
> map
> string
> int
> end map
> float
> end union
> name mybool
> boolean
> name myfixed
> fixed md5 16
> end fixed
> name anotherint
> int
> end record
>
> = 
> ======================================================================
> ==./src/c++/parser/avro.l
> = 
> ======================================================================
> %{
> #include "avro.tab.h"
>
> // this undef is a hack for my mac implementation
> #undef yyFlexLexer
> #include "Compiler.hh"
>
> #define YY_STACK_USED 1
>
> using std::cin;
> using std::cout;
> using std::cerr;
>
> %}
>
> %option c++
> %option noyywrap
>
> %{
>
> int yylex(int *val, void *ctx)
> {
>    avro::CompilerContext *c = static_cast<avro::CompilerContext  
> *>(ctx);
>    int ret = c->lexer().yylex();
>    if(ret == AVRO_LEX_NAME || ret == AVRO_LEX_SYMBOL || ret ==  
> AVRO_LEX_SIZE) {
>        c->setText( c->lexer().YYText()) ;
>    }
>    return ret;
> }
>
> %}
>
> %x READTYPE
> %x STARTTYPE
> %x READNAME
> %x READFIELDS
> %x READSYMBOLS
> %s READSIZE
> %x INUNION
> %x INOBJECT
>
> ws [ \t\n]
> delim {ws}*:{ws}*
> avrotext [a-zA-Z_][a-zA-Z0-9_]*
> startunion \[
> startobject \{
> integer [0-9]+
>
> %%
> <READTYPE>int                  return AVRO_LEX_INT;
>
> = 
> ======================================================================
> ==./src/c++/parser/avro.y
> = 
> ======================================================================
> %{
> #include <stdio.h>
> #include "Compiler.hh"
> #define YYLEX_PARAM ctx
> #define YYPARSE_PARAM ctx
>
> void yyerror(const char *str)
> {
>    // fixme, do something better than this
>    fprintf(stderr,"error: %s\n",str);
> }
>
> extern void *lexer;
> extern int yylex(int *, void *);
>
> avro::CompilerContext &context(void *ctx) {
>    return *static_cast<avro::CompilerContext *>(ctx);
> };
>
> %}
>
> %pure-parser
>
> %token AVRO_LEX_INT AVRO_LEX_LONG AVRO_LEX_FLOAT AVRO_LEX_DOUBLE
> %token AVRO_LEX_BOOL AVRO_LEX_NULL AVRO_LEX_BYTES AVRO_LEX_STRING
> %token AVRO_LEX_RECORD AVRO_LEX_ENUM AVRO_LEX_ARRAY AVRO_LEX_MAP  
> AVRO_LEX_UNION AVRO_LEX_FIXED
> %token AVRO_LEX_SYMBOL AVRO_LEX_SIZE
> %token AVRO_LEX_TYPE AVRO_LEX_ITEMS AVRO_LEX_NAME AVRO_LEX_VALUES  
> AVRO_LEX_FIELDS
>
> %%
>
> avroschema:
>        primitive | avroobject | union_t
>        ;
>
> avroobject:
>        primitiveobject | record_t | array_t | map_t | enum_t | fixed_t
>        ;
>
> primitiveobject:
>        '{' AVRO_LEX_TYPE primitive '}'
>        ;
>
> primitive:
>        AVRO_LEX_INT    { context(ctx).addPrimitive(avro::AVRO_INT); }
>        |
>        AVRO_LEX_LONG   { context(ctx).addPrimitive(avro::AVRO_LONG); }
>        |
>        AVRO_LEX_FLOAT   
> { context(ctx).addPrimitive(avro::AVRO_FLOAT); }
>        |
>
> = 
> ======================================================================
> ==./src/c++/scripts/gen.py
> = 
> ======================================================================
> #!/usr/bin/python
>
> done = False
>
> headers = '''
> #include <stdint.h>
> #include <string>
> #include <vector>
> #include <map>
> #include <boost/any.hpp>
> #include "Exception.hh"
> #include "AvroSerialize.hh"
> #include "AvroParse.hh"
> '''
>
> typeToC= { 'int' : 'int32_t', 'long' :'int64_t', 'float' : 'float',  
> 'double' : 'double',
> 'boolean' : 'bool', 'null': 'avro::Null', 'string' : 'std::string',  
> 'bytes' : 'std::vector<int8_t>'}
>
> structList = []
> structNames = {}
> forwardDeclareList = []
>
> def addStruct(name, declaration) :
>    if not structNames.has_key(name) :
>        structNames[name] = True
>        structList.append(declaration)
>
> def addForwardDeclare(declaration) :
>    code = 'struct ' + declaration + ';'
>    forwardDeclareList.append(code)
>
> def doPrimitive(type):
>    return (typeToC[type], type)
>
> def doSymbolic(args):
>    line = getNextLine()
>    if line[0] != 'end': print 'error'
>    addForwardDeclare(args[1])
>    return (args[1], args[1])
>
> recordfieldTemplate = '$type$ $name$\n'
> recordTemplate = '''struct $name$ {
> $recordfields$};
>
> template <typename Serializer>
> void serialize(Serializer &s, const $name$ &val, const  
> boost::true_type &) {
>    s.beginRecord();
> $serializefields$
> }
>
>
> = 
> ======================================================================
> ==./src/c++/test/code.hh
> = 
> ======================================================================
> #ifndef avrouser_AvroGenerated_hh__
> #define avrouser_AvroGenerated_hh__
>
> #include <stdint.h>
> #include <string>
> #include <vector>
> #include <map>
> #include <boost/any.hpp>
> #include "Exception.hh"
> #include "AvroSerialize.hh"
> #include "AvroParse.hh"
>
> namespace avrouser {
>
> struct Map_of_int {
>    typedef int32_t ValueType;
>    typedef std::map<std::string, ValueType> MapType;
>
>    void addValue(const std::string &key, const ValueType &val) {
>        value.insert(MapType::value_type(key, val));
>    }
>
>    MapType value;
> };
>
> template <typename Serializer>
> void serialize(Serializer &s, const Map_of_int &val, const  
> boost::true_type &) {
>    if(val.value.size()) {
>        s.beginMapBlock(val.value.size());
>        Map_of_int::MapType::const_iterator iter = val.value.begin();
>        Map_of_int::MapType::const_iterator end  = val.value.end();
>        while(iter!=end) {
>            serialize(s, iter->first);
>            serialize(s, iter->second);
>            ++iter;
>        }
>    }
>    s.endMap();
> }
>
> template <typename Parser>
> void parse(Parser &p, Map_of_int &val, const boost::true_type &) {
>    val.value.clear();
>    while(1) {
>        int size = p.getMapBlockSize();
>        if(size > 0) {
>            while (size-- > 0) {
>                std::string key;
>                parse(p, key);
>                Map_of_int::ValueType m;
>
> = 
> ======================================================================
> ==./src/c++/test/precompile.cc
> = 
> ======================================================================
> #include <stdio.h>
> #include <stdlib.h>
>
> #include "Compiler.hh"
> #include "ValidSchema.hh"
>
> int main()
> {
>
>    try {
>        avro::ValidSchema schema;
>        avro::compileJsonSchema(std::cin, schema);
>
>        schema.toFlatList(std::cout);
>    }
>    catch (std::exception &e) {
>        std::cout << "Failed to parse or compile schema: " <<  
> e.what() << std::endl;
>    }
>
>    return 0;
> }
>
> = 
> ======================================================================
> ==./src/c++/test/testgen.cc
> = 
> ======================================================================
>
> #include <string.h>
> #include <fstream>
> #include <sstream>
>
> #include "code.hh"
> #include "OutputStreamer.hh"
> #include "InputStreamer.hh"
> #include "Serializer.hh"
> #include "Parser.hh"
> #include "ValidatingParser.hh"
> #include "ValidSchema.hh"
> #include "Compiler.hh"
>
> void serialize(const avrouser::RootRecord &rec)
> {
>    avro::ScreenStreamer os;
>    avro::Writer writer(os);
>
>    avro::serialize(writer, rec);
> }
>
> void serializeValid(const avro::ValidSchema &valid, const  
> avrouser::RootRecord &rec)
> {
>    avro::ScreenStreamer os;
>    avro::ValidatingWriter writer(valid, os);
>
>    avro::serialize(writer, rec);
> }
>
> void checkArray(const avrouser::Array_of_double &a1, const  
> avrouser::Array_of_double &a2)
> {
>    assert(a1.value.size() == a2.value.size());
>    for(size_t i = 0; i < a1.value.size(); ++i) {
>        assert(a1.value[i] == a2.value[i]);
>    }
> }
>
> void checkMap(const avrouser::Map_of_int &map1, const  
> avrouser::Map_of_int &map2)
> {
>    assert(map1.value.size() == map2.value.size());
>    avrouser::Map_of_int::MapType::const_iterator iter1 =  
> map1.value.begin();
>    avrouser::Map_of_int::MapType::const_iterator end   =  
> map1.value.end();
>    avrouser::Map_of_int::MapType::const_iterator iter2 =  
> map2.value.begin();
>
>    while(iter1 != end) {
>        assert(iter1->first == iter2->first);
>        assert(iter1->second == iter2->second);
>        ++iter1;
>        ++iter2;
>
> = 
> ======================================================================
> ==./src/c++/test/testparser.cc
> = 
> ======================================================================
> #include <stdio.h>
> #include <stdlib.h>
>
> #include "Compiler.hh"
> #include "ValidSchema.hh"
>
> int main()
> {
>
>    try {
>        avro::ValidSchema schema;
>        avro::compileJsonSchema(std::cin, schema);
>
>        schema.toJson(std::cout);
>    }
>    catch (std::exception &e) {
>        std::cout << "Failed to parse or compile schema: " <<  
> e.what() << std::endl;
>    }
>
>    return 0;
> }
>
> = 
> ======================================================================
> ==./src/c++/test/unittest.cc
> = 
> ======================================================================
> #include <iostream>
> #include <fstream>
> #include <cassert>
> #include <sstream>
>
> #include "Zigzag.hh"
> #include "Node.hh"
> #include "Schema.hh"
> #include "ValidSchema.hh"
> #include "OutputStreamer.hh"
> #include "Serializer.hh"
> #include "Parser.hh"
> #include "ValidatingParser.hh"
> #include "SymbolMap.hh"
>
> #include "AvroSerialize.hh"
>
> using namespace avro;
>
> static const uint8_t fixeddata[16] =  
> {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
>
> struct TestSchema
> {
>    TestSchema()
>    {}
>
>    void buildSchema()
>    {
>        RecordSchema record("RootRecord");
>
>        record.addField("mylong", LongSchema());
>
>        IntSchema intSchema;
>        avro::MapSchema map = MapSchema(IntSchema());
>
>        record.addField("mymap", map);
>
>        ArraySchema array = ArraySchema(DoubleSchema());
>
>        const std::string s("myarray");
>        record.addField(s, array);
>
>        EnumSchema myenum("ExampleEnum");
>        myenum.addSymbol("zero");
>        myenum.addSymbol("one");
>        myenum.addSymbol("two");
>        myenum.addSymbol("three");
>        record.addField("myenum", myenum);
>
>        UnionSchema onion;
>
> = 
> ======================================================================
> ==./src/java/overview.html
> = 
> ======================================================================
> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
> <html>
> <head>
>   <title>Avro</title>
> </head>
> <body>Avro is a data serialization system.
>
>  <h2>Overview</h2>
>
>  <p>Avro provides:
>    <ul>
>      <li>Rich data structures.
>      <li>A compact, fast, binary data format.
>      <li>A container file, to store persistent data.
>      <li>Remote procedure call (RPC).
>      <li>Simple integration with dynamic languages.  Code generation
>      is not required to read or write data files nor to use or
>      implement RPC protocols.  Code generation as an optional
>      optimization, only worth implementing for statically typed
>      languages.
>    </ul>
>
>  <h2>Schemas</h2>
>
>  <p>Avro relies on <i>{@link org.apache.avro.Schema schemas}</i>.
>  When Avro data is read, the schema used when writing it is always
>  present.  This permits each datum to be written with no per-value
>  overheads, making serialization both fast and small.  This also
>  facilitates use with dynamic, scripting languages, since data,
>  together with its schema, is fully self-describing.
>
>  <p>When Avro data is stored in a {@link
>  org.apache.avro.file.DataFileWriter file}, its schema is stored with
>  it, so that files may be processed later by any program.  If the
>  program reading the data expects a different schema this can be
>  easily resolved, since both schemas are present.
>
>  <p>When Avro is used in {@link org.apache.avro.ipc RPC}, the client
>    and server exchange schemas in the connection handshake.  (This
>    can be optimized so that, for most calls, no schemas are actually
>    transmitted.)  Since both client and server both have the other's
>    full schema, correspondence between same named fields, missing
>    fields, extra fields, etc. can all be easily resolved.
>
>  <p>Avro schemas are defined with
>  with <a href="http://www.json.org/">JSON</a> .  This facilitates
>  implementation in languages that already have JSON libraries.
>
>  <h2>Comparison with other systems</h2>
>
>
> = 
> ======================================================================
> ==./src/java/org/apache/avro/io/doc-files/parsing.html
> = 
> ======================================================================
> <html>
> <head>
> <title>Avro schemas as LL(1) CFG definitions</title>
> </head>
> <body>
>
> <center><h1>Avro schemas as LL(1) CFG definitions</h1></center>
>
> This document shows how an Avro schema can be interpreted as the  
> definition of a context-free grammar in LL(1).  We use such an  
> interpretation for two use-cases.  In one use-case, we use them to  
> validate readers and writers of data against a single Avro schema.   
> Specifically, sequences of <code>Encoder.writeXyz</code> methods can  
> be validated against a schema, and similarly sequences of  
> <code>Decoder.readXyz</code> methods can be validated against a  
> schema.
>
> The second use-case is using grammars to perform schema resolution.   
> For this use-case, we've developed a subclass of <code>Decoder</ 
> code> which takes two Avro schemas as input -- a reader and a writer  
> schema.  This subclass accepts an input stream written according to  
> the writer schema, and presents it to a client expecting the reader  
> schema.  If the writer writes a long, for example, where the reader  
> expects a double, then the <code>Decoder.readDoubl</code> method  
> will convert the writer's long into a double.
>
> This document looks at grammars in the context of these two use- 
> cases.  We first look at the single-schema case, then the double- 
> schema case.  In the future, we believe the interpretation of Avro  
> schemas as CFGs will find other uses (for example, to determine  
> whether or not a schema admits finite-sized values).
>
>
> <h1>The interpretation</h1>
>
> <p> We parse a schema into a set of JSON objects.  For each record,  
> map, array, union schema inside this set, this parse is going to  
> generate a unique identifier "n<sub>i</sub>" (the "pointer" to the  
> schema).  By convention, n<sub>0</sub> is the identifier for the  
> "top-level" schema (i.e., the schema we want to read or write).  In  
> addition, where n<sub>i</sub> is a union, the parse will generate a  
> unique identifier "b<sub>ij</sub>" for each branch of the union.
>
> <p> A context-free grammar (CFG) consists of a set of terminal- 
> symbols, a set of non-terminal symbols, a set of productions, and a  
> start symbol.  Here's how we interpret an Avro schema as a CFG:
>
> <p> <b>Terminal symbols:</b> The terminal symbols of the CFG consist  
> of <code>null</code>, <code>bool</code>, <code>int</code>,  
> <code>long</code>, <code>float</code>, <code>double</code>,  
> <code>string</code>, <code>bytes</code>, <code>enum</code>,  
> <code>fixed</code>, <code>arraystart</code>, <code>arrayend</code>,  
> <code>mapstart</code>, <code>mapend</code>, and <code>union</code>.   
> In addition, we define the special terminals <code>"1"</code>,  
> <code>"2"</code>, <code>"3"</code>, <code>...</code> which designate  
> the "tag" of a union (i.e., which branch of the union is actually  
> being written or was found in the data).
>
> <p> Below, we use the variable <i>P</i> to represent any one of  
> <code>null</code>, <code>bool</code>, <code>int</code>, <code>long</ 
> code>, <code>double</code>, <code>string</code>, <code>bytes</code>  
> (i.e., the "primitives").
>
> <p><b>Non-terminal symbols:</b> The non-terminal symbols of the CFG  
> consist of the identifiers n<sub>i</sub>, u<sub>i</sub>, r<sub>i</ 
> sub>, e<sub>i</sub>, f<sub>i</sub> and r<sub>p</sub> (there is a non- 
> terminal r<sub>p</sub> for each symbol in <i>P</i>).
>
> <p><b>Productions:</b> The productions of the CFG are as follows:
>
> <p><i>Records:</i> If n<sub>i</sub> is a record-schema, then it  
> defines the following production:
> <br>&nbsp;&nbsp;&nbsp;n<sub>i</sub> ::= sym(f<sub>i1</sub>)  
> sym(f<sub>i2</sub>) .. sym(f<sub>im</sub>)
> <br>where f<sub>ij</sub> is field "j" of record n<sub>i</sub>, and  
> sym(f<sub>ij</sub>) is the appropriate member of <i>P</i> if  
> f<sub>ij</sub> is a primitive type, or the appropriate n<sub>k</sub>  
> for some k if f<sub>ij</sub> is a map, array, union, or record schema.
>
> <p><i>Arrays:</i> If n<sub>i</sub> is an array schema, then it  
> defines the following productions:
> <br> &nbsp;&nbsp;&nbsp;n<sub>i</sub> ::= <code>arraystart</code>  
> r<sub>i</sub> <code>arrayend</code>
> <br> &nbsp;&nbsp;&nbsp;r<sub>i</sub> ::= sym(n<sub>i</sub>) r<sub>i</ 
> sub> | &#949;
> <br> where "sym(n<sub>i</sub>)" is either some <i>P</i>, if this is  
> an array of primitives, or the non-terminal associated with the  
> schema of the element-type of n<sub>k</sub>.
>
> <p><i>Maps:</i> If n<sub>i</sub> is a map schema of element type  
> <i>P</i>, then it defines the following production:
> <br>&nbsp;&nbsp;&nbsp;n<sub>i</sub> ::= <code>mapstart</code>  
> r<sub>i</sub> <code>mapend</code>
> <br>&nbsp;&nbsp;&nbsp;r<sub>i</sub> ::= <code>string</code>  
> sym(n<sub>i</sub>) r<sub>i</sub> | &#949;
> <br> where "sym(n<sub>i</sub>)" is either some <i>P</i>, if the  
> value-type is a primitive, or the non-terminal associated with the  
> schema of the value-type of n<sub>k</sub>.
>
> <p><i>Unions:</i> If n<sub>i</sub> is a union schema, then it  
> defines the following productions:
> <br>&nbsp;&nbsp;&nbsp;n<sub>i</sub> ::= <code>union</code> u<sub>i</ 
> sub>
> <br>&nbsp;&nbsp;&nbsp;u<sub>i</sub> ::= 1 sym(b<sub>i1</sub>) | 2  
> sym(b<sub>i2</sub>) | ... | j sym(b<sub>ij</sub>)
> <br> where the "1", "2", "3" are the tags for the union, and the  
> b<sub>ij</sub> is branch "j" of union "n<sub>i</sub>", and  
> sym(b<sub>ij</sub>) is the appropriate member of <i>P</i> if  
> b<sub>ij</sub> is a primitive type, or the appropriate n<sub>k</sub>  
> if b<sub>ij</sub> is a map, array, union, or record schema.  (The  
> introduction of the terminal symbol "UNION" plus the introduction of  
> the additional non-terminal "u<sub>i</sub>" is a convenience to our  
> parsing implementation.)
>
> <p><i>Enum</i> If n<sub>i</sub> is an enum schema, then it defines  
> the following production:
> <br>&nbsp;&nbsp;&nbsp;n<sub>i</sub> ::= <code>enum</code> e<sub>i</ 
> sub>
>
> = 
> ======================================================================
> ==./src/schemata/org/apache/avro/ipc/HandshakeRequest.m4
> = 
> ======================================================================
> {
>    "type": "record",
>    "name": "HandshakeRequest", "namespace":"org.apache.avro.ipc",
>    "fields": [
>        {"name": "clientHash",
> 	 "type": include(`org/apache/avro/ipc/MD5.js')},
>        {"name": "clientProtocol", "type": ["null", "string"]},
>        {"name": "serverHash", "type": "MD5"},
> 	{"name": "meta", "type": ["null", {"type": "map", "values":  
> "bytes"}]}
> ]
> }
>
> = 
> ======================================================================
> ==./src/schemata/org/apache/avro/ipc/HandshakeResponse.m4
> = 
> ======================================================================
> {
>    "type": "record",
>    "name": "HandshakeResponse", "namespace": "org.apache.avro.ipc",
>    "fields": [
>        {"name": "match",
>         "type": {"type": "enum", "name": "HandshakeMatch",
>                  "symbols": ["BOTH", "CLIENT", "NONE"]}},
>        {"name": "serverProtocol",
>         "type": ["null", "string"]},
>        {"name": "serverHash",
>         "type": ["null", include(`org/apache/avro/ipc/MD5.js')]},
> 	{"name": "meta",
>         "type": ["null", {"type": "map", "values": "bytes"}]}
>    ]
> }
>
> = 
> ======================================================================
> ==./src/schemata/org/apache/avro/ipc/MD5.js
> = 
> ======================================================================
> {"type": "fixed", "name": "MD5", "size": 16}
>
> = 
> ======================================================================
> ==./src/test/java/org/apache/avro/io/TestBlockingIO.java
> = 
> ======================================================================
> package org.apache.avro.io;
>
> import java.io.ByteArrayInputStream;
> import java.io.ByteArrayOutputStream;
> import java.io.IOException;
> import java.io.UnsupportedEncodingException;
> import java.nio.ByteBuffer;
> import java.util.Stack;
>
> import org.codehaus.jackson.JsonFactory;
> import org.codehaus.jackson.JsonParseException;
> import org.codehaus.jackson.JsonParser;
> import org.testng.Assert;
> import org.testng.annotations.DataProvider;
> import org.testng.annotations.Test;
>
> public class TestBlockingIO {
>  private static final String UTF_8 = "UTF-8";
>
>  private static class Tests {
>    private final JsonParser parser;
>    private final Decoder input;
>    private final int depth;
>    public Tests(int bufferSize, int depth, String input)
>      throws JsonParseException, IOException {
>
>      this.depth = depth;
>      byte[] in = input.getBytes("UTF-8");
>      JsonFactory f = new JsonFactory();
>      JsonParser p = f.createJsonParser(
>          new ByteArrayInputStream(input.getBytes("UTF-8")));
>
>      ByteArrayOutputStream os = new ByteArrayOutputStream();
>      Encoder cos = new BlockingBinaryEncoder(os, bufferSize);
>      serialize(cos, p, os);
>      cos.flush();
>
>      byte[] bb = os.toByteArray();
>      // dump(bb);
>      this.input = new BinaryDecoder(new ByteArrayInputStream(bb));
>      this.parser =  f.createJsonParser(new ByteArrayInputStream(in));
>    }
>
>    public void scan()
>      throws JsonParseException, UnsupportedEncodingException,  
> IOException {
>      Stack<S> countStack = new Stack<S>();
>      long count = 0;
>      while (parser.nextToken() != null) {
>        switch (parser.getCurrentToken()) {
>        case END_ARRAY:
>
> = 
> ======================================================================
> ==./src/test/java/org/apache/avro/io/TestParsingTable.java
> = 
> ======================================================================
> package org.apache.avro.io;
>
> import java.util.BitSet;
>
> import org.apache.avro.Schema;
> import org.testng.Assert;
> import org.testng.annotations.DataProvider;
> import org.testng.annotations.Test;
>
> public class TestParsingTable {
>  @Test(dataProvider="data")
>  public void test(String jsonSchema, int startSymbol,
>      int[][] nonTerminals,
>      int[][] productions) {
>    BitSet bs = new BitSet();
>    ParsingTable t = new ParsingTable(Schema.parse(jsonSchema));
>    t.toString();
>    if (t.isTerminal(t.root)) {
>      Assert.assertEquals(startSymbol, t.root);
>    } else {
>      checkSymbol(startSymbol, t, t.root, bs, nonTerminals,  
> productions);
>    }
>  }
>
>  private void checkSymbol(int n, ParsingTable t, int node, BitSet bs,
>      int[][] nonTerminals, int[][] productions) {
>    if (t.isTerminal(node)) {
>      Assert.assertEquals(n, node);
>    } else {
>      if (! bs.get(n)) {
>        bs.set(n);
>        if (t.isUnion(node)) {
>          Assert.assertEquals(nonTerminals[n].length, t.size(node));
>          for (int i = 0; i < nonTerminals[n].length; i++) {
>            checkSymbol(nonTerminals[n][i], t, t.getBranch(node, i),  
> bs,
>                nonTerminals, productions);
>          }
>        } else {
>          Assert.assertEquals(1, nonTerminals[n].length);
>          checkProduction(productions[nonTerminals[n][0]], t, node, bs,
>              nonTerminals, productions);
>        }
>      }
>    }
>  }
>
>  private void checkProduction(int[] n, ParsingTable t, int sym,  
> BitSet bs,
>      int[][] nonTerminals, int[][] productions) {
>    Assert.assertTrue(t.isNonTerminal(sym) || t.isRepeater(sym) ||  
> t.isUnion(sym));
>    Assert.assertEquals(n.length, t.size(sym));
>
> = 
> ======================================================================
> ==./src/test/java/org/apache/avro/io/TestResolvingIO.java
> = 
> ======================================================================
> package org.apache.avro.io;
>
> import java.io.ByteArrayInputStream;
> import java.io.IOException;
> import java.util.Vector;
>
> import org.apache.avro.Schema;
> import org.testng.annotations.DataProvider;
> import org.testng.annotations.Test;
>
> public class TestResolvingIO {
>  @Test(dataProvider="data")
>  public void testRead(String jsonWriterSchema,
>      String writerCalls,
>      String jsonReaderSchema,
>      String readerCalls) throws IOException {
>    test(jsonWriterSchema, writerCalls, jsonReaderSchema,  
> readerCalls, -1);
>  }
>
>  @Test(dataProvider="data")
>  public void testSkip_0(String jsonWriterSchema,
>      String writerCalls,
>      String jsonReaderSchema,
>      String readerCalls) throws IOException {
>    test(jsonWriterSchema, writerCalls, jsonReaderSchema,  
> readerCalls, 0);
>  }
>
>  @Test(dataProvider="data")
>  public void testSkip_1(String jsonWriterSchema,
>      String writerCalls,
>      String jsonReaderSchema,
>      String readerCalls) throws IOException {
>    test(jsonWriterSchema, writerCalls, jsonReaderSchema,  
> readerCalls, 1);
>  }
>
>  @Test(dataProvider="data")
>  public void testSkip_2(String jsonWriterSchema,
>      String writerCalls,
>      String jsonReaderSchema,
>      String readerCalls) throws IOException {
>    test(jsonWriterSchema, writerCalls, jsonReaderSchema,  
> readerCalls, 2);
>  }
>
>  private void test(String jsonWriterSchema, String writerCalls,
>      String jsonReaderSchema, String readerCalls, int skipLevel)
>      throws IOException {
>    for (int i = 0; i < 10; i++) {
>      testOnce(jsonWriterSchema, writerCalls, jsonReaderSchema,
>          readerCalls, skipLevel);
>    }
>
> = 
> ======================================================================
> ==./src/test/java/org/apache/avro/io/TestResolvingTable.java
> = 
> ======================================================================
> package org.apache.avro.io;
>
> import java.util.BitSet;
> import java.util.HashMap;
> import java.util.Map;
>
> import org.apache.avro.Schema;
> import org.testng.Assert;
> import org.testng.annotations.DataProvider;
> import org.testng.annotations.Test;
>
> public class TestResolvingTable {
>  @Test(dataProvider="data")
>  public void test(String jsonWriterSchema, String jsonReaderSchema,
>      int startSymbol,
>      int[][] nonTerminals,
>      int[][] productions) {
>    BitSet bs = new BitSet();
>    ResolvingTable t = new  
> ResolvingTable(Schema.parse(jsonWriterSchema),
>        Schema.parse(jsonReaderSchema));
>    if (t.isTerminal(t.root)) {
>      Assert.assertEquals(startSymbol, t.root);
>    } else {
>      checkSymbol(startSymbol, t, t.root, bs, nonTerminals,  
> productions);
>    }
>  }
>
>  private void checkSymbol(int n, ResolvingTable t, int node, BitSet  
> bs,
>      int[][] nonTerminals, int[][] productions) {
>    if (t.isTerminal(node)) {
>      Assert.assertEquals(n, node);
>    } else {
>      if (! bs.get(n)) {
>        bs.set(n);
>        if (isAction(n, SKIP_ACTION)) {
>          Assert.assertTrue(t.isSkipAction(node));
>          checkSymbol(n - SKIP_ACTION, t,  
> t.getProductionToSkip(node), bs,
>              nonTerminals, productions);
>        } else if (isAction(n, FIELD_ACTION)) {
>          Assert.assertTrue(t.isFieldAction(node));
>        } else if (isAction(n, ERROR_ACTION)) {
>          Assert.assertTrue(t.isErrorAction(node));
>          Assert.assertNotNull(t.getMessage(node));
>        } else if (isAction(n, RESOLVER_ACTION)) {
>          Assert.assertTrue(t.isResolverAction(node));
>          checkSymbol(n - RESOLVER_ACTION, t,  
> t.getResolverActual(node), bs,
>              nonTerminals, productions);
>        } else if (isAction(n, READER_UNION_ACTION)) {
>          Assert.assertTrue(t.isReaderUnionAction(node));
>          checkSymbol(n - READER_UNION_ACTION, t,
>
> = 
> ======================================================================
> ==./src/test/java/org/apache/avro/io/TestValidatingIO.java
> = 
> ======================================================================
> package org.apache.avro.io;
>
> import java.io.ByteArrayInputStream;
> import java.io.ByteArrayOutputStream;
> import java.io.IOException;
> import java.nio.ByteBuffer;
> import java.util.Random;
> import java.util.Vector;
>
> import org.apache.avro.Schema;
> import org.apache.avro.util.Utf8;
> import org.testng.Assert;
> import org.testng.annotations.DataProvider;
> import org.testng.annotations.Test;
>
>
> public class TestValidatingIO {
>  @Test(dataProvider="data")
>  public void testRead(String jsonSchema, String calls) throws  
> IOException {
>    test(jsonSchema, calls, -1, false);
>  }
>
>  @Test(dataProvider="data")
>  public void testSkip_0(String jsonSchema, String calls) throws  
> IOException {
>    test(jsonSchema, calls, 0, false);
>  }
>
>  @Test(dataProvider="data")
>  public void testSkip_1(String jsonSchema, String calls) throws  
> IOException {
>    test(jsonSchema, calls, 1, false);
>  }
>
>  @Test(dataProvider="data")
>  public void testSkip_2(String jsonSchema, String calls) throws  
> IOException {
>    test(jsonSchema, calls, 2, false);
>  }
>
>  @Test(dataProvider="data")
>  public void testRead_blocking(String jsonSchema, String calls)
>    throws IOException {
>    test(jsonSchema, calls, -1, true);
>  }
>
>  @Test(dataProvider="data")
>  public void testSkip_0_blocking(String jsonSchema, String calls)
>    throws IOException {
>    test(jsonSchema, calls, 0, true);
>  }
>
>  @Test(dataProvider="data")
>
> = 
> ======================================================================
> ==./src/test/schemata/FSData.avpr
> = 
> ======================================================================
>
> {"namespace": "org.apache.hadoop.fs",
> "protocol": "FSData",
>
> "types": [
> ],
>
> "messages": {
>     "read": {
>         "request": [
>             {"name": "block", "type": "string"},
>             {"name": "start", "type": "long"},
>             {"name": "length", "type": "long"}
>         ],
>         "response": "bytes"
>     }
>
> }
>
> }
>
> = 
> ======================================================================
> ==./src/test/schemata/interop.avsc
> = 
> ======================================================================
> {"type": "record", "name":"Interop", "namespace": "org.apache.avro",
>  "fields": [
>      {"name": "intField", "type": "int"},
>      {"name": "longField", "type": "long"},
>      {"name": "stringField", "type": "string"},
>      {"name": "boolField", "type": "boolean"},
>      {"name": "floatField", "type": "float"},
>      {"name": "doubleField", "type": "double"},
>      {"name": "bytesField", "type": "bytes"},
>      {"name": "nullField", "type": "null"},
>      {"name": "arrayField", "type": {"type": "array", "items":  
> "double"}},
>      {"name": "mapField", "type":
>       {"type": "map", "keys": "long", "values":
>        {"type": "record", "name": "Foo",
>         "fields": [{"name": "label", "type": "string"}]}}},
>      {"name": "unionField", "type":
>       ["boolean", "double", {"type": "array", "items": "bytes"}]},
>      {"name": "enumField", "type":
>       {"type": "enum", "name": "Kind", "symbols": ["A","B","C"]}},
>      {"name": "fixedField", "type":
>       {"type": "fixed", "name": "MD5", "size": 16}},
>      {"name": "recordField", "type":
>       {"type": "record", "name": "Node",
>        "fields": [
>            {"name": "label", "type": "string"},
>            {"name": "children", "type": {"type": "array", "items":  
> "Node"}}]}}
>  ]
> }
>
> = 
> ======================================================================
> ==./src/test/schemata/simple.avpr
> = 
> ======================================================================
> {"namespace": "org.apache.avro.test",
> "protocol": "Simple",
>
> "types": [
>     {"name": "Kind", "type": "enum", "symbols": ["FOO","BAR","BAZ"]},
>
>     {"name": "MD5", "type": "fixed", "size": 16},
>
>     {"name": "TestRecord", "type": "record",
>      "fields": [
>          {"name": "name", "type": "string"},
>          {"name": "kind", "type": "Kind"},
>          {"name": "hash", "type": "MD5"}
>      ]
>     },
>
>     {"name": "TestError", "type": "error", "fields": [
>         {"name": "message", "type": "string"}
>      ]
>     }
>
> ],
>
> "messages": {
>
>     "hello": {
>         "request": [{"name": "greeting", "type": "string"}],
>         "response": "string"
>     },
>
>     "echo": {
>         "request": [{"name": "record", "type": "TestRecord"}],
>         "response": "TestRecord"
>     },
>
>     "echoBytes": {
>         "request": [{"name": "data", "type": "bytes"}],
>         "response": "bytes"
>     },
>
>     "error": {
>         "request": [],
>         "response": "null",
>         "errors": ["TestError"]
>     }
> }
>
> }


Re: [VOTE] Avro release 1.0.0 (candidate 0)

Posted by Matt Massie <ma...@cloudera.com>.
On Jul 2, 2009, at 2:16 PM, Patrick Hunt wrote:

> Doug Cutting wrote:
>> Patrick Hunt wrote:
>>> * rat tool reports a number of issues with licensing (see  
>>> attached) of source code files
>> Wow, that was a big attachment!
>
> Weird, looks like RAT includes all that by default. I just attached  
> the output of the command. bummer.
>
>> C and C++ sources need license headers added generally.
>
> *.py as well? Any other source type you support?
>
> for example:
> !????? ./src/c++/scripts/gen.py
>
> Are you including licenses/notices for any/all that need it in lib/ 
> *.jar and lib/py/*?
>
> Otw licensing cleanup sounds good to me.
>
> I did notice that you include Makefile in src/c, I'm no expert but  
> typically don't you just include configure script and let the end  
> user run it to generate the Makefile? Not a showstopper regardless.

This Makefile artifact will be fixed with the patch I'm working on now.

-Matt

Re: [VOTE] Avro release 1.0.0 (candidate 0)

Posted by Patrick Hunt <ph...@apache.org>.
Patrick Hunt wrote:
> Are you including licenses/notices for any/all that need it in lib/*.jar 
> and lib/py/*?

for example (I didn't look at them all) ASM requires binary 
distributions to maintain the license, I don't see it in lib directory 
or in the jar itself:

http://asm.ow2.org/license.html

Patrick

Re: [VOTE] Avro release 1.0.0 (candidate 0)

Posted by Patrick Hunt <ph...@apache.org>.
Doug Cutting wrote:
> Patrick Hunt wrote:
>> * rat tool reports a number of issues with licensing (see attached) of 
>> source code files
> 
> Wow, that was a big attachment!

Weird, looks like RAT includes all that by default. I just attached the 
output of the command. bummer.

> 
> C and C++ sources need license headers added generally.

*.py as well? Any other source type you support?

for example:
  !????? ./src/c++/scripts/gen.py

Are you including licenses/notices for any/all that need it in lib/*.jar 
and lib/py/*?

Otw licensing cleanup sounds good to me.

I did notice that you include Makefile in src/c, I'm no expert but 
typically don't you just include configure script and let the end user 
run it to generate the Makefile? Not a showstopper regardless.

Patrick


Re: [VOTE] Avro release 1.0.0 (candidate 0)

Posted by Doug Cutting <cu...@apache.org>.
The thing blocking the release is the lack of license headers.

The best place for generated files is build/c, not in the src/ tree at  
all.

[Sent from mobile]

On Jul 2, 2009, at 6:31 PM, Matt Massie <ma...@cloudera.com> wrote:

> I'm very close now.
>
> I have all the object files being put into the src/c/_build directory.
>
> I want to make sure that the "package" target doesn't include the  
> _build directory.  Unfortunately, ant FileSet isn't working as I  
> expected.
>
> Should I open the JIRA and put the work that I have so far?
>
> -Matt
>
>
>
> On Jul 2, 2009, at 4:23 PM, Doug Cutting wrote:
>
>> Matt Massie wrote:
>>> Embedding an autoconf/automake build inside an ant build is a bit  
>>> tricky.  :)
>>
>> Owen's done similar in Hadoop, although I don't know the details...
>>
>> Doug
>

Re: [VOTE] Avro release 1.0.0 (candidate 0)

Posted by Doug Cutting <do...@cotcut.net>.
The best place for generated files would be in build/c, not in the src  
tree at all.

[Sent from mobile]

On Jul 2, 2009, at 6:31 PM, Matt Massie <ma...@cloudera.com> wrote:

> I'm very close now.
>
> I have all the object files being put into the src/c/_build directory.
>
> I want to make sure that the "package" target doesn't include the  
> _build directory.  Unfortunately, ant FileSet isn't working as I  
> expected.
>
> Should I open the JIRA and put the work that I have so far?
>
> -Matt
>
>
>
> On Jul 2, 2009, at 4:23 PM, Doug Cutting wrote:
>
>> Matt Massie wrote:
>>> Embedding an autoconf/automake build inside an ant build is a bit  
>>> tricky.  :)
>>
>> Owen's done similar in Hadoop, although I don't know the details...
>>
>> Doug
>

Re: [VOTE] Avro release 1.0.0 (candidate 0)

Posted by Matt Massie <ma...@cloudera.com>.
I've submitted a patch...

https://issues.apache.org/jira/browse/AVRO-68

This adds the license headers.  In addition, it does a VPATH build and  
ensures that the intermediate files are not packaged in the Avro  
release tarball.

-Matt

On Jul 2, 2009, at 6:47 PM, Doug Cutting wrote:

> The important thing for the release is adding the license headers.
>
> [Sent from mobile]
>
> On Jul 2, 2009, at 6:31 PM, Matt Massie <ma...@cloudera.com> wrote:
>
>> I'm very close now.
>>
>> I have all the object files being put into the src/c/_build  
>> directory.
>>
>> I want to make sure that the "package" target doesn't include the  
>> _build directory.  Unfortunately, ant FileSet isn't working as I  
>> expected.
>>
>> Should I open the JIRA and put the work that I have so far?
>>
>> -Matt
>>
>>
>>
>> On Jul 2, 2009, at 4:23 PM, Doug Cutting wrote:
>>
>>> Matt Massie wrote:
>>>> Embedding an autoconf/automake build inside an ant build is a bit  
>>>> tricky.  :)
>>>
>>> Owen's done similar in Hadoop, although I don't know the details...
>>>
>>> Doug
>>


Re: [VOTE] Avro release 1.0.0 (candidate 0)

Posted by Doug Cutting <do...@cotcut.net>.
The important thing for the release is adding the license headers.

[Sent from mobile]

On Jul 2, 2009, at 6:31 PM, Matt Massie <ma...@cloudera.com> wrote:

> I'm very close now.
>
> I have all the object files being put into the src/c/_build directory.
>
> I want to make sure that the "package" target doesn't include the  
> _build directory.  Unfortunately, ant FileSet isn't working as I  
> expected.
>
> Should I open the JIRA and put the work that I have so far?
>
> -Matt
>
>
>
> On Jul 2, 2009, at 4:23 PM, Doug Cutting wrote:
>
>> Matt Massie wrote:
>>> Embedding an autoconf/automake build inside an ant build is a bit  
>>> tricky.  :)
>>
>> Owen's done similar in Hadoop, although I don't know the details...
>>
>> Doug
>

Re: [VOTE] Avro release 1.0.0 (candidate 0)

Posted by Matt Massie <ma...@cloudera.com>.
I'm very close now.

I have all the object files being put into the src/c/_build directory.

I want to make sure that the "package" target doesn't include the  
_build directory.  Unfortunately, ant FileSet isn't working as I  
expected.

Should I open the JIRA and put the work that I have so far?

-Matt



On Jul 2, 2009, at 4:23 PM, Doug Cutting wrote:

> Matt Massie wrote:
>> Embedding an autoconf/automake build inside an ant build is a bit  
>> tricky.  :)
>
> Owen's done similar in Hadoop, although I don't know the details...
>
> Doug


Re: [VOTE] Avro release 1.0.0 (candidate 0)

Posted by Doug Cutting <cu...@apache.org>.
Matt Massie wrote:
> Embedding an 
> autoconf/automake build inside an ant build is a bit tricky.  :)

Owen's done similar in Hadoop, although I don't know the details...

Doug

Re: [VOTE] Avro release 1.0.0 (candidate 0)

Posted by Matt Massie <ma...@cloudera.com>.
I've added all the license header to the source.

I'm wrestling a bit with a VPATH build but I'm close.  Embedding an  
autoconf/automake build inside an ant build is a bit tricky.  :)

-Matt

On Jul 2, 2009, at 4:09 PM, Doug Cutting wrote:

> Doug Cutting wrote:
>> Does anyone volunteer to do the C++ code?
>
> I just did it.
>
> Matt, how is your C patch coming along?
>
> Doug


Re: [VOTE] Avro release 1.0.0 (candidate 0)

Posted by Doug Cutting <cu...@apache.org>.
Doug Cutting wrote:
> Does anyone volunteer to do the C++ code?

I just did it.

Matt, how is your C patch coming along?

Doug

Re: [VOTE] Avro release 1.0.0 (candidate 0)

Posted by Doug Cutting <cu...@apache.org>.
I just committed this under AVRO-66.

Doug

George Porter wrote:
> Doug,
> 
> I came across a small bug related to passing per-call metadata.  On 
> runtime exceptions in the Responder, we don't pass back empty per-call 
> metadata.
> 
> It is a small patch--should I create a new JIRA for it?  Here is the patch:
> 
> Index: src/java/org/apache/avro/ipc/Responder.java
> ===================================================================
> --- src/java/org/apache/avro/ipc/Responder.java    (revision 790757)
> +++ src/java/org/apache/avro/ipc/Responder.java    (working copy)
> @@ -113,6 +113,8 @@
>        error = new AvroRemoteException(e);
>        bbo = new ByteBufferOutputStream();
>        out = new BinaryEncoder(bbo);
> +     Map<Utf8,ByteBuffer> responseMeta = new HashMap<Utf8,ByteBuffer>();
> +     META_WRITER.write(responseMeta, out);
>        out.writeBoolean(true);
>        writeError(Protocol.SYSTEM_ERRORS, error, out);
>      }

Re: [VOTE] Avro release 1.0.0 (candidate 0)

Posted by George Porter <Ge...@Sun.COM>.
Doug,

I came across a small bug related to passing per-call metadata.  On  
runtime exceptions in the Responder, we don't pass back empty per-call  
metadata.

It is a small patch--should I create a new JIRA for it?  Here is the  
patch:

Index: src/java/org/apache/avro/ipc/Responder.java
===================================================================
--- src/java/org/apache/avro/ipc/Responder.java	(revision 790757)
+++ src/java/org/apache/avro/ipc/Responder.java	(working copy)
@@ -113,6 +113,8 @@
        error = new AvroRemoteException(e);
        bbo = new ByteBufferOutputStream();
        out = new BinaryEncoder(bbo);
+     Map<Utf8,ByteBuffer> responseMeta = new  
HashMap<Utf8,ByteBuffer>();
+     META_WRITER.write(responseMeta, out);
        out.writeBoolean(true);
        writeError(Protocol.SYSTEM_ERRORS, error, out);
      }

Re: [VOTE] Avro release 1.0.0 (candidate 0)

Posted by Doug Cutting <cu...@apache.org>.
Okay, I added license files for all included libs, and to Java sources. 
  I'm unable to add them to json files, since Python's json parser 
doesn't handle comments (and they're not part of the json spec).

Once we get license headers added to C and C++, I think we're good to 
go.  Does anyone volunteer to do the C++ code?

I'm leaving for a short vacation tomorrow morning, and would really like 
to get another release candidate build out for a vote before then...

Doug

Doug Cutting wrote:
> Patrick Hunt wrote:
>> * rat tool reports a number of issues with licensing (see attached) of 
>> source code files
> 
> Wow, that was a big attachment!
> 
> C and C++ sources need license headers added generally.
> 
> Outside of that, I see the following files that could use licenses:
> 
>  !????? ./ivy.xml
>  !????? ./src/java/overview.html
>  !????? ./src/java/org/apache/avro/io/doc-files/parsing.html
>  !????? ./src/schemata/org/apache/avro/ipc/HandshakeRequest.m4
>  !????? ./src/schemata/org/apache/avro/ipc/HandshakeResponse.m4
>  !????? ./src/schemata/org/apache/avro/ipc/MD5.js
>  !????? ./src/test/java/org/apache/avro/io/TestBlockingIO.java
>  !????? ./src/test/java/org/apache/avro/io/TestParsingTable.java
>  !????? ./src/test/java/org/apache/avro/io/TestResolvingIO.java
>  !????? ./src/test/java/org/apache/avro/io/TestResolvingTable.java
>  !????? ./src/test/java/org/apache/avro/io/TestValidatingIO.java
>  !????? ./src/test/schemata/FSData.avpr
>  !????? ./src/test/schemata/interop.avsc
>  !????? ./src/test/schemata/simple.avpr
> 
> Pat, are there others that are of concern?
> 
> Doug

Re: [VOTE] Avro release 1.0.0 (candidate 0)

Posted by Doug Cutting <cu...@apache.org>.
Patrick Hunt wrote:
> * rat tool reports a number of issues with licensing (see attached) of 
> source code files

Wow, that was a big attachment!

C and C++ sources need license headers added generally.

Outside of that, I see the following files that could use licenses:

  !????? ./ivy.xml
  !????? ./src/java/overview.html
  !????? ./src/java/org/apache/avro/io/doc-files/parsing.html
  !????? ./src/schemata/org/apache/avro/ipc/HandshakeRequest.m4
  !????? ./src/schemata/org/apache/avro/ipc/HandshakeResponse.m4
  !????? ./src/schemata/org/apache/avro/ipc/MD5.js
  !????? ./src/test/java/org/apache/avro/io/TestBlockingIO.java
  !????? ./src/test/java/org/apache/avro/io/TestParsingTable.java
  !????? ./src/test/java/org/apache/avro/io/TestResolvingIO.java
  !????? ./src/test/java/org/apache/avro/io/TestResolvingTable.java
  !????? ./src/test/java/org/apache/avro/io/TestValidatingIO.java
  !????? ./src/test/schemata/FSData.avpr
  !????? ./src/test/schemata/interop.avsc
  !????? ./src/test/schemata/simple.avpr

Pat, are there others that are of concern?

Doug

Re: [VOTE] Avro release 1.0.0 (candidate 0)

Posted by Patrick Hunt <ph...@apache.org>.
-1

tests all pass for me, however:

* rat tool reports a number of issues with licensing (see attached) of 
source code files


Also, src/c for the tar file contains generated .o files, should it?

Patrick

Doug Cutting wrote:
> I have created a candidate build for Avro release 1.0.0.  This would be 
> the first public release of Avro.  We hope not to change Avro's 
> specification incompatibly until release 2.0.0, so its adequacy is more 
> important than bugs or features for this release.
> 
> Please download, test and vote by 7 July.
> 
> http://people.apache.org/~cutting/avro-1.0.0-candidate-0/
> 
> Thanks,
> 
> Doug