From: Michael Brown Date: Sat, 4 Sep 2010 22:29:00 +0000 (+0100) Subject: [tables] Add for_each_table_entry_continue() and _continue_reverse() X-Git-Tag: v1.20.1~2550 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=c04b6ccd75cc87b55b74bcc6a9798ad038b3e744;p=thirdparty%2Fipxe.git [tables] Add for_each_table_entry_continue() and _continue_reverse() Signed-off-by: Michael Brown --- diff --git a/src/include/ipxe/tables.h b/src/include/ipxe/tables.h index 74d437537..583ba51b8 100644 --- a/src/include/ipxe/tables.h +++ b/src/include/ipxe/tables.h @@ -359,6 +359,35 @@ FILE_LICENCE ( GPL2_OR_LATER ); pointer < table_end ( table ) ; \ 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 * @@ -385,6 +414,35 @@ FILE_LICENCE ( GPL2_OR_LATER ); pointer >= table_start ( table ) ; \ 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