NexusForce 1.0.0
A rigorously engineered full-stack C++ backend library.
载入中...
搜索中...
未找到
file_async.hpp
浏览该文件的文档.
1#ifndef NEFORCE_CORE_FILE_FILE_ASYNC_HPP__
2#define NEFORCE_CORE_FILE_FILE_ASYNC_HPP__
3
11
17NEFORCE_BEGIN_NAMESPACE__
18
24
34class NEFORCE_API file_async {
35public:
36#ifdef NEFORCE_PLATFORM_WINDOWS
37 using size_type = ::DWORD;
38 using difference_type = ::LONGLONG;
39#else
40 using size_type = size_t;
41 using difference_type = ::off_t;
42#endif
44
45private:
46 native_handle_type handle_;
47 io_context* ctx_{nullptr};
48#ifdef NEFORCE_USING_IO_URING
49 struct uring;
50 unique_ptr<uring> uring_;
51#endif
52 function<void(error_code, size_type)> pending_handler_;
53
54 void ensure_iocp(io_context& ctx);
55
56 void do_async_read(io_context& ctx, string& buffer, size_type size, difference_type offset, cancellation_slot* slot,
57 function<void(error_code, size_type)> handler);
58
59 void do_async_write(io_context& ctx, string data, size_type size, difference_type offset, cancellation_slot* slot,
60 function<void(error_code, size_type)> handler);
61
62public:
68
73
74 file_async(const file_async&) = delete;
75 file_async& operator=(const file_async&) = delete;
76
81 file_async(file_async&& other) noexcept;
82
88 file_async& operator=(file_async&& other) noexcept;
89
97 void async_read(io_context& ctx, string& buffer, size_type size, function<void(error_code, size_type)> handler) {
98 do_async_read(ctx, buffer, size, -1, nullptr, move(handler));
99 }
100
109 void async_read(io_context& ctx, string& buffer, size_type size, difference_type offset,
110 function<void(error_code, size_type)> handler) {
111 do_async_read(ctx, buffer, size, offset, nullptr, move(handler));
112 }
113
122 void async_read(io_context& ctx, string& buffer, size_type size, cancellation_slot& slot,
123 function<void(error_code, size_type)> handler) {
124 do_async_read(ctx, buffer, size, -1, &slot, move(handler));
125 }
126
136 void async_write(io_context& ctx, string data, size_type size, function<void(error_code, size_type)> handler) {
137 do_async_write(ctx, move(data), size, -1, nullptr, move(handler));
138 }
139
149 function<void(error_code, size_type)> handler) {
150 do_async_write(ctx, move(data), size, offset, nullptr, move(handler));
151 }
152
162 function<void(error_code, size_type)> handler) {
163 do_async_write(ctx, move(data), size, -1, &slot, move(handler));
164 }
165
170 NEFORCE_NODISCARD native_handle_type native_handle() const noexcept { return handle_; }
171};
172 // File
174
175NEFORCE_END_NAMESPACE__
176#endif // NEFORCE_CORE_FILE_FILE_ASYNC_HPP__
异步操作取消槽
::LONGLONG difference_type
偏移量类型
::DWORD size_type
大小类型
_NEFORCE native_handle_type native_handle_type
原生文件句柄类型
void async_write(io_context &ctx, string data, size_type size, cancellation_slot &slot, function< void(error_code, size_type)> handler)
带取消槽异步写入数据
void async_read(io_context &ctx, string &buffer, size_type size, function< void(error_code, size_type)> handler)
异步读取数据
file_async & operator=(file_async &&other) noexcept
移动赋值运算符
file_async(native_handle_type handle)
构造函数
~file_async()
析构函数
void async_read(io_context &ctx, string &buffer, size_type size, cancellation_slot &slot, function< void(error_code, size_type)> handler)
带取消槽异步读取数据
void async_write(io_context &ctx, string data, size_type size, function< void(error_code, size_type)> handler)
异步写入数据
native_handle_type native_handle() const noexcept
获取原生文件句柄
file_async(file_async &&other) noexcept
移动构造函数
void async_write(io_context &ctx, string data, size_type size, difference_type offset, function< void(error_code, size_type)> handler)
指定偏移量异步写入数据
void async_read(io_context &ctx, string &buffer, size_type size, difference_type offset, function< void(error_code, size_type)> handler)
指定偏移量异步读取数据
函数包装器主模板声明
统一异步操作核心
独占智能指针
文件操作常量定义
uint64_t size_t
无符号大小类型
constexpr Iterator2 move(Iterator1 first, Iterator1 last, Iterator2 result) noexcept(noexcept(inner::__move_aux(first, last, result)))
移动范围元素
constexpr decltype(auto) size(const Container &cont) noexcept(noexcept(cont.size()))
获取容器的大小
constexpr decltype(auto) data(Container &cont) noexcept(noexcept(cont.data()))
获取容器的底层数据指针
统一异步操作核心
字符串类型别名和实用函数