/* kc3
 * Copyright 2022,2023,2024 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 set_item.c.in NAME=_NAME$ TYPE=_TYPE$ */
#include "alloc.h"
#include "assert.h"
#include "set_item___NAME$.h"
#include "_NAME$.h"

s_set_item___NAME$ *
set_item_new___NAME$ (_TYPE$ *data, uw hash, s_set_item___NAME$ *next)
{
  s_set_item___NAME$ *item;
  item = alloc(sizeof(s_set_item___NAME$));
  if (! item)
    return NULL;
  if (! _NAME$_init_copy(&item->data, data)) {
    free(item);
    return NULL;
  }
  item->hash = hash;
  item->next = next;
  item->usage = 0;
  return item;
}

void set_item_delete___NAME$ (s_set_item___NAME$ *x)
{
  assert(x);
  _NAME$_clean(&x->data);
  free(x);
}

void set_item_delete_all___NAME$ (s_set_item___NAME$ *x)
{
  s_set_item___NAME$ *y;
  while (x) {
    y = x;
    x = x->next;
    set_item_delete___NAME$(y);
  }
}
