29 template <
typename First,
typename Second>
30 using Pair = std::pair<First, Second>;
35 template<
typename ...Args>
41 template<
typename T,
size_t Size>
42 using Array = std::array<T, Size>;
59 class Span :
public std::span<T> {
61 using std::span<
T>::span;
66 template<
typename U>
requires
67 (
sizeof(std::remove_reference<T>) ==
sizeof(std::remove_reference<U>) &&
68 std::is_convertible_v<U*, T*>)
69 Span(
U* data,
size_t size) : std::span<T>(
static_cast<T*
>(data), size) {}
78 template<
typename U,
size_t Size>
85 requires requires (
U a) {
a.data();
a.size(); }
92 template<
typename U>
requires std::is_convertible_v<U*, T*>
109 template <
typename T,
typename ...Args>
111 T* data =
static_cast<T*
>(resource->
Allocate(size *
sizeof(
T),
alignof(
T)));
112 if constexpr (!std::is_trivially_constructible_v<T> ||
sizeof...(Args) > 0)
114 for (
size_t i = 0;
i < size;
i++)
115 std::construct_at(&data[
i], std::forward<Args>(
args)...);
125 if constexpr (!std::is_trivially_destructible_v<T>)
128 std::destroy_at(&
item);
130 resource->
Deallocate(span.data(), span.size() *
sizeof(
T));
159 using Vector = std::vector<T, StlAllocator<T>>;
168 template<
typename T,
typename Predicate = std::less<T>>
169 using Set = std::set<T, Predicate, StlAllocator<T>>;
177 template<
typename K,
typename V,
typename Predicate = std::less<K>>
178 using Map = std::map<K, V, Predicate, StlAllocator<Pair<const K, V>>>;
187 using Deque = std::deque<T, StlAllocator<T>>;
196 using List = std::list<T, StlAllocator<T>>;
204 template<
typename T,
typename Container = Deque<T>>
205 using Queue = std::queue<T, Container>;
213 template<
typename T,
typename Predicate = std::less<T>,
typename Container = Vector<T>>
General Purpose Allocator (GPA) interface.
Definition Allocator.hpp:24
virtual void Deallocate(pointer ptr, size_type size)=0
virtual pointer Allocate(size_type size, size_t alignment=alignof(std::max_align_t))=0
std::span with relaxed constructors for pointer-aliasing types and common containers.
Definition Container.hpp:59
Span(U(&array)[Size])
Relaxed ctor for C-style arrays.
Definition Container.hpp:79
Span(U &item)
Shorthand for single l-value item.
Definition Container.hpp:93
Span< const char > AsBytes() const
Provides casting to a byte-level view of the underlying data.
Definition Container.hpp:98
Span(U *data, size_t size)
Relaxed ctor for pointer-aliasing types.
Definition Container.hpp:69
Span(U &array)
Relaxed ctor for contiguous STL containers.
Definition Container.hpp:86
Allocators, Data Structures and introspection implementations.
Definition Allocator.hpp:5
std::vector< T, StlAllocator< T > > Vector
std::vector with explicit Foundation::Core::StlAllocator constructor
Definition Container.hpp:159
std::basic_string< char > String
Alias for std::basic_string<char>, without an explicit allocator constructor.
Definition Container.hpp:141
std::tuple< Args... > Tuple
Alias for std::tuple
Definition Container.hpp:36
std::queue< T, Container > Queue
std::queue with explicit Foundation::Core::StlAllocator constructor
Definition Container.hpp:205
std::basic_string< char, std::char_traits< char >, StlAllocator< char > > StringAlloc
std::basic_string<char> with explicit Foundation::Core::StlAllocator constructor
Definition Container.hpp:149
void DestructSpan(Allocator *resource, Span< T > span)
Convenience function for destructing a Span allocated with ConstructSpan. Calls destructors in-place ...
Definition Container.hpp:124
std::pair< First, Second > Pair
Alias for std::pair
Definition Container.hpp:30
std::set< T, Predicate, StlAllocator< T > > Set
std::set with explicit Foundation::Core::StlAllocator constructor
Definition Container.hpp:169
std::map< K, V, Predicate, StlAllocator< Pair< const K, V > > > Map
std::map with explicit Foundation::Core::StlAllocator constructor
Definition Container.hpp:178
std::list< T, StlAllocator< T > > List
std::list with explicit Foundation::Core::StlAllocator constructor
Definition Container.hpp:196
std::bitset< Size > Bitset
Alias for std::bitset
Definition Container.hpp:48
Span< T > ConstructSpan(Allocator *resource, size_t size, Args &&...args)
Convenience function for constructing a Span with memory allocated from a Foundation::Core::Allocator...
Definition Container.hpp:110
std::priority_queue< T, Container, Predicate > PriorityQueue
std::priority_queue with explicit Foundation::Core::StlAllocator constructor
Definition Container.hpp:214
std::array< T, Size > Array
Alias for std::array
Definition Container.hpp:42
std::basic_string_view< char > StringView
Alias for std::basic_string_view<char>
Definition Container.hpp:53
std::optional< T > Optional
Alias for std::optional
Definition Container.hpp:24
std::deque< T, StlAllocator< T > > Deque
std::deque with explicit Foundation::Core::StlAllocator constructor
Definition Container.hpp:187
std::unique_ptr< T, StlDeleter< T > > UniquePtr
std::unique_ptr with custom deleter that uses a Foundation::Core::Allocator to deallocate memory.
Definition Allocator.hpp:161