Skip to content

Commit 4273dfb

Browse files
rework parts of nbl::system to work with the New API
1 parent 4a11105 commit 4273dfb

File tree

7 files changed

+43
-29
lines changed

7 files changed

+43
-29
lines changed

include/nbl/asset/IAssetManager.h

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -652,15 +652,15 @@ class NBL_API2 IAssetManager : public core::IReferenceCounted, public core::Quit
652652
_override = &defOverride;
653653

654654
system::ISystem::future_t<core::smart_refctd_ptr<system::IFile>> future;
655-
m_system->createFile(future, (_params.workingDirectory.generic_string() + _filename).c_str(), system::IFile::ECF_WRITE);
656-
auto file = future.get();
657-
if (file) // could fail creating file (lack of permissions)
655+
m_system->createFile(future, (_params.workingDirectory.generic_string()+_filename).c_str(), system::IFile::ECF_WRITE);
656+
core::smart_refctd_ptr<system::IFile>* file;
657+
if (future.wait() && (file=future.acquire()))
658658
{
659-
bool res = writeAsset(file.get(), _params, _override);
659+
bool res = writeAsset(file->get(), _params, _override);
660+
future.release();
660661
return res;
661662
}
662-
else
663-
return false;
663+
return false;
664664
}
665665
bool writeAsset(system::IFile* _file, const IAssetWriter::SAssetWriteParams& _params, IAssetWriter::IAssetWriterOverride* _override)
666666
{

include/nbl/system/CFileLogger.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,9 +21,9 @@ class CFileLogger : public IThreadsafeLogger
2121
virtual void threadsafeLog_impl(const std::string_view& fmt, E_LOG_LEVEL logLevel, va_list args) override
2222
{
2323
const auto str = constructLogString(fmt, logLevel, args);
24-
ISystem::future_t<size_t> future;
25-
m_file->write(future,str.data(),m_pos,str.length());
26-
m_pos += future.get(); // need to use the future to make sure op is actually executed :(
24+
IFile::success_t succ;
25+
m_file->write(succ,str.data(),m_pos,str.length());
26+
m_pos += succ.getBytesProcessed();
2727
}
2828

2929
core::smart_refctd_ptr<IFile> m_file;

include/nbl/system/IAsyncQueueDispatcher.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ class IAsyncQueueDispatcherBase
2929
};
3030

3131
// in case you need it, which you won't
32-
inline const auto& getState() const {return state;}
32+
inline const atomic_state_t<STATE,STATE::INITIAL>& getState() const {return state;}
3333

3434
//! REQUESTING THREAD: lock when overwriting the request's data
3535
inline void start()

include/nbl/system/IFile.h

Lines changed: 23 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -20,11 +20,12 @@ class IFile : public IFileBase, private ISystem::IFutureManipulator
2020
if (offset+sizeToRead>size)
2121
sizeToRead = size-offset;
2222
memcpy(buffer,ptr+offset,sizeToRead);
23-
fake_notify(fut,sizeToRead);
23+
set_result(fut,sizeToRead);
2424
}
2525
else
2626
unmappedRead(fut,buffer,offset,sizeToRead);
2727
}
28+
//
2829
inline void write(ISystem::future_t<size_t>& fut, const void* buffer, size_t offset, size_t sizeToWrite)
2930
{
3031
auto* ptr = reinterpret_cast<std::byte*>(getMappedPointer());
@@ -34,31 +35,44 @@ class IFile : public IFileBase, private ISystem::IFutureManipulator
3435
if (offset+sizeToWrite>getSize())
3536
sizeToWrite = getSize()-offset;
3637
memcpy(ptr+offset,buffer,sizeToWrite);
37-
fake_notify(fut,sizeToWrite);
38+
set_result(fut,sizeToWrite);
3839
}
3940
else
4041
unmappedWrite(fut,buffer,offset,sizeToWrite);
4142
}
4243

