1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556 |
- #include "null.h"
- #include "multi.h"
- TMultiInput::TMultiInput(IInputStream* f, IInputStream* s) noexcept
- : C_(f)
- , N_(s)
- {
- }
- TMultiInput::~TMultiInput() = default;
- size_t TMultiInput::DoRead(void* buf, size_t len) {
- const size_t ret = C_->Read(buf, len);
- if (ret) {
- return ret;
- }
- C_ = N_;
- N_ = &Cnull;
- return C_->Read(buf, len);
- }
- size_t TMultiInput::DoReadTo(TString& st, char ch) {
- size_t ret = C_->ReadTo(st, ch);
- if (ret == st.size() + 1) { // found a symbol, not eof
- return ret;
- }
- C_ = N_;
- N_ = &Cnull;
- if (ret == 0) {
- ret += C_->ReadTo(st, ch);
- } else {
- TString tmp;
- ret += C_->ReadTo(tmp, ch);
- st += tmp;
- }
- return ret;
- }
- size_t TMultiInput::DoSkip(size_t len) {
- const size_t ret = C_->Skip(len);
- if (ret) {
- return ret;
- }
- C_ = N_;
- N_ = &Cnull;
- return C_->Skip(len);
- }
|