/* kc3
 * Copyright from 2022 to 2025 kmx.io <contact@kmx.io>
 *
 * Permission is hereby granted to use this software granted the above
 * copyright notice and this permission paragraph are included in all
 * copies and substantial portions of this software.
 *
 * THIS SOFTWARE IS PROVIDED "AS-IS" WITHOUT ANY GUARANTEE OF
 * PURPOSE AND PERFORMANCE. IN NO EVENT WHATSOEVER SHALL THE
 * AUTHOR BE CONSIDERED LIABLE FOR THE USE AND PERFORMANCE OF
 * THIS SOFTWARE.
 */
/* Gen from u.h.in BITS=_BITS$ bits=_bits$ */
#ifndef LIBKC3_U_BITS$_H
#define LIBKC3_U_BITS$_H

#include "types.h"

#define u_bits$_clean(u) ((void) u)

u_bits$ * u_bits$_init_1 (u_bits$ *u, const char *p);
u_bits$ * u_bits$_init_cast
(u_bits$ *u, const s_sym * const *type, const s_tag *tag);

u_bits$ * u_bits$_init_copy (u_bits$ *u, const u_bits$ *src);
u_bits$ * u_bits$_init_str (u_bits$ *u, const s_str *str);

uw *      u_bits$_hash_uw (u_bits$ u, uw *dest);
u_bits$ * u_bits$_random (u_bits$ *u);
u_bits$ * u_bits$_random_uniform (u_bits$ *u, u_bits$ max);
s_tag *   u_bits$_sqrt (const u_bits$ x, s_tag *dest);

#endif /* LIBKC3_U_BITS$_H */
