InputStreamer.hh
00001
00019 #ifndef avro_InputStreamer_hh__
00020 #define avro_InputStreamer_hh__
00021
00022 #include <iostream>
00023 #include <stdint.h>
00024
00025 namespace avro {
00026
00035
00036 class InputStreamer {
00037
00038 public:
00039
00040 virtual ~InputStreamer()
00041 { }
00042
00043 virtual size_t readByte(uint8_t &byte) = 0;
00044 virtual size_t readWord(uint32_t &word) = 0;
00045 virtual size_t readLongWord(uint64_t &word) = 0;
00046 virtual size_t readBytes(void *bytes, size_t size) = 0;
00047 };
00048
00049
00056
00057 class IStreamer : public InputStreamer {
00058
00059 public:
00060
00061 IStreamer(std::istream &is) :
00062 is_(is)
00063 {}
00064
00065 size_t readByte(uint8_t &byte) {
00066 char val;
00067 is_.get(val);
00068 byte = val;
00069 return 1;
00070 }
00071
00072 size_t readWord(uint32_t &word) {
00073 is_.read(reinterpret_cast<char *>(&word), sizeof(word));
00074 return is_.gcount();
00075 }
00076
00077 size_t readLongWord(uint64_t &word) {
00078 is_.read(reinterpret_cast<char *>(&word), sizeof(word));
00079 return is_.gcount();
00080 }
00081
00082 size_t readBytes(void *bytes, size_t size) {
00083 is_.read(reinterpret_cast<char *>(bytes), size);
00084 return is_.gcount();
00085 }
00086
00087 private:
00088
00089 std::istream &is_;
00090 };
00091
00092 }
00093
00094 #endif