From 8329d42d3e592f4cd42cdfa586e2325ddc76c898 Mon Sep 17 00:00:00 2001 From: aura Date: Tue, 10 Mar 2026 01:35:50 +0100 Subject: perf profiler, simplify 2d render, string struct, many small things --- src/util/allocator.h | 37 +++++++++++++++++++++++++++++++++++-- 1 file changed, 35 insertions(+), 2 deletions(-) (limited to 'src/util/allocator.h') diff --git a/src/util/allocator.h b/src/util/allocator.h index 27b21c0..64bad23 100644 --- a/src/util/allocator.h +++ b/src/util/allocator.h @@ -5,10 +5,23 @@ #include #include "typedef.h" -template < typename T > +template +struct LIST_ITERATOR { + T* ptr; + + LIST_ITERATOR( T* ptr ) : ptr( ptr ) {} + T& operator*() { return *ptr; } + T* operator->() { return ptr; } + LIST_ITERATOR& operator++() { ptr++; return *this; } + LIST_ITERATOR operator+=( U8 n ) { ptr += n; return *this; } + bool operator==( const LIST_ITERATOR& other ) { return ptr == other.ptr; } + bool operator!=( const LIST_ITERATOR& other ) { return ptr != other.ptr; } +}; + +template using QSORT_FN = std::function< U8( T*, T* ) >; -template < typename T > +template static U8 qsort_basic_sort( T* t1, T* t2 ) { return (*t1 > *t2); } @@ -63,6 +76,13 @@ struct LIST { size = 0; } + LIST( U32 _size, const T* data ) { + data = (T*)malloc( sizeof( T ) * _size ); + memcpy( data, data, _size * sizeof( T ) ); + size = _size; + capacity = _size; + } + LIST( const LIST& other ) { if( !other.capacity || !other.size ) { capacity = 1; @@ -91,6 +111,7 @@ struct LIST { capacity = 1; size = 0; data = (T*)malloc( sizeof( T ) ); + memset( data, 0, sizeof( T ) ); return *this; } @@ -106,6 +127,10 @@ struct LIST { free( data ); } + T at( U32 index ) { + return data[index]; + } + void reserve( U32 count ) { if( capacity >= count ) return; @@ -320,4 +345,12 @@ struct LIST { ret.sort( fn ); return ret; } + + LIST_ITERATOR begin() { + return LIST_ITERATOR( data ); + } + + LIST_ITERATOR end() { + return LIST_ITERATOR( data + size ); + } }; -- cgit v1.2.3