std::uint32_t write(SyncWriteStreamT &s, const ConstBufferT &buffer, const CompleteConditionT &condition, const rw_callback_type &callback) { std::uint32_t transfers = 0; const std::uint32_t bufSize = buffer.size(); while( transfers < condition(transfers) ) { if( transfers >= bufSize ) break; std::uint32_t ret = s.write(buffer + transfers); if( ret == 0 ) { s.close(); } transfers += ret; if( callback != 0 ) callback(win32_error_2_error_code(::GetLastError()), transfers); } return transfers; }
std::uint32_t write(SyncWriteStreamT &s, const ConstBufferT &buffer, const std::uint64_t &offset, const CompleteConditionT &condition) { std::uint32_t transfers = 0; const std::uint32_t bufSize = buffer.size(); while( transfers <= condition(transfers) ) { if( transfers >= bufSize ) break; std::uint32_t ret = s.write(buffer + transfers, offset); if( ret == 0 ) { s.close(); } transfers += ret; } return transfers; }
std::uint32_t write(SyncWriteStreamT &s, const ConstBufferT &buffer, const CompleteConditionT &condition, const HandlerT &callback) { std::uint32_t transfers = 0; const std::uint32_t bufSize = buffer.size(); while( transfers < condition(transfers) ) { if( transfers >= bufSize ) break; auto ret = s.write(buffer + transfers); if( ret == 0 ) { throw service::win32_exception_t("s.write"); } transfers += (std::uint32_t)ret; callback(std::make_error_code((std::errc)::GetLastError()), transfers); } return transfers; }