- #include "MemoryOutStream.h" 
-   
- #ifdef UNITTEST_MEMORYOUTSTREAM_IS_STD_OSTRINGSTREAM 
-   
- namespace UnitTest { 
-   
-    char const* MemoryOutStream::GetText() const 
-    { 
-       m_text = this->str(); 
-       return m_text.c_str(); 
-    } 
-   
-    void MemoryOutStream::Clear() 
-    { 
-       this->str(std::string()); 
-       m_text = this->str(); 
-    } 
-   
- #ifdef UNITTEST_COMPILER_IS_MSVC6 
-   
-    #define snprintf _snprintf 
-   
-    template<typename ValueType> 
-    std::ostream& FormatToStream(std::ostream& stream, char const* format, ValueType const& value) 
-    { 
-       using namespace std; 
-   
-       const size_t BUFFER_SIZE=32; 
-       char txt[BUFFER_SIZE]; 
-       snprintf(txt, BUFFER_SIZE, format, value); 
-       return stream << txt; 
-    } 
-   
-    std::ostream& operator<<(std::ostream& stream, __int64 const n) 
-    { 
-       return FormatToStream(stream, "%I64d", n); 
-    } 
-   
-    std::ostream& operator<<(std::ostream& stream, unsigned __int64 const n) 
-    { 
-       return FormatToStream(stream, "%I64u", n); 
-    } 
-   
- #endif 
-   
- } 
-   
- #else 
-   
- #include <cstring> 
- #include <cstdio> 
-   
- #if _MSC_VER 
- #define snprintf _snprintf 
- #endif 
-   
- namespace UnitTest { 
-   
-    namespace { 
-   
-       template<typename ValueType> 
-       void FormatToStream(MemoryOutStream& stream, char const* format, ValueType const& value) 
-       { 
-          using namespace std; 
-   
-          const size_t BUFFER_SIZE=32; 
-          char txt[BUFFER_SIZE]; 
-          snprintf(txt, BUFFER_SIZE, format, value); 
-          stream << txt; 
-       } 
-   
-       int RoundUpToMultipleOfPow2Number (int n, int pow2Number) 
-       { 
-          return (n + (pow2Number - 1)) & ~(pow2Number - 1); 
-       } 
-   
-    } 
-   
-   
-    MemoryOutStream::MemoryOutStream(int const size) 
-       : m_capacity (0) 
-       , m_buffer (0) 
-   
-    { 
-       GrowBuffer(size); 
-    } 
-   
-    MemoryOutStream::~MemoryOutStream() 
-    { 
-       delete [] m_buffer; 
-    } 
-   
-    void MemoryOutStream::Clear() 
-    { 
-       m_buffer[0] = '\0'; 
-    } 
-   
-    char const* MemoryOutStream::GetText() const 
-    { 
-       return m_buffer; 
-    } 
-   
-    MemoryOutStream& MemoryOutStream::operator <<(char const* txt) 
-    { 
-       using namespace std; 
-   
-       int const bytesLeft = m_capacity - (int)strlen(m_buffer); 
-       int const bytesRequired = (int)strlen(txt) + 1; 
-   
-       if (bytesRequired > bytesLeft) 
-       { 
-          int const requiredCapacity = bytesRequired + m_capacity - bytesLeft; 
-          GrowBuffer(requiredCapacity); 
-       } 
-   
-       strcat(m_buffer, txt); 
-       return *this; 
-    } 
-   
-    MemoryOutStream& MemoryOutStream::operator <<(int const n) 
-    { 
-       FormatToStream(*this, "%i", n); 
-       return *this; 
-    } 
-   
-    MemoryOutStream& MemoryOutStream::operator <<(long const n) 
-    { 
-       FormatToStream(*this, "%li", n); 
-       return *this; 
-    } 
-   
-    MemoryOutStream& MemoryOutStream::operator <<(unsigned long const n) 
-    { 
-       FormatToStream(*this, "%lu", n); 
-       return *this; 
-    } 
-   
- #ifdef UNITTEST_COMPILER_IS_MSVC6 
-    MemoryOutStream& MemoryOutStream::operator <<(__int64 const n) 
- #else 
-    MemoryOutStream& MemoryOutStream::operator <<(long long const n) 
- #endif 
-    { 
- #ifdef UNITTEST_WIN32 
-       FormatToStream(*this, "%I64d", n); 
- #else 
-       FormatToStream(*this, "%lld", n); 
- #endif 
-   
-       return *this; 
-    } 
-   
- #ifdef UNITTEST_COMPILER_IS_MSVC6 
-    MemoryOutStream& MemoryOutStream::operator <<(unsigned __int64 const n) 
- #else 
-    MemoryOutStream& MemoryOutStream::operator <<(unsigned long long const n) 
- #endif 
-    { 
- #ifdef UNITTEST_WIN32 
-       FormatToStream(*this, "%I64u", n); 
- #else 
-       FormatToStream(*this, "%llu", n); 
- #endif 
-   
-       return *this; 
-    } 
-   
-    MemoryOutStream& MemoryOutStream::operator <<(float const f) 
-    { 
-       FormatToStream(*this, "%0.6f", f); 
-       return *this; 
-    } 
-   
-    MemoryOutStream& MemoryOutStream::operator <<(void const* p) 
-    { 
-       FormatToStream(*this, "%p", p); 
-       return *this; 
-    } 
-   
-    MemoryOutStream& MemoryOutStream::operator <<(unsigned int const s) 
-    { 
-       FormatToStream(*this, "%u", s); 
-       return *this; 
-    } 
-   
-    MemoryOutStream& MemoryOutStream::operator <<(double const d) 
-    { 
-       FormatToStream(*this, "%0.6f", d); 
-       return *this; 
-    } 
-   
-    int MemoryOutStream::GetCapacity() const 
-    { 
-       return m_capacity; 
-    } 
-   
-   
-    void MemoryOutStream::GrowBuffer(int const desiredCapacity) 
-    { 
-       int const newCapacity = RoundUpToMultipleOfPow2Number(desiredCapacity, GROW_CHUNK_SIZE); 
-   
-       using namespace std; 
-   
-       char* buffer = new char[newCapacity]; 
-       if (m_buffer) 
-          strcpy(buffer, m_buffer); 
-       else 
-          strcpy(buffer, ""); 
-   
-       delete [] m_buffer; 
-       m_buffer = buffer; 
-       m_capacity = newCapacity; 
-    } 
-   
- } 
-   
-   
- #endif 
-