mirror of
https://git.intern.spaceteamaachen.de/ALPAKA/rtos2-utils.git
synced 2025-08-06 11:07:34 +00:00
Add handle wrapper class
This commit is contained in:
46
include/sta/rtos/handle.tpp
Normal file
46
include/sta/rtos/handle.tpp
Normal file
@@ -0,0 +1,46 @@
|
||||
#ifndef STA_RTOS_HANDLE_TPP
|
||||
#define STA_RTOS_HANDLE_TPP
|
||||
|
||||
#ifndef STA_RTOS_HANDLE_HPP
|
||||
# error "Internal header. Use <sta/rtos/handle.hpp> instead."
|
||||
#endif // !STA_RTOS_HANDLE_HPP
|
||||
|
||||
#include <sta/assert.hpp>
|
||||
|
||||
|
||||
namespace sta
|
||||
{
|
||||
template <typename T>
|
||||
RtosHandle<T>::Deferred::Deferred(handle_type * handlePointer)
|
||||
: pointer{handlePointer}
|
||||
{}
|
||||
|
||||
|
||||
template <typename T>
|
||||
RtosHandle<T>::RtosHandle(handle_type handle)
|
||||
: handle_{handle}, deferred_{false}
|
||||
{}
|
||||
|
||||
template <typename T>
|
||||
RtosHandle<T>::RtosHandle(Deferred handle)
|
||||
: handle_{handle.pointer}, deferred_{true}
|
||||
{
|
||||
STA_ASSERT(handle.pointer != nullptr);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
typename RtosHandle<T>::handle_type RtosHandle<T>::get()
|
||||
{
|
||||
if (deferred_)
|
||||
{
|
||||
// Dereference void ** in handle
|
||||
handle_ = *reinterpret_cast<handle_type *>(handle_);
|
||||
deferred_ = false;
|
||||
}
|
||||
|
||||
return handle_;
|
||||
}
|
||||
} // namespace sta
|
||||
|
||||
|
||||
#endif // STA_RTOS_HANDLE_TPP
|
Reference in New Issue
Block a user