blob: e4b0f28de84a7c21c53fc71a6556d737533ef2a8 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
|
/*
* object iterator
*
*
* COPYRIGHT (c) 2000.
* On-Line Applications Research Corporation (OAR).
*
* The license and distribution terms for this file may be
* found in found in the file LICENSE in this distribution or at
* http://www.OARcorp.com/rtems/license.html.
*
* $Id$
*/
#include <rtems/system.h>
#include <rtems/score/object.h>
/*PAGE
*
* _Objects_Local_iterate
*
* DESCRIPTION:
*
* This function invokes the callback function for each existing object
* of the type specified by the information block pointer. Iteration
* continues until either all objects have been processed, or, if
* break_on_error is TRUE, until an invocation of the callback returns
* something other than 0.
*
* Input parameters:
* information:
* A pointer to an Objects_Information block. Determines the type of
* object over which to iterate.
* callback:
* A pointer to a function with the indicated signature.
* arg:
* A pointer to some arbitrary entity. Passed on to the callback.
* break_on_error
* If TRUE, stop iterating on error.
*
* Output parameters: NONE
* But callback may write into space pointed to by arg.
*
* Return value:
* 0 if successful
* Value returned by the callback otherwise.
*/
unsigned32 _Objects_Local_iterate(
Objects_Information *information,
unsigned32 (*callback)(Objects_Control *object, void * arg),
void *arg,
boolean break_on_error
)
{
unsigned32 result;
unsigned32 i;
Objects_Control *the_object;
if ( !information )
return 0;
if ( !callback )
return 0;
for( i = 1; i <= information->maximum; i++ ) {
the_object = (Objects_Control *)information->local_table[i];
if( the_object ) {
result = (*callback)( the_object, arg );
if ( result && break_on_error )
return result;
}
}
return 0;
}
|