本文整理汇总了C++中Disk::fs方法的典型用法代码示例。如果您正苦于以下问题:C++ Disk::fs方法的具体用法?C++ Disk::fs怎么用?C++ Disk::fs使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Disk
的用法示例。
在下文中一共展示了Disk::fs方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: disk_transfer
void Async::disk_transfer(
Disk disk,
const Dirent& ent,
on_write_func write_func,
on_after_func callback,
const size_t CHUNK_SIZE)
{
typedef delegate<void(size_t)> next_func_t;
auto next = std::make_shared<next_func_t> ();
auto weak_next = std::weak_ptr<next_func_t>(next);
*next = next_func_t::make_packed(
[weak_next, disk, ent, write_func, callback, CHUNK_SIZE] (size_t pos) {
// number of write calls necessary
const size_t writes = roundup(ent.size(), CHUNK_SIZE);
// done condition
if (pos >= writes) {
callback(fs::no_error, true);
return;
}
auto next = weak_next.lock();
// read chunk from file
disk->fs().read(
ent,
pos * CHUNK_SIZE,
CHUNK_SIZE,
fs::on_read_func::make_packed(
[next, pos, write_func, callback] (
fs::error_t err,
fs::buffer_t buffer)
{
debug("<Async> len=%lu\n", buffer->size());
if (err) {
printf("%s\n", err.to_string().c_str());
callback(err, false);
return;
}
// call write callback with data
write_func(
buffer,
next_func::make_packed(
[next, pos, callback] (bool good)
{
// if the write succeeded, call next
if (LIKELY(good))
(*next)(pos+1);
else
// otherwise, fail
callback({fs::error_t::E_IO, "Write failed"}, false);
})
);
})
);
});
// start async loop
(*next)(0);
}