iutest  1.17.1.0
iutest_stream.hpp
[詳解]
1 //======================================================================
2 //-----------------------------------------------------------------------
13 //-----------------------------------------------------------------------
14 //======================================================================
15 #ifndef INCG_IRIS_IUTEST_STREAM_HPP_3A4AF139_9F24_4730_81D0_DADFCE6DCF99_
16 #define INCG_IRIS_IUTEST_STREAM_HPP_3A4AF139_9F24_4730_81D0_DADFCE6DCF99_
17 
18 #include "iutest_string.hpp"
19 
20 namespace iutest {
21 namespace detail
22 {
23 
24 //======================================================================
25 // class
29 class IOutStream
30 {
31 public:
32  virtual ~IOutStream() {}
33 public:
35  virtual bool Write(const void* buf, size_t size, size_t cnt) = 0;
36 public:
37  virtual int Printf(const char* fmt, ...) IUTEST_ATTRIBUTE_FORMAT_PRINTF(2, 3)
38  {
39  va_list va;
40  va_start(va, fmt);
41  const ::std::string str = StringFormat(fmt, va);
42  va_end(va);
43  const size_t len = str.length();
44  Write(str.c_str(), len, 1);
45  return static_cast<int>(len);
46  }
47 };
48 
52 class IInStream
53 {
54 public:
55  virtual ~IInStream() {}
56 public:
58  virtual bool Read(void* buf, size_t size, size_t cnt) = 0;
59 
61  virtual size_t GetSize() = 0;
62 
63 public:
65  virtual ::std::string ReadAll()
66  {
67  ::std::string str;
68  const size_t size = GetSize();
69  if( size != 0 )
70  {
71  char* buf = new char[size+1];
72  buf[size] = '\0';
73  if( Read(buf, size, 1) )
74  {
75  str = buf;
76  }
77  delete [] buf;
78  }
79  return str;
80  }
81 };
82 
86 class FileOutStream : public IOutStream
87 {
88 protected:
89  FILE* m_fp;
90 public:
91  explicit FileOutStream(FILE* fp) IUTEST_CXX_NOEXCEPT_SPEC
92  : m_fp(fp)
93  {}
94 public:
101  virtual bool Write(const void* buf, size_t size, size_t cnt) IUTEST_CXX_OVERRIDE
102  {
103  if( fwrite(buf, size, cnt, m_fp) < cnt )
104  {
105  return false;
106  }
107  return true;
108  }
109 };
110 
111 } // end of namespace detail
112 } // end of namespace iutest
113 
114 #endif // INCG_IRIS_IUTEST_STREAM_HPP_3A4AF139_9F24_4730_81D0_DADFCE6DCF99_
iutest_config.hpp
iris unit test config
IUTEST_CXX_NOEXCEPT_SPEC
#define IUTEST_CXX_NOEXCEPT_SPEC
noexcept specification definition
Definition: iutest_compiler.hpp:734
iutest
iutest root namespace
Definition: iutest_charcode.hpp:31
iutest_string.hpp
iris unit test string utilities
IUTEST_CXX_OVERRIDE
#define IUTEST_CXX_OVERRIDE
override definition
Definition: iutest_compiler.hpp:670