%module example

%typemap(in) (int nattributes, const char **names, const int *values) (VALUE keys_ary, int i, VALUE key, VALUE val) {
  Check_Type($input, T_HASH);
  $1 = NUM2INT(rb_funcall($input, rb_intern("size"), 0, Qnil));
  $2 = NULL;
  $3 = NULL;
  if ($1 > 0) {
    $2 = (char **) malloc($1*sizeof(char *));
    $3 = (int *) malloc($1*sizeof(int));
    keys_ary = rb_funcall($input, rb_intern("keys"), 0, Qnil);
    for (i = 0; i < $1; i++) {
      key = rb_ary_entry(keys_ary, i);
      val = rb_hash_aref($input, key);
      Check_Type(key, T_STRING);
      Check_Type(val, T_FIXNUM);
      $2[i] = StringValuePtr(key);
      $3[i] = NUM2INT(val);
    }
  }
}

%typemap(freearg) (int nattributes, const char **names, const int *values) {
  free((void *) $2);
  free((void *) $3);
}

%inline %{
void setVitalStats(const char *person, int nattributes, const char **names, const int *values) {
  int i;
  printf("Name: %s\n", person);
  for (i = 0; i < nattributes; i++) {
    printf("  %s => %d\n", names[i], values[i]);
  }
}
%}
