diff --git a/src/common/bitstring.c b/src/common/bitstring.c index c7fc9598d78db22329de7dc9b9487fd164269249..1bc56d5ae1e55b28f66844bc36070ae2633e2b0c 100644 --- a/src/common/bitstring.c +++ b/src/common/bitstring.c @@ -60,6 +60,7 @@ strong_alias(bit_fmt, slurm_bit_fmt); strong_alias(bit_fls, slurm_bit_fls); strong_alias(bit_fill_gaps, slurm_bit_fill_gaps); strong_alias(bit_super_set, slurm_bit_super_set); +strong_alias(bit_equal, slurm_bit_equal); strong_alias(bit_copy, slurm_bit_copy); strong_alias(bit_pick_cnt, slurm_bit_pick_cnt); strong_alias(bitfmt2int, slurm_bitfmt2int); @@ -362,6 +363,30 @@ bit_super_set(bitstr_t *b1, bitstr_t *b2) { return 1; } +/* + * return 1 if b1 and b2 are identical, 0 otherwise + */ +extern int +bit_equal(bitstr_t *b1, bitstr_t *b2) +{ + bitoff_t bit; + + _assert_bitstr_valid(b1); + _assert_bitstr_valid(b2); + + if (_bitstr_bits(b1) != _bitstr_bits(b2)) + return 0; + + for (bit = 0; bit < _bitstr_bits(b1); bit += sizeof(bitstr_t)*8) { + if (b1[_bit_word(bit)] != b2[_bit_word(bit)]) + return 0; + } + + return 1; +} + + + /* * b1 &= b2 * b1 (IN/OUT) first string diff --git a/src/common/bitstring.h b/src/common/bitstring.h index 118706c38924212eff84c2d15c5949599782f1b7..80e1358e45b537054a99a3fe83dfbf55aa4d8cec 100644 --- a/src/common/bitstring.h +++ b/src/common/bitstring.h @@ -149,6 +149,7 @@ char *bit_fmt(char *str, int len, bitstr_t *b); bitoff_t bit_fls(bitstr_t *b); void bit_fill_gaps(bitstr_t *b); int bit_super_set(bitstr_t *b1, bitstr_t *b2); +int bit_equal(bitstr_t *b1, bitstr_t *b2); bitstr_t *bit_copy(bitstr_t *b); bitstr_t *bit_pick_cnt(bitstr_t *b, bitoff_t nbits); int *bitfmt2int (char *bit_str_ptr);