22 #ifndef ASTSHIM_SOURCESINK_H
23 #define ASTSHIM_SOURCESINK_H
51 explicit Stream(std::istream *istreamPtr, std::ostream *ostreamPtr)
54 _istreamPtr = std::make_shared<std::istream>(istreamPtr->rdbuf());
57 _ostreamPtr = std::make_shared<std::ostream>(ostreamPtr->rdbuf());
112 (*_ostreamPtr) << cstr;
114 (*_ostreamPtr) << std::endl;
116 return static_cast<bool>(*_ostreamPtr);
150 explicit FileStream(std::string
const &path,
bool doWrite =
false) :
Stream(), _path(path) {
151 auto mode = doWrite ? std::ios_base::out : std::ios_base::in;
152 auto fstreamPtr = std::make_shared<std::fstream>(path, mode);
154 std::ostringstream os;
155 os <<
"Failed to open file \"" << path <<
"\" for " << (doWrite ?
"writing" :
"reading");
156 throw std::runtime_error(os.str());
187 explicit StringStream(std::string
const &data =
"") :
Stream(), _istringstreamPtr(), _ostringstreamPtr() {
188 _istringstreamPtr = std::make_shared<std::istringstream>(data);
189 _ostringstreamPtr = std::make_shared<std::ostringstream>();
200 std::string
getSinkData()
const {
return _ostringstreamPtr->str(); }
204 _istringstreamPtr->clear();
206 _ostringstreamPtr->str(
"");
211 std::shared_ptr<std::istringstream> _istringstreamPtr;
213 std::shared_ptr<std::ostringstream> _ostringstreamPtr;
225 auto ssptr =
reinterpret_cast<Stream *
>(astChannelData);
239 inline void sink(
const char *cstr) {
240 auto ssptr =
reinterpret_cast<Stream *
>(astChannelData);
242 auto isok = ssptr->
sink(cstr);
244 astSetStatus(AST__ATGER);