// -*- mode: c++; c-basic-offset: 2; -*- #ifndef PACKAGES_HH #define PACKAGES_HH #include "package.hh" class PackagesWriter { public: virtual ~PackagesWriter() {} static PackagesWriter* create(std::ostream* out); virtual void write(Package const& package, char const* data, size_t size, struct timespec end) = 0; void write(Package const& package, std::string const& data, struct timespec end) { write(package, data.data(), data.size(), end); } virtual void flush() = 0; protected: PackagesWriter() {} PackagesWriter(PackagesWriter const&) = delete; PackagesWriter& operator=(PackagesWriter const&) = delete; }; class PackagesReader { public: enum Status { GOOD, INVALID, IO_ERROR, }; class Delegate { public: virtual ~Delegate() {} virtual void package(Package const& package, struct timespec end) = 0; virtual void data(uint32_t id, char const* data, size_t size, bool last) = 0; protected: Delegate() {} }; static Status read(std::istream& in, Delegate* delegate); private: ~PackagesReader() {} PackagesReader() {} }; #endif // PACKAGES_HH