/* SPDX-License-Identifier: LGPL-2.1-or-later */
#pragma once

#include <stdbool.h>

#include "hashmap.h"
#include "macro.h"

typedef struct Bitmap {
        uint64_t *bitmaps;
        size_t n_bitmaps;
} Bitmap;

Bitmap* systemd_bitmap_new(void);
Bitmap* systemd_bitmap_copy(Bitmap *b);
int systemd_bitmap_ensure_allocated(Bitmap **b);
Bitmap* systemd_bitmap_free(Bitmap *b);

int systemd_bitmap_set(Bitmap *b, unsigned n);
void systemd_bitmap_unset(Bitmap *b, unsigned n);
bool systemd_bitmap_isset(const Bitmap *b, unsigned n);
bool systemd_bitmap_isclear(const Bitmap *b);
void systemd_bitmap_clear(Bitmap *b);

bool systemd_bitmap_iterate(const Bitmap *b, Iterator *i, unsigned *n);

bool systemd_bitmap_equal(const Bitmap *a, const Bitmap *b);

#define _BITMAP_FOREACH(n, b, i) \
        for (Iterator i = {}; systemd_bitmap_iterate((b), &i, (unsigned*)&(n)); )
#define BITMAP_FOREACH(n, b) \
        _BITMAP_FOREACH(n, b, UNIQ_T(i, UNIQ))

DEFINE_TRIVIAL_CLEANUP_FUNC(Bitmap*, systemd_bitmap_free);

#define _cleanup_systemd_bitmap_free_ _cleanup_(systemd_bitmap_freep)
