The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#include "perl.h"

#ifndef MAX_LEVEL
#include <limits.h>
#define MAX_LEVEL UCHAR_MAX
#endif

#define NODESIZE(N) sizeof(Node) + (sizeof(SV*) * (N+1))

#define SV2NODE(S) INT2PTR(Node*, SvIV(SvRV(S)))

#define IV2NODE(S) INT2PTR(Node*, S)

typedef struct {
  SV*   key;
  SV*   value;
  int   child_count;
  SV*   next[]; 
} Node;

Node * new(int child_count);
void DESTROY(Node * n);

int child_count(Node * n);

SV* get_child(Node * n, int index);
SV* get_child_or_undef(Node * n, int index);
void set_child(Node* n, int index, SV* t);

void set_key(Node *n, SV* k);
void force_set_key(Node *n, SV* k);
SV* get_key(Node *n);
I32 key_cmp(Node* n, SV* k);

void set_value(Node *n, SV* v);
SV* get_value(Node *n);

int _allocated(Node* n);