IceShard 1
A personal game engine project, with development focused on 2D/2.5D games.
Loading...
Searching...
No Matches
mem_memory.hxx
Go to the documentation of this file.
1
3
4#pragma once
6#include <ice/mem_data.hxx>
8
9namespace ice
10{
11
18
19 constexpr auto data_view(ice::Memory memory) noexcept -> ice::Data;
20
21 template<typename T> requires(std::is_array_v<T> == false && std::is_pointer_v<T> == false)
22 constexpr auto memory_from(T& object) noexcept -> ice::Memory;
23
27 inline auto ptr_adv(ice::Memory mem, ice::meminfo meminfo) noexcept -> ice::Memory;
28
32 inline auto ptr_adv(ice::Memory mem, ice::usize offset, ice::ualign align) noexcept -> ice::Memory;
33
37 inline auto ptr_add(ice::Memory mem, ice::usize offset) noexcept -> ice::Memory;
38
39 inline auto ptr_adv(ice::Memory mem, ice::usize offset, ice::ualign alignment) noexcept -> ice::Memory
40 {
41 ice::AlignResult const aligned = ice::align_to(ice::ptr_add(mem.location, offset), alignment);
42 return {
43 .location = aligned.value,
44 .size = {mem.size.value - (offset + aligned.padding).value},
45 .alignment = aligned.alignment
46 };
47 }
48
49 inline auto ptr_adv(ice::Memory mem, ice::meminfo meminfo) noexcept -> ice::Memory
50 {
51 return ptr_adv(mem, meminfo.size, meminfo.alignment);
52 }
53
54 inline auto ptr_add(ice::Memory mem, ice::usize offset) noexcept -> ice::Memory
55 {
56 ICE_ASSERT_CORE(mem.size >= offset);
57 return Memory{
58 .location = ice::ptr_add(mem.location, offset),
59 .size = {mem.size.value - offset.value},
60 .alignment = mem.alignment
61 };
62 }
63
64 constexpr auto data_view(ice::Memory memory) noexcept -> ice::Data
65 {
66 return Data{
67 .location = memory.location,
68 .size = memory.size,
69 .alignment = memory.alignment
70 };
71 }
72
73 template<typename T> requires(std::is_array_v<T> == false && std::is_pointer_v<T> == false)
74 constexpr auto memory_from(T& object) noexcept -> ice::Memory
75 {
76 return Memory{
77 .location = ice::addressof(object),
78 .size = ice::size_of<T>,
79 .alignment = ice::align_of<T>
80 };
81 }
82
83} // namespace ice
#define ICE_ASSERT_CORE(expression)
Definition assert_core.hxx:43
SPDX-License-Identifier: MIT.
Definition array.hxx:12
auto ptr_adv(void *pointer, ice::usize offset, ice::ualign align) noexcept -> void *
constexpr ice::usize size_of
Definition mem_info.hxx:12
auto data_view(ice::Array< Type, Logic > const &arr) noexcept -> ice::Data=delete
constexpr ice::ualign align_of
Definition mem_info.hxx:15
auto ptr_add(void *pointer, ice::usize offset) noexcept -> void *
Definition mem_arithmetic.hxx:34
constexpr auto align_to(T value, ice::ualign alignment) noexcept -> ice::AlignResult< T >
Definition mem_align.hxx:41
constexpr auto memory_from(T &object) noexcept -> ice::Memory
Definition mem_memory.hxx:74
ualign
Definition mem_size_types.hxx:39
Definition mem_align.hxx:13
T padding
Definition mem_align.hxx:15
ice::ualign alignment
Definition mem_align.hxx:16
T value
Definition mem_align.hxx:14
Definition mem_data.hxx:17
Definition mem_memory.hxx:13
ice::ualign alignment
Definition mem_memory.hxx:16
ice::usize size
Definition mem_memory.hxx:15
void * location
Definition mem_memory.hxx:14
Definition mem_size_types.hxx:59
ice::ualign alignment
Definition mem_size_types.hxx:61
ice::usize size
Definition mem_size_types.hxx:60
Represents a unsigned size value on the given platform.
Definition mem_size_types.hxx:26