00001 #ifndef UNITTEST_MEMORYOUTSTREAM_H
00002 #define UNITTEST_MEMORYOUTSTREAM_H
00003 
00004 #include "Config.h"
00005 
00006 #ifndef UNITTEST_USE_CUSTOM_STREAMS
00007 
00008 #include <sstream>
00009 
00010 namespace UnitTest
00011 {
00012 
00013 class MemoryOutStream : public std::ostringstream
00014 {
00015 public:
00016     MemoryOutStream() {}
00017     ~MemoryOutStream() {}
00018     char const* GetText() const;
00019 
00020 private:
00021     MemoryOutStream(MemoryOutStream const&);
00022     void operator =(MemoryOutStream const&);
00023 
00024     mutable std::string m_text;
00025 };
00026 
00027 }
00028 
00029 #else
00030 
00031 #include <cstddef>
00032 
00033 namespace UnitTest
00034 {
00035 
00036 class MemoryOutStream
00037 {
00038 public:
00039     explicit MemoryOutStream(int const size = 256);
00040     ~MemoryOutStream();
00041 
00042     char const* GetText() const;
00043 
00044     MemoryOutStream& operator << (char const* txt);
00045     MemoryOutStream& operator << (int n);
00046     MemoryOutStream& operator << (long n);
00047     MemoryOutStream& operator << (unsigned long n);
00048     MemoryOutStream& operator << (float f);
00049     MemoryOutStream& operator << (double d);
00050     MemoryOutStream& operator << (void const* p);
00051     MemoryOutStream& operator << (unsigned int s);
00052 
00053     enum { GROW_CHUNK_SIZE = 32 };
00054     int GetCapacity() const;
00055 
00056 private:
00057     void operator= (MemoryOutStream const&);
00058     void GrowBuffer(int capacity);
00059 
00060     int m_capacity;
00061     char* m_buffer;
00062 };
00063 
00064 }
00065 
00066 #endif
00067 
00068 #endif