Support linking primitives
This commit is contained in:
@@ -16,7 +16,28 @@ namespace JabyEngine {
|
||||
constexpr Link(size_t size) : value(SizeRange.as_value(size >> 2) | TerminationValue) {
|
||||
}
|
||||
|
||||
//void add
|
||||
void set_adr(const void* adr) {
|
||||
this->value = bit::value::set_normalized(this->value, AdrRange.with(reinterpret_cast<uint32_t>(adr)));
|
||||
}
|
||||
|
||||
void* get_adr() const {
|
||||
return reinterpret_cast<void*>(bit::value::get_normalized(this->value, AdrRange));
|
||||
}
|
||||
|
||||
template<typename T>
|
||||
T& insert_after(T& obj) {
|
||||
const auto adr = Link::get_adr();
|
||||
|
||||
Link::set_adr(&obj);
|
||||
obj.set_adr(adr);
|
||||
return obj;
|
||||
}
|
||||
|
||||
template<typename T>
|
||||
const T& concat(const T& obj) {
|
||||
Link::set_adr(&obj);
|
||||
return obj;
|
||||
}
|
||||
|
||||
constexpr void terminate() {
|
||||
this->value |= TerminationValue;
|
||||
@@ -45,6 +66,8 @@ namespace JabyEngine {
|
||||
namespace internal {
|
||||
template<typename T>
|
||||
struct LinkedElementCreator {
|
||||
typedef LinkedElement<T> Linked;
|
||||
|
||||
constexpr LinkedElement<T> linked() {
|
||||
return LinkedElement<T>(*static_cast<T*>(this));
|
||||
}
|
||||
|
Reference in New Issue
Block a user