From a89ae540c1d287d275943fd06692a44e9dbc8331 Mon Sep 17 00:00:00 2001 From: Sebastian Huber Date: Tue, 6 Dec 2011 14:23:26 +0000 Subject: 2011-12-06 Sebastian Huber * score/src/heapiterate.c, score/src/pheapiterate.c: New files. * score/Makefile.am: Reflect changes above. * score/include/rtems/score/heap.h: Declare _Heap_Iterate() and define Heap_Block_visitor. * score/include/rtems/score/protectedheap.h: Declare _Protected_heap_Iterate(). * score/src/heapgetinfo.c: Use _Heap_Iterate(). --- cpukit/score/src/heapgetinfo.c | 45 ++++++++++++++++++++---------------------- 1 file changed, 21 insertions(+), 24 deletions(-) (limited to 'cpukit/score/src/heapgetinfo.c') diff --git a/cpukit/score/src/heapgetinfo.c b/cpukit/score/src/heapgetinfo.c index bcb5a7f68d..872edc76ba 100644 --- a/cpukit/score/src/heapgetinfo.c +++ b/cpukit/score/src/heapgetinfo.c @@ -23,35 +23,32 @@ #include -#include -#include #include -void _Heap_Get_information( - Heap_Control *the_heap, - Heap_Information_block *the_info +static bool _Heap_Get_information_visitor( + const Heap_Block *block __attribute__((unused)), + uintptr_t block_size, + bool block_is_used, + void *visitor_arg ) { - Heap_Block *the_block = the_heap->first_block; - Heap_Block *const end = the_heap->last_block; + Heap_Information_block *info_block = visitor_arg; + Heap_Information *info = block_is_used ? + &info_block->Used : &info_block->Free; - memset(the_info, 0, sizeof(*the_info)); + ++info->number; + info->total += block_size; + if ( info->largest < block_size ) + info->largest = block_size; - while ( the_block != end ) { - uintptr_t const the_size = _Heap_Block_size(the_block); - Heap_Block *const next_block = _Heap_Block_at(the_block, the_size); - Heap_Information *info; - - if ( _Heap_Is_prev_used(next_block) ) - info = &the_info->Used; - else - info = &the_info->Free; - - info->number++; - info->total += the_size; - if ( info->largest < the_size ) - info->largest = the_size; + return false; +} - the_block = next_block; - } +void _Heap_Get_information( + Heap_Control *the_heap, + Heap_Information_block *the_info +) +{ + memset( the_info, 0, sizeof(*the_info) ); + _Heap_Iterate( the_heap, _Heap_Get_information_visitor, the_info ); } -- cgit v1.2.3