1a74702c6SGeorge Wang/* Copyright (c) 2017 - 2022 LiteSpeed Technologies Inc. See LICENSE. */ 250aadb33SDmitri Tikhonov/* 350aadb33SDmitri Tikhonov * lsquic_set.h -- A set implementation. 450aadb33SDmitri Tikhonov * 550aadb33SDmitri Tikhonov * There are two sets of APIs: one for four- and the other for eight-byte 650aadb33SDmitri Tikhonov * integers. 750aadb33SDmitri Tikhonov */ 850aadb33SDmitri Tikhonov 950aadb33SDmitri Tikhonov#ifndef LSQUIC_SET_H 1050aadb33SDmitri Tikhonov#define LSQUIC_SET_H 1 1150aadb33SDmitri Tikhonov 1250aadb33SDmitri Tikhonov#include <stdint.h> 1350aadb33SDmitri Tikhonov 1450aadb33SDmitri Tikhonovstruct lsquic_set32_elem; 1550aadb33SDmitri Tikhonov 1650aadb33SDmitri Tikhonovtypedef struct lsquic_set32 { 1750aadb33SDmitri Tikhonov struct lsquic_set32_elem *elems; 1850aadb33SDmitri Tikhonov uint64_t lowset; /* Bitmask for values 0 - 63 */ 1950aadb33SDmitri Tikhonov int n_elems, n_alloc; 2050aadb33SDmitri Tikhonov} lsquic_set32_t; 2150aadb33SDmitri Tikhonov 2250aadb33SDmitri Tikhonovvoid 2350aadb33SDmitri Tikhonovlsquic_set32_init (struct lsquic_set32 *); 2450aadb33SDmitri Tikhonov 2550aadb33SDmitri Tikhonovvoid 2650aadb33SDmitri Tikhonovlsquic_set32_cleanup (struct lsquic_set32 *); 2750aadb33SDmitri Tikhonov 2850aadb33SDmitri Tikhonovint 2950aadb33SDmitri Tikhonovlsquic_set32_add (struct lsquic_set32 *, uint32_t value); 3050aadb33SDmitri Tikhonov 3150aadb33SDmitri Tikhonov/* Returns true if set contaims `value', false otherwise */ 3250aadb33SDmitri Tikhonovint 3350aadb33SDmitri Tikhonovlsquic_set32_has (const struct lsquic_set32 *, uint32_t value); 3450aadb33SDmitri Tikhonov 3550aadb33SDmitri Tikhonovstruct lsquic_set64_elem; 3650aadb33SDmitri Tikhonov 3750aadb33SDmitri Tikhonovtypedef struct lsquic_set64 { 3850aadb33SDmitri Tikhonov struct lsquic_set64_elem *elems; 3950aadb33SDmitri Tikhonov uint64_t lowset; /* Bitmask for values 0 - 63 */ 4050aadb33SDmitri Tikhonov int n_elems, n_alloc; 4150aadb33SDmitri Tikhonov} lsquic_set64_t; 4250aadb33SDmitri Tikhonov 4350aadb33SDmitri Tikhonovvoid 4450aadb33SDmitri Tikhonovlsquic_set64_init (struct lsquic_set64 *); 4550aadb33SDmitri Tikhonov 4650aadb33SDmitri Tikhonovvoid 4750aadb33SDmitri Tikhonovlsquic_set64_cleanup (struct lsquic_set64 *); 4850aadb33SDmitri Tikhonov 4950aadb33SDmitri Tikhonovint 5050aadb33SDmitri Tikhonovlsquic_set64_add (struct lsquic_set64 *, uint64_t value); 5150aadb33SDmitri Tikhonov 5250aadb33SDmitri Tikhonov/* Returns true if set contaims `value', false otherwise */ 5350aadb33SDmitri Tikhonovint 5450aadb33SDmitri Tikhonovlsquic_set64_has (const struct lsquic_set64 *, uint64_t value); 5550aadb33SDmitri Tikhonov 5650aadb33SDmitri Tikhonov#endif 57