Files
mie/mie/ir/register.c
Max Wash 55161cd6c8 mie: re-implement vectors of blocks and registers using vector move callbacks
vector move callbacks allow mie_name instances to be stored in movable memory,
as the internal bst pointers can now be fixed during vector resize operations.
2026-01-18 22:58:17 +00:00

38 lines
829 B
C

#include <assert.h>
#include <mie/ir/register.h>
static enum mie_status cleanup(void *p)
{
mie_register_cleanup(p);
return MIE_SUCCESS;
}
static enum mie_status move(void *dst, void *src, size_t itemsz)
{
assert(itemsz == sizeof(struct mie_register));
struct mie_register *dest_reg = dst, *src_reg = src;
mie_register_move(dest_reg, src_reg);
return MIE_SUCCESS;
}
struct mie_vector_ops mie_register_vector_ops = {
.v_destroy = cleanup,
.v_move = move,
};
void mie_register_move(struct mie_register *dest, struct mie_register *src)
{
memmove(dest, src, sizeof *dest);
if (src->reg_flags & MIE_REGISTER_F_VIRTUAL) {
mie_name_move(&dest->reg_name, &src->reg_name);
}
}
void mie_register_cleanup(struct mie_register *reg)
{
if (reg->reg_flags & MIE_REGISTER_F_VIRTUAL) {
mie_name_destroy(&reg->reg_name);
}
}