Go to the documentation of this file.00001 
00002 
00003 
00004 
00005 
00006 
00007 
00008 
00009 
00010 
00011 
00012 
00013 
00014 
00015 
00016 
00017 
00018 
00019 #ifndef avro_Encoder_hh__
00020 #define avro_Encoder_hh__
00021 
00022 #include "Config.hh"
00023 #include <stdint.h>
00024 #include <string>
00025 #include <vector>
00026 
00027 #include "ValidSchema.hh"
00028 #include "Stream.hh"
00029 
00030 #include <boost/shared_ptr.hpp>
00031 
00045 
00046 namespace avro {
00047 
00053 class AVRO_DECL Encoder {
00054 public:
00055     virtual ~Encoder() { };
00059     virtual void init(OutputStream& os) = 0;
00060 
00062     virtual void flush() = 0;
00063 
00065     virtual void encodeNull() = 0;
00066 
00068     virtual void encodeBool(bool b) = 0;
00069 
00071     virtual void encodeInt(int32_t i) = 0;
00072 
00074     virtual void encodeLong(int64_t l) = 0;
00075 
00077     virtual void encodeFloat(float f) = 0;
00078 
00080     virtual void encodeDouble(double d) = 0;
00081 
00083     virtual void encodeString(const std::string& s) = 0;
00084 
00091     virtual void encodeBytes(const uint8_t *bytes, size_t len) = 0;
00092 
00098     void encodeBytes(const std::vector<uint8_t>& bytes) {
00099         uint8_t b = 0; 
00100         encodeBytes(bytes.empty() ? &b : &bytes[0], bytes.size());
00101     }
00102 
00104     virtual void encodeFixed(const uint8_t *bytes, size_t len) = 0;
00105 
00111     void encodeFixed(const std::vector<uint8_t>& bytes) {
00112         encodeFixed(&bytes[0], bytes.size());
00113     }
00114 
00116     virtual void encodeEnum(size_t e) = 0;
00117 
00119     virtual void arrayStart() = 0;
00120 
00122     virtual void arrayEnd() = 0;
00123 
00125     virtual void mapStart() = 0;
00126 
00128     virtual void mapEnd() = 0;
00129 
00132     virtual void setItemCount(size_t count) = 0;
00133 
00135     virtual void startItem() = 0;
00136 
00138     virtual void encodeUnionIndex(size_t e) = 0;
00139 };
00140 
00144 typedef boost::shared_ptr<Encoder> EncoderPtr;
00145 
00149 AVRO_DECL EncoderPtr binaryEncoder();
00150 
00155 AVRO_DECL EncoderPtr validatingEncoder(const ValidSchema& schema,
00156     const EncoderPtr& base);
00157 
00161 AVRO_DECL EncoderPtr jsonEncoder(const ValidSchema& schema);
00162 
00163 }   
00164 
00165 #endif