#pragma once #include #include #include #include enum class ExportFormat { TSV, XML, JSON }; template<> const std::string& getEnumTypeName(); template<> const std::vector>& getEnumMembers(); std::ostream& operator<<(std::ostream& stream, ExportFormat value); std::istream& operator>>(std::istream& stream, ExportFormat& value); class Exporter { public: virtual ~Exporter() {} virtual void exportShapes(const boost::filesystem::path& inputFilePath, const Timeline& shapes, std::ostream& outputStream) = 0; }; class TSVExporter : public Exporter { public: void exportShapes(const boost::filesystem::path& inputFilePath, const Timeline& shapes, std::ostream& outputStream) override; }; class XMLExporter : public Exporter { public: void exportShapes(const boost::filesystem::path& inputFilePath, const Timeline& shapes, std::ostream& outputStream) override; }; class JSONExporter : public Exporter { public: void exportShapes(const boost::filesystem::path& inputFilePath, const Timeline& shapes, std::ostream& outputStream) override; };