22 #ifndef ASTSHIM_SOURCESINK_H
23 #define ASTSHIM_SOURCESINK_H
30 #include "astshim/base.h"
31 #include "astshim/detail/utils.h"
32 #include "astshim/Object.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());
65 Stream(Stream
const &) =
default;
66 Stream(Stream &&) =
default;
67 Stream &operator=(Stream
const &) =
default;
68 Stream &operator=(Stream &&) =
default;
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());
167 std::string getPath()
const {
return _path; }
186 explicit StringStream(std::string
const &data =
"") :
Stream(), _istringstreamPtr(), _ostringstreamPtr() {
187 _istringstreamPtr = std::make_shared<std::istringstream>(data);
188 _ostringstreamPtr = std::make_shared<std::ostringstream>();
199 std::string
getSinkData()
const {
return _ostringstreamPtr->str(); }
203 _istringstreamPtr->clear();
205 _ostringstreamPtr->str(
"");
210 std::shared_ptr<std::istringstream> _istringstreamPtr;
212 std::shared_ptr<std::ostringstream> _ostringstreamPtr;
223 inline const char *source() {
224 auto ssptr =
reinterpret_cast<Stream *
>(astChannelData);
226 return ssptr->source();
238 inline void sink(
const char *cstr) {
239 auto ssptr =
reinterpret_cast<Stream *
>(astChannelData);
241 auto isok = ssptr->sink(cstr);
243 astSetStatus(AST__ATGER);
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
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:196
StringStream(std::string const &data="")
Definition: Stream.h:186
bool _isFits
is this a FITS stream?
Definition: Stream.h:136
std::string getSinkData() const
Get a copy of the text from the sink/output stream, without changing the stream.
Definition: Stream.h:199
bool hasStdStream()
Definition: Stream.h:73
FileStream(std::string const &path, bool doWrite=false)
Definition: Stream.h:150
std::shared_ptr< std::istream > _istreamPtr
input stream
Definition: Stream.h:131
std::shared_ptr< std::ostream > _ostreamPtr
Definition: Stream.h:132
char const * source()
Definition: Stream.h:84
bool getIsFits() const
get isfits
Definition: Stream.h:125
void sinkToSource()
Move output/sink data to input/source.
Definition: Stream.h:202