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,35 +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
38- {
39- static inline constexpr E_REQUEST_TYPE type = RT;
40- };
41-
42- struct SRequestParams_EMPTY
28+ struct SRequestParams_NOOP
4329 {
4430 };
45- struct SRequestParams_CREATE_FILE : SRequestParamsBase<ERT_CREATE_FILE>
31+ struct SRequestParams_CREATE_FILE
4632 {
4733 char filename[MAX_FILENAME_LENGTH] {};
4834 IFileBase::E_CREATE_FLAGS flags;
4935 };
50- struct SRequestParams_READ : SRequestParamsBase<ERT_READ>
36+ struct SRequestParams_READ
5137 {
5238 ISystemFile* file;
5339 void * buffer;
5440 size_t offset;
5541 size_t size;
5642 };
57- struct SRequestParams_WRITE : SRequestParamsBase<ERT_WRITE>
43+ struct SRequestParams_WRITE
5844 {
5945 ISystemFile* file;
6046 const void * buffer;
@@ -63,13 +49,12 @@ class NBL_API2 ISystem : public core::IReferenceCounted
6349 };
6450 struct SRequestType : impl::ICancellableAsyncQueueDispatcherBase::request_base_t
6551 {
66- E_REQUEST_TYPE type;
6752 std::variant<
68- SRequestParams_EMPTY ,
53+ SRequestParams_NOOP ,
6954 SRequestParams_CREATE_FILE,
7055 SRequestParams_READ,
7156 SRequestParams_WRITE
72- > params = SRequestParams_EMPTY ();
57+ > params = SRequestParams_NOOP ();
7358 };
7459 static inline constexpr uint32_t CircularBufferSize = 256u ;
7560 class CAsyncQueue : public ICancellableAsyncQueueDispatcher <CAsyncQueue,SRequestType,CircularBufferSize>
@@ -83,7 +68,6 @@ class NBL_API2 ISystem : public core::IReferenceCounted
8368 template <typename FutureType, typename RequestParams>
8469 void request_impl (SRequestType& req, FutureType& future, RequestParams&& params)
8570 {
86- req.type = params.type ;
8771 req.params = std::move (params);
8872 base_t::associate_request_with_future (req, future);
8973 }
@@ -93,6 +77,10 @@ class NBL_API2 ISystem : public core::IReferenceCounted
9377 void init () {}
9478
9579 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);
9684 core::smart_refctd_ptr<ICaller> m_caller;
9785 };
9886 friend class ISystemFile ;
0 commit comments