mirror of
https://github.com/AxioDL/kabufuda.git
synced 2025-12-08 13:14:57 +00:00
Implement Win32 AsyncIO
This commit is contained in:
@@ -6,7 +6,7 @@
|
||||
using SizeReturn = ssize_t;
|
||||
#else
|
||||
#include <windows.h>
|
||||
using SizeReturn = SSIZE_T;
|
||||
using SizeReturn = DWORD;
|
||||
#endif
|
||||
|
||||
#include "Util.hpp"
|
||||
@@ -21,7 +21,10 @@ class AsyncIO
|
||||
int m_fd = -1;
|
||||
std::vector<std::pair<struct aiocb, SizeReturn>> m_queue;
|
||||
#else
|
||||
HANDLE m_fh = INVALID_HANDLE_VALUE;
|
||||
std::vector<std::pair<OVERLAPPED, SizeReturn>> m_queue;
|
||||
#endif
|
||||
void _waitForOperation(size_t qIdx) const;
|
||||
size_t m_maxBlock = 0;
|
||||
public:
|
||||
AsyncIO() = default;
|
||||
@@ -32,14 +35,16 @@ public:
|
||||
AsyncIO(const AsyncIO* other) = delete;
|
||||
AsyncIO& operator=(const AsyncIO& other) = delete;
|
||||
void resizeQueue(size_t queueSz) { m_queue.resize(queueSz); }
|
||||
SizeReturn syncRead(void* buf, size_t length, off_t offset);
|
||||
bool asyncRead(size_t qIdx, void* buf, size_t length, off_t offset);
|
||||
SizeReturn syncWrite(const void* buf, size_t length, off_t offset);
|
||||
bool asyncWrite(size_t qIdx, const void* buf, size_t length, off_t offset);
|
||||
ECardResult pollStatus(size_t qIdx, SizeReturn* szRet = nullptr) const;
|
||||
ECardResult pollStatus() const;
|
||||
void waitForCompletion() const;
|
||||
#ifndef _WIN32
|
||||
operator bool() const { return m_fd != -1; }
|
||||
#else
|
||||
operator bool() const { return m_fh != INVALID_HANDLE_VALUE; }
|
||||
#endif
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user