// - cout-replacement wrapper for the W65816 / Apple IIgs target. // // std::stringstream / std::ostringstream are NOT provided on this target. // The full std::iostream surface pulls in a locale-aware num_put/num_get // machinery that, with the soft-float libcalls and ctype tables, blows // past a single-bank text budget on most demos. Per Phase 5.4 of the // gap-closure plan, the cout replacement is: // // 1. etl::string_stream<> - fixed-capacity ETL string + operator<< // overloads for int / hex / bool / span / // string_view, plus optional FP if // ETL_USING_FORMAT_FLOATING_POINT=1 (off // by default on this target). // 2. printf("%s", ss.str().c_str()) // - emit the result through the existing // libc printf which already handles GNO // / GS/OS / MAME stdout routing. // // Convenience aliases so existing portable code that #include's // compiles by pointing at the ETL surface. Note that this // is a thin alias header - the underlying type is etl::string_stream // (fixed capacity), NOT std::stringstream (heap-grown). Callers // preferring the longer form can use etl::string_stream directly. // // Idiom: // // #include // #include // #include // #include // // etl::string<128> buf; // std::stringstream ss(buf); // alias of etl::string_stream // ss << "hello, " << 42 << " world"; // printf("%s\n", ss.str().c_str()); // -> "hello, 42 world" #ifndef _W65816_CXX_SSTREAM #define _W65816_CXX_SSTREAM #include "etl/string.h" #include "etl/string_stream.h" #include "etl/to_string.h" namespace std { // Alias the ETL fixed-capacity string-stream into the std:: namespace // so generic code that names `std::stringstream` resolves. This is // NOT a full std::stringstream - it requires an external string // buffer (passed to the constructor) and is fixed-capacity. using stringstream = ::etl::string_stream; using ostringstream = ::etl::string_stream; } // namespace std #endif // _W65816_CXX_SSTREAM