43-
//
44+
//! Less verbose future handling
4445
struct success_t
4546
{
4647
public:
4748
success_t() = default;
4849
~success_t() = default;
4950

51+
inline size_t getBytesToProcess() const {return sizeToProcess;}
52+
53+
inline size_t getBytesProcessed(const bool block=true) const
54+
{
55+
if (block && !m_internalFuture.wait())
56+
return 0ull;
57+
return *m_internalFuture.get();
58+
}
59+
5060
inline explicit operator bool()
5161
{
52-
return m_internalFuture.get()==sizeToProcess;
62+
return getBytesProcessed()==getBytesToProcess();
5363
}
5464
inline bool operator!()
5565
{
56-
return m_internalFuture.get()!=sizeToProcess;
66+
return getBytesProcessed()!=getBytesToProcess();
5767
}
5868

59-
inline size_t getSizeToProcess() const {return sizeToProcess;}
60-
6169
private:
70+
// cannot move in memory or pointers go boom
71+
success_t(const success_t&) = delete;
72+
success_t(success_t&&) = delete;
73+
success_t& operator=(const success_t&) = delete;
74+
success_t& operator=(success_t&&) = delete;
75+
6276
friend IFile;
6377
ISystem::future_t<size_t> m_internalFuture;
6478
size_t sizeToProcess;
@@ -81,11 +95,11 @@ class IFile : public IFileBase, private ISystem::IFutureManipulator
8195
//
8296
virtual void unmappedRead(ISystem::future_t<size_t>& fut, void* buffer, size_t offset, size_t sizeToRead)
8397
{
84-
fake_notify(fut,0ull);
98+
set_result(fut,0ull);
8599
}
86100
virtual void unmappedWrite(ISystem::future_t<size_t>& fut, const void* buffer, size_t offset, size_t sizeToWrite)
87101
{
88-
fake_notify(fut,0ull);
102+
set_result(fut,0ull);
89103
}
90104
};
91105

include/nbl/system/ISystem.h

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -29,12 +29,15 @@ class NBL_API2 ISystem : public core::IReferenceCounted
2929
{
3030
private:
3131
friend class IFutureManipulator;
32+
33+
using base_t = impl::IAsyncQueueDispatcherBase::cancellable_future_t<T>;
34+
3235
template <typename... Args>
3336
inline void set_result(Args&&... args)
3437
{
35-
state.waitTransition(STATE::EXECUTING,STATE::INITIAL);
36-
construct(std::forward<Args>(args)...);
37-
notify();
38+
base_t::state.waitTransition(base_t::STATE::EXECUTING,base_t::STATE::INITIAL);
39+
base_t::construct(std::forward<Args>(args)...);
40+
base_t::notify();
3841
}
3942
};
4043
class IFutureManipulator

include/nbl/ui/CWindowManagerWin32.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -168,7 +168,7 @@ class CWindowManagerWin32 : public IWindowManager
168168
uint32_t minimized : 1 = 0;
169169
uint32_t maximized : 1 = 0;
170170
};
171-
struct SRequest : system::impl::IAsyncQueueDispatcherBase::request_base_t
171+
struct SRequest
172172
{
173173
E_REQUEST_TYPE type;
174174
union

src/nbl/asset/interchange/CPLYMeshWriter.h

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -73,12 +73,9 @@ class CPLYMeshWriter : public asset::IAssetWriter
7373
}
7474
auto str = ss.str();
7575

76-
system::ISystem::future_t<size_t> future;
77-
context.writeContext.outputFile->write(future, str.c_str(), context.fileOffset, str.size());
78-
{
79-
const auto bytesWritten = future.get();
80-
context.fileOffset += bytesWritten;
81-
}
76+
system::IFile::success_t succ;
77+
context.writeContext.outputFile->write(succ, str.c_str(), context.fileOffset, str.size());
78+
context.fileOffset += succ.getBytesProcessed();
8279
}
8380
};
8481

0 commit comments

Comments
 (0)