SimGrid  3.21
Versatile Simulation of Distributed Systems

Detailed Description

Cursors are used to iterate over the structure.

Never add elements to the DynArr during the traversal. To remove elements, use the xbt_dynar_cursor_rm() function.

Do not call these function directly, but only within the xbt_dynar_foreach macro.

Macros

#define xbt_dynar_foreach(_dynar, _cursor, _data)
 Iterates over the whole dynar. More...
 
#define xbt_dynar_foreach_ptr(_dynar, _cursor, _ptr)
 

Typedefs

typedef struct xbt_dynar_s s_xbt_dynar_t
 

Functions

void xbt_dynar_cursor_rm (xbt_dynar_t dynar, unsigned int *const cursor)
 
static int _xbt_dynar_cursor_get (const xbt_dynar_t dynar, unsigned int idx, void *const dst)
 

Macro Definition Documentation

◆ xbt_dynar_foreach

#define xbt_dynar_foreach (   _dynar,
  _cursor,
  _data 
)

Iterates over the whole dynar.

Parameters
_dynarwhat to iterate over
_cursoran integer used as cursor
_data

Here is an example of usage:

unsigned int cpt;
string *str;
xbt_dynar_foreach (dyn,cpt,str) {
printf("Seen %s\n",str);
}

Note that underneath, that's a simple for loop with no real black magic involved. It's perfectly safe to interrupt a foreach with a break or a return statement.

Examples:
examples/msg/trace-host-user-variables/trace-host-user-variables.c, examples/msg/trace-masterworker/trace-masterworker.c, and examples/msg/trace-process-migration/trace-process-migration.c.

◆ xbt_dynar_foreach_ptr

#define xbt_dynar_foreach_ptr (   _dynar,
  _cursor,
  _ptr 
)
Value:
for ((_cursor) = 0 ; \
(_ptr = _cursor < _dynar->used ? (decltype(_ptr)) xbt_dynar_get_ptr(_dynar,_cursor) : NULL) ; \
(_cursor)++ )
void * xbt_dynar_get_ptr(const xbt_dynar_t dynar, const unsigned long idx)

Typedef Documentation

◆ s_xbt_dynar_t

typedef struct xbt_dynar_s s_xbt_dynar_t

Function Documentation

◆ xbt_dynar_cursor_rm()

void xbt_dynar_cursor_rm ( xbt_dynar_t  dynar,
unsigned int *const  cursor 
)

◆ _xbt_dynar_cursor_get()

static int _xbt_dynar_cursor_get ( const xbt_dynar_t  dynar,
unsigned int  idx,
void *const  dst 
)
inlinestatic