Program Listing for File streamable.h
↰ Return to documentation for file (include/cpphots/interfaces/streamable.h)
#ifndef CPPHOTS_INTERFACES_STREAMABLE_H
#define CPPHOTS_INTERFACES_STREAMABLE_H
#include <ostream>
#include <istream>
#include <string>
namespace cpphots {
namespace interfaces {
class Streamable {
public:
virtual void toStream(std::ostream& out) const = 0;
virtual void fromStream(std::istream& in) = 0;
static std::string getNextMetacommand(std::istream& in);
protected:
static void writeMetacommand(std::ostream& out, const std::string& cmd);
static void matchMetacommandOptional(std::istream& in, const std::string& cmd);
static void matchMetacommandRequired(std::istream& in, const std::string& cmd);
};
std::ostream& operator<<(std::ostream& out, const Streamable& streamable);
std::istream& operator>>(std::istream& in, Streamable& streamable);
}
template <typename T>
T createFromStream(std::istream& in) {
T t{};
t.fromStream(in);
return t;
}
}
#endif