#include #include #include #include #include #include // deprecated #include // ======================== #define TRACE std::cout << "\nLine-" << __LINE__ << ": --- " << __FUNCTION__ << " ---" << std::endl #define START std::cout << "\nLine-" << __LINE__ << ": >>> START " << __FUNCTION__ << " <<<" << std::endl #define FINISH std::cout << "Line-" << __LINE__ << ": <<< FINISH " << __FUNCTION__ << " >>>" << std::endl << std::endl #define SHOW(x) std::cout << "[ Line-" << __LINE__ << ", " << __FUNCTION__ << "] " << #x << " = <" << x << ">" << std::endl // --------------------------- void showCompilerInfo(std::ostream& o_stream) { o_stream << "Compiler: "; #if (defined __hpux && defined __HP_aCC) o_stream << "HP C/aC++ " << __HP_aCC; #elif (defined __INTEL_COMPILER) o_stream << "Intel(R) C++ Intel(R) 64 Compiler, Version " << __INTEL_COMPILER; #elif (defined __GNUC__ && !defined __INTEL_COMPILER) o_stream << "GNU g++, Version " << __GNUC__; #ifdef __GNUC_MINOR__ o_stream << "." << __GNUC_MINOR__; #ifdef __GNUC_PATCHLEVEL__ #if __GNUC_PATCHLEVEL__ o_stream << "." << __GNUC_PATCHLEVEL__; #endif // #ifdef __GNUC_PATCHLEVEL__ #endif // #if __GNUC_PATCHLEVEL__ #endif // #ifdef __GNUC_MINOR__ #else #error Unknown compiler #endif o_stream << std::endl << std::flush; } // ------------- char* pStrStream = 0; char* pStringStream = 0; // ------------- static void putToStrStream(std::ostream& i_stream, const char* i_pText) { START; SHOW(pStrStream); SHOW(strlen(pStrStream)); SHOW(i_pText); SHOW(strlen(i_pText)); i_stream << i_pText; SHOW(pStrStream); SHOW(strlen(pStrStream)); FINISH; } // ------------- static void putToStringStream(std::ostream& i_stream, const char* i_pText) { START; SHOW(pStringStream); SHOW(strlen(pStringStream)); SHOW(i_pText); SHOW(strlen(i_pText)); // i_stream.clear(); // i_stream.seekp(0, std::ios::beg); i_stream << i_pText; // i_stream << std::ends; SHOW(pStringStream); SHOW(strlen(pStringStream)); FINISH; } // ---------------- void doStrStream(const char* i_pText, std::size_t i_size) { START; SHOW(i_size); std::strstream stream(pStrStream, i_size); SHOW(stream.rdbuf()->pcount()); SHOW(stream.str()); putToStrStream(stream, i_pText); SHOW(stream.rdbuf()->pcount()); FINISH; } // ---------------- void doStringStream(const char* i_pText, std::size_t i_size) { START; SHOW(i_size); std::stringstream stream; stream.rdbuf()->pubsetbuf(pStringStream, i_size); // stream.rdbuf()->str(""); SHOW(stream.tellp()); SHOW(stream.str().size()); SHOW(stream.rdbuf()->str().size()); SHOW(stream.rdbuf()->in_avail()); SHOW(stream.str()); SHOW(stream.str().c_str()); SHOW(stream.str().data()); putToStringStream(stream, i_pText); SHOW(stream.str()); SHOW(stream.str().c_str()); SHOW(stream.str().data()); SHOW(stream.tellp()); SHOW(stream.str().size()); SHOW(stream.rdbuf()->str().size()); SHOW(stream.rdbuf()->in_avail()); FINISH; } // ------------ int main() { system ("uname -a"); showCompilerInfo(std::cout); std::cout << "Data Model: " << (sizeof(void*) * CHAR_BIT) << " bits" << std::endl; pStrStream = new char [100]; pStringStream = new char [100]; memset (pStrStream, 'P', 100); pStrStream[70] = 0; memset (pStringStream, 'Q', 100); pStringStream[90] = 0; TRACE; doStrStream("ABCDEF", 45); doStrStream("XYZ", 25); TRACE; doStringStream("abcdef", 45); doStringStream("xyz", 25); // ------------------ delete[] pStrStream; delete[] pStringStream; return 0; }