Line data Source code
1 : /* File: universal_arena_list.inl; Copyright and License: see below */ 2 : 3 : #include "u8/u8_log.h" 4 : #include <stdint.h> 5 : #include <assert.h> 6 : 7 1 : static inline void universal_arena_list_init( universal_arena_list_t *this_, 8 : universal_memory_arena_t *allocator ) 9 : { 10 1 : assert( allocator != NULL ); 11 1 : (*this_).begin = NULL; 12 1 : (*this_).allocator = allocator; 13 1 : } 14 : 15 1 : static inline void universal_arena_list_destroy( universal_arena_list_t *this_ ) 16 : { 17 1 : assert( (*this_).allocator != NULL ); 18 1 : (*this_).allocator = NULL; 19 1 : (*this_).begin = NULL; 20 1 : } 21 : 22 4 : static inline u8_error_t universal_arena_list_append( universal_arena_list_t *this_, void* element ) 23 : { 24 4 : assert( (*this_).allocator != NULL ); 25 4 : u8_error_t err = U8_ERROR_NONE; 26 : 27 : universal_arena_list_element_t *new_ele; 28 4 : err = universal_memory_arena_get_block( (*this_).allocator, sizeof(universal_arena_list_element_t), (void**)&new_ele ); 29 4 : if ( err == U8_ERROR_NONE ) 30 : { 31 3 : universal_arena_list_element_init( new_ele, element, NULL ); 32 : 33 3 : if ( (*this_).begin == NULL ) 34 : { 35 1 : (*this_).begin = new_ele; 36 : } 37 : else 38 : { 39 2 : universal_arena_list_element_t *find_last = (*this_).begin; 40 5 : for ( bool finished = false; ( ! finished ); ) 41 : { 42 3 : if ( universal_arena_list_element_get_next( find_last ) == NULL ) 43 : { 44 2 : universal_arena_list_element_set_next( find_last, new_ele ); 45 2 : finished = true; 46 : } 47 : else 48 : { 49 1 : find_last = universal_arena_list_element_get_next( find_last ); 50 : } 51 : } 52 : } 53 : } 54 : 55 4 : return err; 56 : } 57 : 58 2 : static inline universal_arena_list_element_t* universal_arena_list_get_begin( universal_arena_list_t *this_ ) 59 : { 60 2 : return (*this_).begin; 61 : } 62 : 63 1 : static inline universal_arena_list_element_t* universal_arena_list_get_end( universal_arena_list_t *this_ ) 64 : { 65 1 : return NULL; 66 : } 67 : 68 : 69 : /* 70 : Copyright 2021-2024 Andreas Warnke 71 : 72 : Licensed under the Apache License, Version 2.0 (the "License"); 73 : you may not use this file except in compliance with the License. 74 : You may obtain a copy of the License at 75 : 76 : http://www.apache.org/licenses/LICENSE-2.0 77 : 78 : Unless required by applicable law or agreed to in writing, software 79 : distributed under the License is distributed on an "AS IS" BASIS, 80 : WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 81 : See the License for the specific language governing permissions and 82 : limitations under the License. 83 : */