#pragma once #include #include #include #include #include #include namespace sp { template ::value, bool> = true> std::ostream& operator<<(std::ostream& a_Stream, const PrintableField& a_Field) { return a_Stream << std::to_string(a_Field.GetValue()); } inline std::ostream& operator<<(std::ostream& a_Stream, const PrintableField& a_Field) { return a_Stream << a_Field.GetValue(); } inline std::ostream& operator<<(std::ostream& a_Stream, const PrintableField& a_Field) { return a_Stream << "\"" << a_Field.GetValue() << "\""; } template std::ostream& operator<<(std::ostream& a_Stream, const PrintableField>& a_Data); template std::ostream& operator<<(std::ostream& a_Stream, const PrintableField>& a_Data); template std::ostream& operator<<(std::ostream& a_Stream, const PrintableField>& a_Data); template std::ostream& operator<<(std::ostream& a_Stream, const PrintableField>& a_Data) { return a_Stream << PrintableField(a_Data.GetValue().first) << " => " << PrintableField(a_Data.GetValue().second); } template std::ostream& operator<<(std::ostream& a_Stream, const PrintableField>& a_Data) { a_Stream << "{"; std::copy(a_Data.GetValue().begin(), a_Data.GetValue().end(), OstreamFieldIterator>(std::cout, ", ")); return a_Stream << "}"; } template std::ostream& operator<<(std::ostream& a_Stream, const PrintableField>& a_Data) { a_Stream << "{"; std::copy(a_Data.GetValue().begin(), a_Data.GetValue().end(), OstreamFieldIterator(std::cout, ", ")); return a_Stream << "}"; } } // namespace sp