]> git.ipfire.org Git - thirdparty/ipxe.git/commitdiff
[tables] Add for_each_table_entry_continue() and _continue_reverse()
authorMichael Brown <mcb30@ipxe.org>
Sat, 4 Sep 2010 22:29:00 +0000 (23:29 +0100)
committerMichael Brown <mcb30@ipxe.org>
Sun, 5 Sep 2010 01:49:06 +0000 (02:49 +0100)
Signed-off-by: Michael Brown <mcb30@ipxe.org>
src/include/ipxe/tables.h

index 74d437537882a19d610a01dbe7f4e55a6d7cea18..583ba51b8a37f302223bf2cee94075c2ac0d9f3e 100644 (file)
@@ -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