allow any_t buffered (threads!!)
parent
16641a27cb
commit
2dd44ca6e7
|
@ -1,7 +1,7 @@
|
||||||
cmake_minimum_required(VERSION 3.5)
|
cmake_minimum_required(VERSION 3.5)
|
||||||
include(cmake/color.cmake)
|
include(cmake/color.cmake)
|
||||||
|
|
||||||
set(BLT_VERSION 0.15.2)
|
set(BLT_VERSION 0.15.3)
|
||||||
set(BLT_TEST_VERSION 0.0.1)
|
set(BLT_TEST_VERSION 0.0.1)
|
||||||
|
|
||||||
set(BLT_TARGET BLT)
|
set(BLT_TARGET BLT)
|
||||||
|
|
|
@ -17,6 +17,7 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <cstring>
|
#include <cstring>
|
||||||
|
|
||||||
#ifndef BLT_ANY_H
|
#ifndef BLT_ANY_H
|
||||||
#define BLT_ANY_H
|
#define BLT_ANY_H
|
||||||
|
|
||||||
|
@ -158,6 +159,32 @@ namespace blt::unsafe
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
class buffer_any_t
|
||||||
|
{
|
||||||
|
private:
|
||||||
|
blt::u8* _data;
|
||||||
|
public:
|
||||||
|
explicit buffer_any_t(blt::u8* data): _data(data)
|
||||||
|
{}
|
||||||
|
|
||||||
|
template<typename T>
|
||||||
|
buffer_any_t& set(const T& t)
|
||||||
|
{
|
||||||
|
static_assert(std::is_trivially_copyable_v<T> && "Type must be trivially copyable");
|
||||||
|
std::memcpy(_data, &t, sizeof(t));
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
template<typename T>
|
||||||
|
T any_cast()
|
||||||
|
{
|
||||||
|
static_assert(std::is_trivially_copyable_v<T> && "Type must be trivially copyable");
|
||||||
|
T t;
|
||||||
|
std::memcpy(&t, _data, sizeof(T));
|
||||||
|
return t;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
template<blt::size_t SIZE>
|
template<blt::size_t SIZE>
|
||||||
class any_t_base
|
class any_t_base
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue