[tables] Add for_each_table_entry_continue() and _continue_reverse()
Signed-off-by: Michael Brown <mcb30@ipxe.org>
This commit is contained in:
parent
a3021ad0e4
commit
c04b6ccd75
|
@ -359,6 +359,35 @@ FILE_LICENCE ( GPL2_OR_LATER );
|
||||||
pointer < table_end ( table ) ; \
|
pointer < table_end ( table ) ; \
|
||||||
pointer++ )
|
pointer++ )
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Iterate through all remaining entries within a linker table
|
||||||
|
*
|
||||||
|
* @v pointer Entry pointer, preset to most recent entry
|
||||||
|
* @v table Linker table
|
||||||
|
*
|
||||||
|
* Example usage:
|
||||||
|
*
|
||||||
|
* @code
|
||||||
|
*
|
||||||
|
* #define FROBNICATORS __table ( struct frobnicator, "frobnicators" )
|
||||||
|
* #define __frobnicator __table_entry ( FROBNICATORS, 01 )
|
||||||
|
*
|
||||||
|
* struct frob my_frobnicator __frobnicator;
|
||||||
|
* struct frobnicator *frob;
|
||||||
|
*
|
||||||
|
* frob = &my_frobnicator;
|
||||||
|
* for_each_table_entry_continue ( frob, FROBNICATORS ) {
|
||||||
|
* ...
|
||||||
|
* }
|
||||||
|
*
|
||||||
|
* @endcode
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
#define for_each_table_entry_continue( pointer, table ) \
|
||||||
|
for ( pointer++ ; \
|
||||||
|
pointer < table_end ( table ) ; \
|
||||||
|
pointer++ )
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Iterate through all entries within a linker table in reverse order
|
* Iterate through all entries within a linker table in reverse order
|
||||||
*
|
*
|
||||||
|
@ -385,6 +414,35 @@ FILE_LICENCE ( GPL2_OR_LATER );
|
||||||
pointer >= table_start ( table ) ; \
|
pointer >= table_start ( table ) ; \
|
||||||
pointer-- )
|
pointer-- )
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Iterate through all remaining entries within a linker table in reverse order
|
||||||
|
*
|
||||||
|
* @v pointer Entry pointer, preset to most recent entry
|
||||||
|
* @v table Linker table
|
||||||
|
*
|
||||||
|
* Example usage:
|
||||||
|
*
|
||||||
|
* @code
|
||||||
|
*
|
||||||
|
* #define FROBNICATORS __table ( struct frobnicator, "frobnicators" )
|
||||||
|
* #define __frobnicator __table_entry ( FROBNICATORS, 01 )
|
||||||
|
*
|
||||||
|
* struct frob my_frobnicator __frobnicator;
|
||||||
|
* struct frobnicator *frob;
|
||||||
|
*
|
||||||
|
* frob = &my_frobnicator;
|
||||||
|
* for_each_table_entry_continue_reverse ( frob, FROBNICATORS ) {
|
||||||
|
* ...
|
||||||
|
* }
|
||||||
|
*
|
||||||
|
* @endcode
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
#define for_each_table_entry_continue_reverse( pointer, table ) \
|
||||||
|
for ( pointer-- ; \
|
||||||
|
pointer >= table_start ( table ) ; \
|
||||||
|
pointer-- )
|
||||||
|
|
||||||
/******************************************************************************
|
/******************************************************************************
|
||||||
*
|
*
|
||||||
* Intel's C compiler chokes on several of the constructs used in this
|
* Intel's C compiler chokes on several of the constructs used in this
|
||||||
|
|
Reference in New Issue