virtual source_result read_next(size_t amount = 0) { sassert(pull); auto s = drive(); if (s == source_result::ok) { auto bucket = std::move(cur_out); prepare_out(); return source_result(std::move(bucket)); } return source_result(s); }
virtual source_result read_next(size_t amount = 0) { if (!f) return std::unique_ptr<bucket_data_mem>(); unique_ptr<bucket_data_mem> r(bucket_data_mem::create(4096)); auto read_bytes = std::fread(r->begin(), 1, 4096, f); if(read_bytes == 0) return source_result(source_result::eos); r->size_ = read_bytes; return source_result(std::move(r)); }