From 56110edad1f4b419ff309e7cb6f2d320990b60d1 Mon Sep 17 00:00:00 2001 From: Cyrille Bagard Date: Thu, 8 Feb 2024 23:10:16 +0100 Subject: Save an unused bit field operation created for tests. --- src/common/bits.c | 36 ++++++++++++++++++++++++++++++++++++ src/common/bits.h | 3 +++ 2 files changed, 39 insertions(+) diff --git a/src/common/bits.c b/src/common/bits.c index 1ded7a2..0e5afc8 100644 --- a/src/common/bits.c +++ b/src/common/bits.c @@ -646,6 +646,42 @@ bool test_in_bit_field(const bitfield_t *field, size_t n) /****************************************************************************** * * +* Paramètres : field = champ de bits à consulter. * +* n = indice du bit à traiter. * +* * +* Description : Détermine si un bit est à 1 dans un champ puis le définit. * +* * +* Retour : true si le bit correspondant était déjà à l'état haut. * +* * +* Remarques : - * +* * +******************************************************************************/ + +bool test_and_set_in_bit_field(bitfield_t *field, size_t n) +{ + bool result; /* Valeur retrouvée à renvoyer */ + size_t index; /* Cellule de tableau visée */ + size_t remaining; /* Nombre de bits restants */ + unsigned long *bits; /* Accès mis en commun */ + + assert(n < field->length); + + index = n / (sizeof(unsigned long) * 8); + remaining = n % (sizeof(unsigned long) * 8); + + bits = field->bits + index; + + result = *bits & (1ul << remaining); + + *bits |= (1ul << remaining); + + return result; + +} + + +/****************************************************************************** +* * * Paramètres : field = champ de bits à modifier. * * first = indice du premier bit à traiter. * * count = nombre de bits à marquer. * diff --git a/src/common/bits.h b/src/common/bits.h index 8f67d3d..cd71681 100644 --- a/src/common/bits.h +++ b/src/common/bits.h @@ -81,6 +81,9 @@ void or_bit_field_at(bitfield_t *, const bitfield_t *, size_t); /* Détermine si un bit est à 1 dans un champ de bits. */ bool test_in_bit_field(const bitfield_t *, size_t); +/* Détermine si un bit est à 1 dans un champ puis le définit. */ +bool test_and_set_in_bit_field(bitfield_t *, size_t); + /* Détermine si un ensemble de bits est à 0 dans un champ. */ bool test_none_in_bit_field(const bitfield_t *, size_t, size_t); -- cgit v0.11.2-87-g4458