Demonstrats use of aio readers/writersAccepts to filenames. Copies contents of first file into second file, calculatung file hash in the process.
#include <atomic>
{
public:
, logger_(logger)
, reader_factory_(in_factory)
, writer_factory_(out_factory)
{
if (!buffer_pool_) {
return;
}
reader_ = reader_factory_->open(buffer_pool_);
if (!reader_) {
return;
}
written_ += written;
};
writer_ = writer_factory_->open(buffer_pool_, 0, cb);
if (!writer_) {
return;
}
}
virtual ~worker() {
if (success_) {
logger_.log(fz::logmsg::status, "File copied successfully, wrote %d bytes", written_.load());
logger_.log(fz::logmsg::status, "Hash of data copied is %s", fz::hex_encode<std::string>(hash_.digest()));
}
else {
}
}
{
for (size_t i = 0; i < 10; ++i) {
auto [res, b] = reader_->get_buffer(*this);
event_loop_.stop();
return;
}
return;
}
if (!b) {
auto res = writer_->finalize(*this);
return;
}
event_loop_.stop();
return;
}
success_ = true;
event_loop_.stop();
return;
}
hash_.update(b->get(), b->size());
done_ += b->size();
res = writer_->add_buffer(std::move(b), *this);
return;
}
event_loop_.stop();
return;
}
}
send_event<fz::aio_buffer_event>(nullptr);
}
uint64_t done_{};
std::unique_ptr<fz::reader_base> reader_;
std::unique_ptr<fz::writer_base> writer_;
std::atomic<uint64_t> written_{};
bool success_{};
};
int main(int argc, char* argv[])
{
if (argc != 3) {
return 1;
}
auto in = std::make_unique<fz::file_reader_factory>(
fz::to_wstring(argv[1]), pool);
auto out = std::make_unique<fz::file_writer_factory>(
fz::to_wstring(argv[2]), pool);
worker w(logger, loop, std::move(in), std::move(out));
loop.run();
return 0;
}