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);
virtual ~FileStream()
Definition: Stream.h:165
FileStream(std::string const &path, bool doWrite=false)
Definition: Stream.h:150
std::string getPath() const
Get the path to the file, as a string.
Definition: Stream.h:168
Stream()
Definition: Stream.h:61
Stream & operator=(Stream &&)=default
bool getIsFits() const
get isfits
Definition: Stream.h:125
bool _isFits
is this a FITS stream?
Definition: Stream.h:136
Stream(Stream const &)=default
bool hasStdStream()
Definition: Stream.h:73
std::string _sourceStr
Definition: Stream.h:135
Stream(std::istream *istreamPtr, std::ostream *ostreamPtr)
Definition: Stream.h:51
bool sink(char const *cstr)
Definition: Stream.h:110
char const * source()
Definition: Stream.h:84
std::shared_ptr< std::ostream > _ostreamPtr
Definition: Stream.h:132
std::shared_ptr< std::istream > _istreamPtr
input stream
Definition: Stream.h:131
Stream(Stream &&)=default
virtual ~Stream()
Definition: Stream.h:63
Stream & operator=(Stream const &)=default
void setIsFits(bool isFits)
set isFits
Definition: Stream.h:129
std::string getSourceData() const
Get a copy of the text from the sink/output stream, without changing the stream.
Definition: Stream.h:197
StringStream(std::string const &data="")
Definition: Stream.h:187
void sinkToSource()
Move output/sink data to input/source.
Definition: Stream.h:203
std::string getSinkData() const
Get a copy of the text from the sink/output stream, without changing the stream.
Definition: Stream.h:200
virtual ~StringStream()
Definition: Stream.h:194
void sink(const char *cstr)
Definition: Stream.h:239
const char * source()
Definition: Stream.h:224
AST wrapper classes and functions.
Definition: attributes_channel.dox:1