#! /bin/sh

qualifiers="static inline "
class_name="$1"
prealloc="$2"

if test "x$class_name" = "x" ; then
  echo "usage: $0 class_name <prealloc>" 1>&2
  exit 1
fi

if test "x$prealloc" = x ; then
  prealloc=8
fi

lc_name=`echo "$class_name" | sed -e 's/\\([A-Z]\\)/_\\1/g; s/^_//;'`
lc_name=`echo "$lc_name" | tr A-Z a-z`
chunk_name="${lc_name}_chunk"

cat <<EOF
static GMemChunk *${chunk_name} = NULL;
G_LOCK_DEFINE_STATIC (${chunk_name});

$qualifiers${class_name}  *
${lc_name}_alloc   ()
{
  ${class_name} *rv;
  G_LOCK (${chunk_name});
  if (${chunk_name} == NULL)
    ${chunk_name} = g_mem_chunk_create (${class_name}, $prealloc, G_ALLOC_AND_FREE);
  rv = g_mem_chunk_alloc (${chunk_name});
  G_UNLOCK (${chunk_name});
  return rv;
}
${qualifiers}void
${lc_name}_free (${class_name} *${lc_name})
{
  G_LOCK (${chunk_name});
  g_mem_chunk_free (${chunk_name}, ${lc_name});
  G_UNLOCK (${chunk_name});
}

EOF
