1 //===- raw_mem_ostream.h --------------------------------------------------===// 2 // 3 // The MCLinker Project 4 // 5 // This file is distributed under the University of Illinois Open Source 6 // License. See LICENSE.TXT for details. 7 // 8 //===----------------------------------------------------------------------===// 9 #ifndef MCLD_RAW_MEMORY_AREA_OSTREAM_H 10 #define MCLD_RAW_MEMORY_AREA_OSTREAM_H 11 #ifdef ENABLE_UNITTEST 12 #include <gtest.h> 13 #endif 14 #include <string> 15 16 #include <llvm/Support/raw_ostream.h> 17 18 namespace mcld { 19 20 class MemoryArea; 21 22 class raw_mem_ostream : public llvm::raw_ostream 23 { 24 public: 25 /// constructor - pMemoryArea must be writable. 26 explicit raw_mem_ostream(MemoryArea &pMemoryArea); 27 28 ~raw_mem_ostream(); 29 30 MemoryArea& getMemoryArea() { 31 flush(); 32 return m_MemoryArea; 33 } 34 35 private: 36 /// write_impl - See raw_ostream::write_impl. 37 virtual void write_impl(const char *pPtr, size_t pSize); 38 39 /// current_pos - Return the current position within the stream, not 40 /// counting the bytes currently in the buffer. 41 virtual uint64_t current_pos() const; 42 43 private: 44 MemoryArea& m_MemoryArea; 45 uint64_t m_Position; 46 }; 47 48 } // namespace of mcld 49 50 #endif 51 52