77#include " nbl/core/declarations.h"
88#include " nbl/core/util/bitflag.h"
99
10- #include < variant>
11-
1210#include " nbl/system/ICancellableAsyncQueueDispatcher.h"
1311#include " nbl/system/IFileArchive.h"
1412
13+ #include < variant>
1514
1615namespace nbl ::system
1716{
@@ -26,31 +25,22 @@ class NBL_API2 ISystem : public core::IReferenceCounted
2625 protected:
2726 class ICaller ;
2827 private:
29- // add more request types if needed
30- enum E_REQUEST_TYPE
31- {
32- ERT_CREATE_FILE,
33- ERT_READ,
34- ERT_WRITE
35- };
36- template <E_REQUEST_TYPE RT>
37- struct SRequestParamsBase
28+ struct SRequestParams_NOOP
3829 {
39- static inline constexpr E_REQUEST_TYPE type = RT;
4030 };
41- struct SRequestParams_CREATE_FILE : SRequestParamsBase<ERT_CREATE_FILE>
31+ struct SRequestParams_CREATE_FILE
4232 {
4333 char filename[MAX_FILENAME_LENGTH] {};
4434 IFileBase::E_CREATE_FLAGS flags;
4535 };
46- struct SRequestParams_READ : SRequestParamsBase<ERT_READ>
36+ struct SRequestParams_READ
4737 {
4838 ISystemFile* file;
4939 void * buffer;
5040 size_t offset;
5141 size_t size;
5242 };
53- struct SRequestParams_WRITE : SRequestParamsBase<ERT_WRITE>
43+ struct SRequestParams_WRITE
5444 {
5545 ISystemFile* file;
5646 const void * buffer;
@@ -59,12 +49,12 @@ class NBL_API2 ISystem : public core::IReferenceCounted
5949 };
6050 struct SRequestType : impl::ICancellableAsyncQueueDispatcherBase::request_base_t
6151 {
62- E_REQUEST_TYPE type;
6352 std::variant<
53+ SRequestParams_NOOP,
6454 SRequestParams_CREATE_FILE,
6555 SRequestParams_READ,
6656 SRequestParams_WRITE
67- > params;
57+ > params = SRequestParams_NOOP() ;
6858 };
6959 static inline constexpr uint32_t CircularBufferSize = 256u ;
7060 class CAsyncQueue : public ICancellableAsyncQueueDispatcher <CAsyncQueue,SRequestType,CircularBufferSize>
@@ -78,7 +68,6 @@ class NBL_API2 ISystem : public core::IReferenceCounted
7868 template <typename FutureType, typename RequestParams>
7969 void request_impl (SRequestType& req, FutureType& future, RequestParams&& params)
8070 {
81- req.type = params.type ;
8271 req.params = std::move (params);
8372 base_t::associate_request_with_future (req, future);
8473 }
@@ -88,6 +77,10 @@ class NBL_API2 ISystem : public core::IReferenceCounted
8877 void init () {}
8978
9079 private:
80+ void handle_request (SRequestType& req, SRequestParams_NOOP& param);
81+ void handle_request (SRequestType& req, SRequestParams_CREATE_FILE& param);
82+ void handle_request (SRequestType& req, SRequestParams_READ& param);
83+ void handle_request (SRequestType& req, SRequestParams_WRITE& param);
9184 core::smart_refctd_ptr<ICaller> m_caller;
9285 };
9386 friend class ISystemFile ;
0 commit comments