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