7
7
#include " nbl/core/declarations.h"
8
8
#include " nbl/core/util/bitflag.h"
9
9
10
- #include < variant>
11
-
12
10
#include " nbl/system/ICancellableAsyncQueueDispatcher.h"
13
11
#include " nbl/system/IFileArchive.h"
14
12
13
+ #include < variant>
15
14
16
15
namespace nbl ::system
17
16
{
@@ -26,31 +25,22 @@ class NBL_API2 ISystem : public core::IReferenceCounted
26
25
protected:
27
26
class ICaller ;
28
27
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
38
29
{
39
- static inline constexpr E_REQUEST_TYPE type = RT;
40
30
};
41
- struct SRequestParams_CREATE_FILE : SRequestParamsBase<ERT_CREATE_FILE>
31
+ struct SRequestParams_CREATE_FILE
42
32
{
43
33
char filename[MAX_FILENAME_LENGTH] {};
44
34
IFileBase::E_CREATE_FLAGS flags;
45
35
};
46
- struct SRequestParams_READ : SRequestParamsBase<ERT_READ>
36
+ struct SRequestParams_READ
47
37
{
48
38
ISystemFile* file;
49
39
void * buffer;
50
40
size_t offset;
51
41
size_t size;
52
42
};
53
- struct SRequestParams_WRITE : SRequestParamsBase<ERT_WRITE>
43
+ struct SRequestParams_WRITE
54
44
{
55
45
ISystemFile* file;
56
46
const void * buffer;
@@ -59,12 +49,12 @@ class NBL_API2 ISystem : public core::IReferenceCounted
59
49
};
60
50
struct SRequestType : impl::ICancellableAsyncQueueDispatcherBase::request_base_t
61
51
{
62
- E_REQUEST_TYPE type;
63
52
std::variant<
53
+ SRequestParams_NOOP,
64
54
SRequestParams_CREATE_FILE,
65
55
SRequestParams_READ,
66
56
SRequestParams_WRITE
67
- > params;
57
+ > params = SRequestParams_NOOP() ;
68
58
};
69
59
static inline constexpr uint32_t CircularBufferSize = 256u ;
70
60
class CAsyncQueue : public ICancellableAsyncQueueDispatcher <CAsyncQueue,SRequestType,CircularBufferSize>
@@ -78,7 +68,6 @@ class NBL_API2 ISystem : public core::IReferenceCounted
78
68
template <typename FutureType, typename RequestParams>
79
69
void request_impl (SRequestType& req, FutureType& future, RequestParams&& params)
80
70
{
81
- req.type = params.type ;
82
71
req.params = std::move (params);
83
72
base_t::associate_request_with_future (req, future);
84
73
}
@@ -88,6 +77,10 @@ class NBL_API2 ISystem : public core::IReferenceCounted
88
77
void init () {}
89
78
90
79
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);
91
84
core::smart_refctd_ptr<ICaller> m_caller;
92
85
};
93
86
friend class ISystemFile ;
0 commit comments