/** * virBitmapClearBit: * @bitmap: Pointer to bitmap * @b: bit position to clear * * Clear bit position @b in @bitmap * * Returns 0 on if bit is successfully clear, -1 on error. */ int virBitmapClearBit(virBitmapPtr bitmap, size_t b) { if (bitmap->max_bit <= b) return -1; bitmap->map[VIR_BITMAP_UNIT_OFFSET(b)] &= ~VIR_BITMAP_BIT(b); return 0; }
/** * virBitmapSetBitExpand: * @bitmap: Pointer to bitmap * @b: bit position to set * * Set bit position @b in @bitmap. Expands the bitmap as necessary so that @b is * included in the map. * * Returns 0 on if bit is successfully set, -1 on error. */ int virBitmapSetBitExpand(virBitmapPtr bitmap, size_t b) { if (bitmap->max_bit <= b && virBitmapExpand(bitmap, b) < 0) return -1; bitmap->map[VIR_BITMAP_UNIT_OFFSET(b)] |= VIR_BITMAP_BIT(b); return 0; }
/** * virBitmapSetBit: * @bitmap: Pointer to bitmap * @b: bit position to set * * Set bit position @b in @bitmap * * Returns 0 on if bit is successfully set, -1 on error. */ int virBitmapSetBit(virBitmapPtr bitmap, size_t b) { if (bitmap->size <= b) return -1; bitmap->map[VIR_BITMAP_UNIT_OFFSET(b)] |= (1 << VIR_BITMAP_BIT_OFFSET(b)); return 0; }
/** * virBitmapClearBitExpand: * @bitmap: Pointer to bitmap * @b: bit position to set * * Clear bit position @b in @bitmap. Expands the bitmap as necessary so that * @b is included in the map. * * Returns 0 on if bit is successfully cleared, -1 on error. */ int virBitmapClearBitExpand(virBitmapPtr bitmap, size_t b) { if (bitmap->max_bit <= b) { if (virBitmapExpand(bitmap, b) < 0) return -1; } else { bitmap->map[VIR_BITMAP_UNIT_OFFSET(b)] &= ~VIR_BITMAP_BIT(b); } return 0; }
/** * virBitmapGetBit: * @bitmap: Pointer to bitmap * @b: bit position to get * @result: bool pointer to receive bit setting * * Get setting of bit position @b in @bitmap and store in @result * * On success, @result will contain the setting of @b and 0 is * returned. On failure, -1 is returned and @result is unchanged. */ int virBitmapGetBit(virBitmapPtr bitmap, size_t b, bool *result) { uint32_t bit; if (bitmap->size <= b) return -1; bit = bitmap->map[VIR_BITMAP_UNIT_OFFSET(b)] & (1 << VIR_BITMAP_BIT_OFFSET(b)); *result = bit != 0; return 0; }
/* Helper function. caller must ensure b < bitmap->max_bit */ static bool virBitmapIsSet(virBitmapPtr bitmap, size_t b) { return !!(bitmap->map[VIR_BITMAP_UNIT_OFFSET(b)] & VIR_BITMAP_BIT(b)); }