23
23
24
24
#include "opal_config.h"
25
25
26
- #include <stdio.h>
27
26
#include <limits.h>
27
+ #include <stdio.h>
28
28
29
- #include "opal/constants.h"
30
29
#include "opal/class/opal_bitmap.h"
30
+ #include "opal/constants.h"
31
31
32
32
/* The number of bits in the underlying type of the bitmap field
33
33
* in the opal_bitmap_t struct
34
34
*/
35
- #define SIZE_OF_BASE_TYPE 64
35
+ #define SIZE_OF_BASE_TYPE 64
36
36
37
37
static void opal_bitmap_construct (opal_bitmap_t * bm );
38
38
static void opal_bitmap_destruct (opal_bitmap_t * bm );
39
39
40
- OBJ_CLASS_INSTANCE (opal_bitmap_t , opal_object_t ,
41
- opal_bitmap_construct , opal_bitmap_destruct );
42
-
40
+ OBJ_CLASS_INSTANCE (opal_bitmap_t , opal_object_t , opal_bitmap_construct , opal_bitmap_destruct );
43
41
44
- static void
45
- opal_bitmap_construct (opal_bitmap_t * bm )
42
+ static void opal_bitmap_construct (opal_bitmap_t * bm )
46
43
{
47
44
bm -> bitmap = NULL ;
48
45
bm -> array_size = 0 ;
49
46
bm -> max_size = INT_MAX ;
50
47
}
51
48
52
-
53
- static void
54
- opal_bitmap_destruct (opal_bitmap_t * bm )
49
+ static void opal_bitmap_destruct (opal_bitmap_t * bm )
55
50
{
56
51
if (NULL != bm -> bitmap ) {
57
52
free (bm -> bitmap );
58
53
bm -> bitmap = NULL ;
59
54
}
60
55
}
61
56
62
-
63
- int opal_bitmap_set_max_size (opal_bitmap_t * bm , int max_size )
57
+ int opal_bitmap_set_max_size (opal_bitmap_t * bm , int max_size )
64
58
{
65
59
if (NULL == bm ) {
66
60
return OPAL_ERR_BAD_PARAM ;
@@ -71,14 +65,12 @@ int opal_bitmap_set_max_size (opal_bitmap_t *bm, int max_size)
71
65
* we set it (in numbers of bits!), otherwise it is
72
66
* set to INT_MAX in the constructor.
73
67
*/
74
- bm -> max_size = (int )(((size_t )max_size + SIZE_OF_BASE_TYPE - 1 ) / SIZE_OF_BASE_TYPE );
68
+ bm -> max_size = (int ) (((size_t ) max_size + SIZE_OF_BASE_TYPE - 1 ) / SIZE_OF_BASE_TYPE );
75
69
76
70
return OPAL_SUCCESS ;
77
71
}
78
72
79
-
80
- int
81
- opal_bitmap_init (opal_bitmap_t * bm , int size )
73
+ int opal_bitmap_init (opal_bitmap_t * bm , int size )
82
74
{
83
75
/*
84
76
* Only if the caller set the maximum size before initializing,
@@ -89,13 +81,14 @@ opal_bitmap_init(opal_bitmap_t *bm, int size)
89
81
return OPAL_ERR_BAD_PARAM ;
90
82
}
91
83
92
- bm -> array_size = (int )(((size_t )size + SIZE_OF_BASE_TYPE - 1 ) / SIZE_OF_BASE_TYPE );
93
- if ( NULL != bm -> bitmap ) {
84
+ bm -> array_size = (int ) (((size_t ) size + SIZE_OF_BASE_TYPE - 1 ) / SIZE_OF_BASE_TYPE );
85
+ if ( NULL != bm -> bitmap ) {
94
86
free (bm -> bitmap );
95
- if (bm -> max_size < bm -> array_size )
87
+ if (bm -> max_size < bm -> array_size ) {
96
88
bm -> max_size = bm -> array_size ;
89
+ }
97
90
}
98
- bm -> bitmap = (uint64_t * ) malloc (bm -> array_size * sizeof (uint64_t ));
91
+ bm -> bitmap = (uint64_t * ) malloc (bm -> array_size * sizeof (uint64_t ));
99
92
if (NULL == bm -> bitmap ) {
100
93
return OPAL_ERR_OUT_OF_RESOURCE ;
101
94
}
@@ -104,9 +97,7 @@ opal_bitmap_init(opal_bitmap_t *bm, int size)
104
97
return OPAL_SUCCESS ;
105
98
}
106
99
107
-
108
- int
109
- opal_bitmap_set_bit (opal_bitmap_t * bm , int bit )
100
+ int opal_bitmap_set_bit (opal_bitmap_t * bm , int bit )
110
101
{
111
102
int index , offset , new_size ;
112
103
@@ -124,12 +115,13 @@ opal_bitmap_set_bit(opal_bitmap_t *bm, int bit)
124
115
valid and we simply expand the bitmap */
125
116
126
117
new_size = index + 1 ;
127
- if ( new_size > bm -> max_size )
118
+ if ( new_size > bm -> max_size ) {
128
119
new_size = bm -> max_size ;
120
+ }
129
121
130
122
/* New size is just a multiple of the original size to fit in
131
123
the index. */
132
- bm -> bitmap = (uint64_t * ) realloc (bm -> bitmap , new_size * sizeof (uint64_t ));
124
+ bm -> bitmap = (uint64_t * ) realloc (bm -> bitmap , new_size * sizeof (uint64_t ));
133
125
if (NULL == bm -> bitmap ) {
134
126
return OPAL_ERR_OUT_OF_RESOURCE ;
135
127
}
@@ -147,9 +139,7 @@ opal_bitmap_set_bit(opal_bitmap_t *bm, int bit)
147
139
return OPAL_SUCCESS ;
148
140
}
149
141
150
-
151
- int
152
- opal_bitmap_clear_bit (opal_bitmap_t * bm , int bit )
142
+ int opal_bitmap_clear_bit (opal_bitmap_t * bm , int bit )
153
143
{
154
144
int index , offset ;
155
145
@@ -164,9 +154,7 @@ opal_bitmap_clear_bit(opal_bitmap_t *bm, int bit)
164
154
return OPAL_SUCCESS ;
165
155
}
166
156
167
-
168
- bool
169
- opal_bitmap_is_set_bit (opal_bitmap_t * bm , int bit )
157
+ bool opal_bitmap_is_set_bit (opal_bitmap_t * bm , int bit )
170
158
{
171
159
int index , offset ;
172
160
@@ -184,9 +172,7 @@ opal_bitmap_is_set_bit(opal_bitmap_t *bm, int bit)
184
172
return false;
185
173
}
186
174
187
-
188
- int
189
- opal_bitmap_clear_all_bits (opal_bitmap_t * bm )
175
+ int opal_bitmap_clear_all_bits (opal_bitmap_t * bm )
190
176
{
191
177
if (NULL == bm ) {
192
178
return OPAL_ERR_BAD_PARAM ;
@@ -196,9 +182,7 @@ opal_bitmap_clear_all_bits(opal_bitmap_t *bm)
196
182
return OPAL_SUCCESS ;
197
183
}
198
184
199
-
200
- int
201
- opal_bitmap_set_all_bits (opal_bitmap_t * bm )
185
+ int opal_bitmap_set_all_bits (opal_bitmap_t * bm )
202
186
{
203
187
if (NULL == bm ) {
204
188
return OPAL_ERR_BAD_PARAM ;
@@ -209,9 +193,7 @@ opal_bitmap_set_all_bits(opal_bitmap_t *bm)
209
193
return OPAL_SUCCESS ;
210
194
}
211
195
212
-
213
- int
214
- opal_bitmap_find_and_set_first_unset_bit (opal_bitmap_t * bm , int * position )
196
+ int opal_bitmap_find_and_set_first_unset_bit (opal_bitmap_t * bm , int * position )
215
197
{
216
198
int i = 0 ;
217
199
uint64_t temp , all_ones = 0xffffffffffffffffUL ;
@@ -222,7 +204,7 @@ opal_bitmap_find_and_set_first_unset_bit(opal_bitmap_t *bm, int *position)
222
204
223
205
/* Neglect all which don't have an unset bit */
224
206
* position = 0 ;
225
- while ((i < bm -> array_size ) && (bm -> bitmap [i ] == all_ones )) {
207
+ while ((i < bm -> array_size ) && (bm -> bitmap [i ] == all_ones )) {
226
208
++ i ;
227
209
}
228
210
@@ -236,8 +218,8 @@ opal_bitmap_find_and_set_first_unset_bit(opal_bitmap_t *bm, int *position)
236
218
237
219
temp = bm -> bitmap [i ];
238
220
bm -> bitmap [i ] |= (bm -> bitmap [i ] + 1 ); /* Set the first zero bit */
239
- temp ^= bm -> bitmap [i ]; /* Compute the change: the first unset bit in the original number */
240
- while ( !(temp & 0x1 ) ) {
221
+ temp ^= bm -> bitmap [i ]; /* Compute the change: the first unset bit in the original number */
222
+ while ( !(temp & 0x1 )) {
241
223
++ (* position );
242
224
temp >>= 1 ;
243
225
}
@@ -253,17 +235,17 @@ int opal_bitmap_bitwise_and_inplace(opal_bitmap_t *dest, opal_bitmap_t *right)
253
235
/*
254
236
* Sanity check
255
237
*/
256
- if ( NULL == dest || NULL == right ) {
238
+ if ( NULL == dest || NULL == right ) {
257
239
return OPAL_ERR_BAD_PARAM ;
258
240
}
259
- if ( dest -> array_size != right -> array_size ) {
241
+ if ( dest -> array_size != right -> array_size ) {
260
242
return OPAL_ERR_BAD_PARAM ;
261
243
}
262
244
263
245
/*
264
246
* Bitwise AND
265
247
*/
266
- for (i = 0 ; i < dest -> array_size ; ++ i ) {
248
+ for (i = 0 ; i < dest -> array_size ; ++ i ) {
267
249
dest -> bitmap [i ] &= right -> bitmap [i ];
268
250
}
269
251
@@ -277,17 +259,17 @@ int opal_bitmap_bitwise_or_inplace(opal_bitmap_t *dest, opal_bitmap_t *right)
277
259
/*
278
260
* Sanity check
279
261
*/
280
- if ( NULL == dest || NULL == right ) {
262
+ if ( NULL == dest || NULL == right ) {
281
263
return OPAL_ERR_BAD_PARAM ;
282
264
}
283
- if ( dest -> array_size != right -> array_size ) {
265
+ if ( dest -> array_size != right -> array_size ) {
284
266
return OPAL_ERR_BAD_PARAM ;
285
267
}
286
268
287
269
/*
288
270
* Bitwise OR
289
271
*/
290
- for (i = 0 ; i < dest -> array_size ; ++ i ) {
272
+ for (i = 0 ; i < dest -> array_size ; ++ i ) {
291
273
dest -> bitmap [i ] |= right -> bitmap [i ];
292
274
}
293
275
@@ -301,17 +283,17 @@ int opal_bitmap_bitwise_xor_inplace(opal_bitmap_t *dest, opal_bitmap_t *right)
301
283
/*
302
284
* Sanity check
303
285
*/
304
- if ( NULL == dest || NULL == right ) {
286
+ if ( NULL == dest || NULL == right ) {
305
287
return OPAL_ERR_BAD_PARAM ;
306
288
}
307
- if ( dest -> array_size != right -> array_size ) {
289
+ if ( dest -> array_size != right -> array_size ) {
308
290
return OPAL_ERR_BAD_PARAM ;
309
291
}
310
292
311
293
/*
312
294
* Bitwise XOR
313
295
*/
314
- for (i = 0 ; i < dest -> array_size ; ++ i ) {
296
+ for (i = 0 ; i < dest -> array_size ; ++ i ) {
315
297
dest -> bitmap [i ] ^= right -> bitmap [i ];
316
298
}
317
299
@@ -325,32 +307,32 @@ bool opal_bitmap_are_different(opal_bitmap_t *left, opal_bitmap_t *right)
325
307
/*
326
308
* Sanity check
327
309
*/
328
- if ( NULL == left || NULL == right ) {
310
+ if ( NULL == left || NULL == right ) {
329
311
return OPAL_ERR_BAD_PARAM ;
330
312
}
331
313
332
- if ( opal_bitmap_size (left ) != opal_bitmap_size (right ) ) {
314
+ if ( opal_bitmap_size (left ) != opal_bitmap_size (right )) {
333
315
return true;
334
316
}
335
317
336
318
/*
337
319
* Direct comparison
338
320
*/
339
- for (i = 0 ; i < left -> array_size ; ++ i ) {
340
- if ( left -> bitmap [i ] != right -> bitmap [i ] ) {
321
+ for (i = 0 ; i < left -> array_size ; ++ i ) {
322
+ if ( left -> bitmap [i ] != right -> bitmap [i ]) {
341
323
return true;
342
324
}
343
325
}
344
326
345
327
return false;
346
328
}
347
329
348
- char * opal_bitmap_get_string (opal_bitmap_t * bitmap )
330
+ char * opal_bitmap_get_string (opal_bitmap_t * bitmap )
349
331
{
350
332
int i ;
351
333
char * bitmap_str = NULL ;
352
334
353
- if ( NULL == bitmap ) {
335
+ if ( NULL == bitmap ) {
354
336
return NULL ;
355
337
}
356
338
@@ -360,8 +342,8 @@ char * opal_bitmap_get_string(opal_bitmap_t *bitmap)
360
342
}
361
343
bitmap_str [bitmap -> array_size * SIZE_OF_BASE_TYPE ] = '\0' ;
362
344
363
- for ( i = 0 ; i < (bitmap -> array_size * SIZE_OF_BASE_TYPE ); ++ i ) {
364
- if ( opal_bitmap_is_set_bit (bitmap , i ) ) {
345
+ for ( i = 0 ; i < (bitmap -> array_size * SIZE_OF_BASE_TYPE ); ++ i ) {
346
+ if ( opal_bitmap_is_set_bit (bitmap , i )) {
365
347
bitmap_str [i ] = 'X' ;
366
348
} else {
367
349
bitmap_str [i ] = '_' ;
@@ -387,12 +369,14 @@ int opal_bitmap_num_set_bits(opal_bitmap_t *bm, int len)
387
369
}
388
370
#endif
389
371
390
- for (i = 0 ; i < len ; ++ i ) {
391
- if ( 0 == (val = bm -> bitmap [i ]) ) continue ;
372
+ for (i = 0 ; i < len ; ++ i ) {
373
+ if (0 == (val = bm -> bitmap [i ])) {
374
+ continue ;
375
+ }
392
376
/* Peter Wegner in CACM 3 (1960), 322. This method goes through as many
393
377
* iterations as there are set bits. */
394
- for ( ; val ; cnt ++ ) {
395
- val &= val - 1 ; /* clear the least significant bit set */
378
+ for ( ; val ; cnt ++ ) {
379
+ val &= val - 1 ; /* clear the least significant bit set */
396
380
}
397
381
}
398
382
0 commit comments