/* posix_arrays.c generated by valac, the Vala compiler
 * generated from posix_arrays.vala, do not modify */

#include <stdlib.h>
#include <assert.h>
#include <stddef.h>
#include <sys/types.h>
#include <string.h>
#include <stdbool.h>

#define FOO 2
#if !defined(VALA_STRICT_C)
#if !defined(__clang__) && defined(__GNUC__) && (__GNUC__ >= 14)
#pragma GCC diagnostic warning "-Wincompatible-pointer-types"
#elif defined(__clang__) && (__clang_major__ >= 16)
#pragma clang diagnostic ignored "-Wincompatible-function-pointer-types"
#pragma clang diagnostic ignored "-Wincompatible-pointer-types"
#endif
#endif
#if !defined(VALA_EXTERN)
#if defined(_MSC_VER)
#define VALA_EXTERN __declspec(dllexport) extern
#elif __GNUC__ >= 4
#define VALA_EXTERN __attribute__((visibility("default"))) extern
#else
#define VALA_EXTERN extern
#endif
#endif

#define _free0(var) ((var == NULL) ? NULL : (var = (free (var), NULL)))
typedef void (*ValaDestroyNotify) (void* data);
typedef int (*SimpleFunc) (void);
typedef struct _Foo Foo;
typedef struct _Bar Bar;
typedef struct _Manam Manam;
#define _manam_free0(var) ((var == NULL) ? NULL : (var = (manam_free (var), NULL)))
#define VALA_N_ELEMENTS(arr) (sizeof (arr) / sizeof ((arr)[0]))

struct _Foo {
	const char* array[2];
	int bar;
};

struct _Bar {
	int bar;
};

struct _Manam {
	Bar array[1024];
	Bar manam;
};

VALA_EXTERN int* foo;
int* foo = NULL;
VALA_EXTERN int* bar;
int* bar = NULL;
VALA_EXTERN SimpleFunc* simple_delegates;
VALA_EXTERN int simple_delegates_length1;
SimpleFunc* simple_delegates = NULL;
int simple_delegates_length1 = 0;
static int _simple_delegates_size_ = 0;

VALA_EXTERN void test_integer_array (void);
static int* _vala_array_dup1 (int* self,
                       ssize_t length);
static void _vala_array_add1 (int* * array,
                       int* length,
                       int* size,
                       int value);
static int* _vala_array_dup2 (int* self,
                       ssize_t length);
static int* _vala_array_dup3 (int* self,
                       ssize_t length);
static int* _vala_array_dup4 (int* self,
                       ssize_t length);
static int* _vala_array_dup5 (int* self,
                       ssize_t length);
static int* _vala_array_dup6 (int* self,
                       ssize_t length);
static bool _vala_int_array_contains (int * stack,
                               ssize_t stack_length,
                               const int needle);
static int* _int_dup (int* self);
static bool _int_equal (const int * s1,
                 const int * s2);
VALA_EXTERN void test_string_array (void);
static char** _vala_array_dup7 (char** self,
                         ssize_t length);
VALA_EXTERN int* pass_helper (int* a,
                  int a_length1,
                  int** b,
                  int* b_length1,
                  int* result_length1);
static int* _vala_array_dup8 (int* self,
                       ssize_t length);
VALA_EXTERN void test_array_pass (void);
VALA_EXTERN void test_static_array (void);
VALA_EXTERN void test_reference_transfer (void);
VALA_EXTERN void test_length_assignment (void);
VALA_EXTERN void test_inline_array (void);
VALA_EXTERN int* nd_array_pass (int* a,
                    int a_length1,
                    int a_length2,
                    int a_length3,
                    int** b,
                    int* b_length1,
                    int* b_length2,
                    int* b_length3,
                    int* result_length1,
                    int* result_length2,
                    int* result_length3);
static int* _vala_array_dup9 (int* self,
                       ssize_t length);
static int* _vala_array_dup10 (int* self,
                        ssize_t length);
VALA_EXTERN void test_nd_array (void);
VALA_EXTERN int simple_func (void);
VALA_EXTERN void test_delegate_array (void);
static void _vala_array_add2 (SimpleFunc* * array,
                       int* length,
                       int* size,
                       SimpleFunc value);
static bool _vala_simple_func_array_contains (SimpleFunc * stack,
                                       ssize_t stack_length,
                                       const SimpleFunc needle);
VALA_EXTERN void test_void_array (void);
static void _vala_array_add3 (void** * array,
                       int* length,
                       int* size,
                       void* value);
static void _vala_array_add4 (void** * array,
                       int* length,
                       int* size,
                       void* value);
static bool _vala_valavoid_array_contains (void* * stack,
                                    ssize_t stack_length,
                                    const void* needle);
VALA_EXTERN void test_explicit_copying (void);
static int* _vala_array_dup11 (int* self,
                        ssize_t length);
VALA_EXTERN void test_array_move (void);
VALA_EXTERN void test_array_resize (void);
VALA_EXTERN Foo* foo_dup (const Foo* self);
VALA_EXTERN void foo_free (Foo* self);
VALA_EXTERN Bar* bar_dup (const Bar* self);
VALA_EXTERN void bar_free (Bar* self);
VALA_EXTERN Manam* manam_dup (const Manam* self);
VALA_EXTERN void manam_free (Manam* self);
VALA_EXTERN void test_struct_array (void);
static bool _bar_equal (const Bar * s1,
                 const Bar * s2);
static bool _vala_bar_array_contains (Bar * stack,
                               ssize_t stack_length,
                               const Bar * needle);
VALA_EXTERN void give_fixed_array (int* i[3]);
VALA_EXTERN void take_fixed_array (int i[3]);
VALA_EXTERN void change_fixed_array (int* i[3]);
VALA_EXTERN void test_fixed_array (void);
static void _vala_main (void);
static void _vala_array_destroy (void* array,
                          ssize_t array_length,
                          ValaDestroyNotify destroy_func);
static void _vala_array_free (void* array,
                       ssize_t array_length,
                       ValaDestroyNotify destroy_func);
static void _vala_array_move (void* array,
                       size_t element_size,
                       ssize_t src,
                       ssize_t dest,
                       ssize_t length);
static ssize_t _vala_array_length (void* array);

const Foo FOO_ARRAY_CONST[1] = {{{"foo", "bar"}, 42}};

static int*
_vala_array_dup1 (int* self,
                  ssize_t length)
{
	if (length > 0) {
		int* result;
		result = calloc (length, sizeof (int));
		memcpy (result, self, length * sizeof (int));
		return result;
	}
	return NULL;
}

static void
_vala_array_add1 (int* * array,
                  int* length,
                  int* size,
                  int value)
{
	if ((*length) == (*size)) {
		*size = (*size) ? (2 * (*size)) : 4;
		*array = realloc (*array, (*size) * sizeof (int));
	}
	(*array)[(*length)++] = value;
}

static int*
_vala_array_dup2 (int* self,
                  ssize_t length)
{
	if (length > 0) {
		int* result;
		result = calloc (length, sizeof (int));
		memcpy (result, self, length * sizeof (int));
		return result;
	}
	return NULL;
}

static int*
_vala_array_dup3 (int* self,
                  ssize_t length)
{
	if (length > 0) {
		int* result;
		result = calloc (length, sizeof (int));
		memcpy (result, self, length * sizeof (int));
		return result;
	}
	return NULL;
}

static int*
_vala_array_dup4 (int* self,
                  ssize_t length)
{
	if (length > 0) {
		int* result;
		result = calloc (length, sizeof (int));
		memcpy (result, self, length * sizeof (int));
		return result;
	}
	return NULL;
}

static int*
_vala_array_dup5 (int* self,
                  ssize_t length)
{
	if (length > 0) {
		int* result;
		result = calloc (length, sizeof (int));
		memcpy (result, self, length * sizeof (int));
		return result;
	}
	return NULL;
}

static int*
_vala_array_dup6 (int* self,
                  ssize_t length)
{
	if (length > 0) {
		int* result;
		result = calloc (length, sizeof (int));
		memcpy (result, self, length * sizeof (int));
		return result;
	}
	return NULL;
}

static bool
_vala_int_array_contains (int * stack,
                          ssize_t stack_length,
                          const int needle)
{
	ssize_t i;
	for (i = 0; i < stack_length; i++) {
		if (needle == stack[i]) {
			return true;
		}
	}
	return false;
}

static int*
_int_dup (int* self)
{
	int* dup;
	dup = calloc (1, sizeof (int));
	memcpy (dup, self, sizeof (int));
	return dup;
}

static void*
__int_dup0 (void* self)
{
	return self ? _int_dup (self) : NULL;
}

static bool
_int_equal (const int * s1,
            const int * s2)
{
	if (s1 == s2) {
		return true;
	}
	if (s1 == NULL) {
		return false;
	}
	if (s2 == NULL) {
		return false;
	}
	return (*s1) == (*s2);
}

void
test_integer_array (void)
{
	int* a = NULL;
	int* _tmp0_;
	int a_length1;
	int _a_size_;
	int* _tmp1_;
	int _tmp1__length1;
	int* _tmp2_;
	int _tmp2__length1;
	int _tmp3_;
	int* _tmp4_;
	int* _tmp5_;
	int _tmp5__length1;
	int* _tmp6_;
	int _tmp6__length1;
	int _tmp7_;
	int* _tmp8_;
	int _tmp8__length1;
	int _tmp9_;
	int* b = NULL;
	int* _tmp10_;
	int _tmp10__length1;
	int* _tmp11_;
	int _tmp11__length1;
	int b_length1;
	int _b_size_;
	int _tmp12_;
	int _tmp13_;
	int* _tmp14_;
	int _tmp14__length1;
	int* _tmp15_;
	int _tmp15__length1;
	int _tmp16_;
	int* _tmp17_;
	int _tmp17__length1;
	int _tmp18_;
	int* _tmp19_;
	int _tmp19__length1;
	int _tmp20_;
	int _tmp21_;
	int _tmp22_;
	int* c = NULL;
	int* _tmp23_;
	int _tmp23__length1;
	int* _tmp24_;
	int _tmp24__length1;
	int c_length1;
	int _c_size_;
	int _tmp25_;
	int _tmp26_;
	int* c0 = NULL;
	int* _tmp27_;
	int _tmp27__length1;
	int* _tmp28_;
	int _tmp28__length1;
	int c0_length1;
	int _c0_size_;
	int* c1 = NULL;
	int* _tmp29_;
	int _tmp29__length1;
	int* _tmp30_;
	int _tmp30__length1;
	int* _tmp31_;
	int _tmp31__length1;
	int c1_length1;
	int _c1_size_;
	int _tmp32_;
	int _tmp33_;
	int* c2 = NULL;
	int* _tmp34_;
	int _tmp34__length1;
	int* _tmp35_;
	int _tmp35__length1;
	int c2_length1;
	int _c2_size_;
	int _tmp36_;
	int _tmp37_;
	int* c3 = NULL;
	int* _tmp38_;
	int _tmp38__length1;
	int* _tmp39_;
	int _tmp39__length1;
	int* _tmp40_;
	int _tmp40__length1;
	int c3_length1;
	int _c3_size_;
	int _tmp41_;
	int _tmp42_;
	int _tmp43_;
	int* _tmp44_;
	int _tmp44__length1;
	int* _tmp45_;
	int _tmp45__length1;
	int** d = NULL;
	int** _tmp46_;
	int d_length1;
	int _d_size_;
	int _tmp47_;
	int* _tmp48_;
	int* _tmp49_;
	int _tmp50_;
	int* _tmp51_;
	int* e = NULL;
	int* _tmp52_;
	int e_length1;
	int _e_size_;
	int _tmp53_;
	int _tmp54_;
	int _tmp55_;
	int _tmp56_;
	int _tmp57_;
	_tmp0_ = calloc (1, sizeof (int));
	_tmp0_[0] = 42;
	a = _tmp0_;
	a_length1 = 1;
	_a_size_ = a_length1;
	_tmp1_ = a;
	_tmp1__length1 = a_length1;
	assert (_tmp1__length1 == 1);
	_tmp2_ = a;
	_tmp2__length1 = a_length1;
	_tmp3_ = _tmp2_[0];
	assert (_tmp3_ == 42);
	_tmp4_ = calloc (2, sizeof (int));
	_tmp4_[0] = 42;
	_tmp4_[1] = 23;
	a = (free (a), NULL);
	a = _tmp4_;
	a_length1 = 2;
	_a_size_ = a_length1;
	_tmp5_ = a;
	_tmp5__length1 = a_length1;
	assert (_tmp5__length1 == 2);
	_tmp6_ = a;
	_tmp6__length1 = a_length1;
	_tmp7_ = _tmp6_[0];
	assert (_tmp7_ == 42);
	_tmp8_ = a;
	_tmp8__length1 = a_length1;
	_tmp9_ = _tmp8_[1];
	assert (_tmp9_ == 23);
	_tmp10_ = a;
	_tmp10__length1 = a_length1;
	_tmp11_ = (_tmp10_ != NULL) ? _vala_array_dup1 (_tmp10_, _tmp10__length1) : _tmp10_;
	_tmp11__length1 = _tmp10__length1;
	b = _tmp11_;
	b_length1 = _tmp11__length1;
	_b_size_ = b_length1;
	assert (b_length1 == 2);
	_tmp12_ = b[0];
	assert (_tmp12_ == 42);
	_tmp13_ = b[1];
	assert (_tmp13_ == 23);
	_vala_array_add1 (&a, &a_length1, &_a_size_, 11);
	_tmp14_ = a;
	_tmp14__length1 = a_length1;
	assert (_tmp14__length1 == 3);
	_tmp15_ = a;
	_tmp15__length1 = a_length1;
	_tmp16_ = _tmp15_[0];
	assert (_tmp16_ == 42);
	_tmp17_ = a;
	_tmp17__length1 = a_length1;
	_tmp18_ = _tmp17_[1];
	assert (_tmp18_ == 23);
	_tmp19_ = a;
	_tmp19__length1 = a_length1;
	_tmp20_ = _tmp19_[2];
	assert (_tmp20_ == 11);
	assert (b_length1 == 2);
	_tmp21_ = b[0];
	assert (_tmp21_ == 42);
	_tmp22_ = b[1];
	assert (_tmp22_ == 23);
	_tmp23_ = a;
	_tmp23__length1 = a_length1;
	_tmp24_ = (_tmp23_ != NULL) ? _vala_array_dup2 (_tmp23_ + 1, 3 - 1) : _tmp23_;
	_tmp24__length1 = 3 - 1;
	c = _tmp24_;
	c_length1 = _tmp24__length1;
	_c_size_ = c_length1;
	assert (c_length1 == 2);
	_tmp25_ = c[0];
	assert (_tmp25_ == 23);
	_tmp26_ = c[1];
	assert (_tmp26_ == 11);
	_tmp27_ = a;
	_tmp27__length1 = a_length1;
	_tmp28_ = (_tmp27_ != NULL) ? _vala_array_dup3 (_tmp27_ + 0, 0 - 0) : _tmp27_;
	_tmp28__length1 = 0 - 0;
	c0 = _tmp28_;
	c0_length1 = _tmp28__length1;
	_c0_size_ = c0_length1;
	assert (c0 == NULL);
	assert (c0_length1 == 0);
	_tmp29_ = a;
	_tmp29__length1 = a_length1;
	_tmp30_ = a;
	_tmp30__length1 = a_length1;
	_tmp31_ = (_tmp30_ != NULL) ? _vala_array_dup4 (_tmp30_ + 1, _tmp30__length1 - 1) : _tmp30_;
	_tmp31__length1 = _tmp30__length1 - 1;
	c1 = _tmp31_;
	c1_length1 = _tmp31__length1;
	_c1_size_ = c1_length1;
	assert (c1_length1 == 2);
	_tmp32_ = c1[0];
	assert (_tmp32_ == 23);
	_tmp33_ = c1[1];
	assert (_tmp33_ == 11);
	_tmp34_ = a;
	_tmp34__length1 = a_length1;
	_tmp35_ = (_tmp34_ != NULL) ? _vala_array_dup5 (_tmp34_ + 0, 2 - 0) : _tmp34_;
	_tmp35__length1 = 2 - 0;
	c2 = _tmp35_;
	c2_length1 = _tmp35__length1;
	_c2_size_ = c2_length1;
	assert (c2_length1 == 2);
	_tmp36_ = c2[0];
	assert (_tmp36_ == 42);
	_tmp37_ = c2[1];
	assert (_tmp37_ == 23);
	_tmp38_ = a;
	_tmp38__length1 = a_length1;
	_tmp39_ = a;
	_tmp39__length1 = a_length1;
	_tmp40_ = (_tmp39_ != NULL) ? _vala_array_dup6 (_tmp39_ + 0, _tmp39__length1 - 0) : _tmp39_;
	_tmp40__length1 = _tmp39__length1 - 0;
	c3 = _tmp40_;
	c3_length1 = _tmp40__length1;
	_c3_size_ = c3_length1;
	assert (c3_length1 == 3);
	_tmp41_ = c3[0];
	assert (_tmp41_ == 42);
	_tmp42_ = c3[1];
	assert (_tmp42_ == 23);
	_tmp43_ = c3[2];
	assert (_tmp43_ == 11);
	_tmp44_ = a;
	_tmp44__length1 = a_length1;
	assert (_vala_int_array_contains (_tmp44_, _tmp44__length1, 23));
	_tmp45_ = a;
	_tmp45__length1 = a_length1;
	assert (!_vala_int_array_contains (_tmp45_, _tmp45__length1, -1));
	_tmp46_ = calloc (2, sizeof (int*));
	d = _tmp46_;
	d_length1 = 2;
	_d_size_ = d_length1;
	_tmp47_ = 10;
	_tmp48_ = __int_dup0 (&_tmp47_);
	_free0 (d[0]);
	d[0] = _tmp48_;
	_free0 (d[1]);
	d[1] = NULL;
	_tmp49_ = d[0];
	_tmp50_ = 10;
	assert (_int_equal (_tmp49_, &_tmp50_) == true);
	_tmp51_ = d[1];
	assert (_tmp51_ == NULL);
	_tmp52_ = calloc (2, sizeof (int));
	_tmp52_[0] = 13;
	_tmp52_[1] = 47;
	e = _tmp52_;
	e_length1 = 2;
	_e_size_ = e_length1;
	e[0] = 96;
	_tmp53_ = e[0];
	assert (_tmp53_ == 96);
	e[0] /= 24;
	_tmp54_ = e[0];
	assert (_tmp54_ == 4);
	e[0] += 2;
	_tmp55_ = e[0];
	assert (_tmp55_ == 6);
	e[0] *= 4;
	_tmp56_ = e[0];
	assert (_tmp56_ == 24);
	e[0] -= 23;
	_tmp57_ = e[0];
	assert (_tmp57_ == 1);
	e = (free (e), NULL);
	d = (_vala_array_free (d, d_length1, (ValaDestroyNotify) free), NULL);
	c3 = (free (c3), NULL);
	c2 = (free (c2), NULL);
	c1 = (free (c1), NULL);
	c0 = (free (c0), NULL);
	c = (free (c), NULL);
	b = (free (b), NULL);
	a = (free (a), NULL);
}

static void*
_strdup0 (void* self)
{
	return self ? strdup (self) : NULL;
}

static int
_strcmp0 (const void * s1,
          const void * s2)
{
	if (!s1) {
		return -(s1 != s2);
	}
	if (!s2) {
		return s1 != s2;
	}
	return strcmp (s1, s2);
}

static char**
_vala_array_dup7 (char** self,
                  ssize_t length)
{
	if (length >= 0) {
		char** result;
		ssize_t i;
		result = calloc (length + 1, sizeof (char*));
		for (i = 0; i < length; i++) {
			char* _tmp0_;
			_tmp0_ = _strdup0 (self[i]);
			result[i] = _tmp0_;
		}
		return result;
	}
	return NULL;
}

void
test_string_array (void)
{
	char** a = NULL;
	char* _tmp0_;
	char** _tmp1_;
	int a_length1;
	int _a_size_;
	char** _tmp2_;
	int _tmp2__length1;
	char** _tmp3_;
	int _tmp3__length1;
	const char* _tmp4_;
	char* _tmp5_;
	char* _tmp6_;
	char** _tmp7_;
	char** _tmp8_;
	int _tmp8__length1;
	char** _tmp9_;
	int _tmp9__length1;
	const char* _tmp10_;
	char** _tmp11_;
	int _tmp11__length1;
	const char* _tmp12_;
	char** b = NULL;
	char** _tmp13_;
	int _tmp13__length1;
	char** _tmp14_;
	int _tmp14__length1;
	int b_length1;
	int _b_size_;
	const char* _tmp15_;
	const char* _tmp16_;
	_tmp0_ = _strdup0 ("hello");
	_tmp1_ = calloc (1 + 1, sizeof (char*));
	_tmp1_[0] = _tmp0_;
	a = _tmp1_;
	a_length1 = 1;
	_a_size_ = a_length1;
	_tmp2_ = a;
	_tmp2__length1 = a_length1;
	assert (_tmp2__length1 == 1);
	_tmp3_ = a;
	_tmp3__length1 = a_length1;
	_tmp4_ = _tmp3_[0];
	assert (_strcmp0 (_tmp4_, "hello") == 0);
	_tmp5_ = _strdup0 ("hello");
	_tmp6_ = _strdup0 ("world");
	_tmp7_ = calloc (2 + 1, sizeof (char*));
	_tmp7_[0] = _tmp5_;
	_tmp7_[1] = _tmp6_;
	a = (_vala_array_free (a, a_length1, (ValaDestroyNotify) free), NULL);
	a = _tmp7_;
	a_length1 = 2;
	_a_size_ = a_length1;
	_tmp8_ = a;
	_tmp8__length1 = a_length1;
	assert (_tmp8__length1 == 2);
	_tmp9_ = a;
	_tmp9__length1 = a_length1;
	_tmp10_ = _tmp9_[0];
	assert (_strcmp0 (_tmp10_, "hello") == 0);
	_tmp11_ = a;
	_tmp11__length1 = a_length1;
	_tmp12_ = _tmp11_[1];
	assert (_strcmp0 (_tmp12_, "world") == 0);
	_tmp13_ = a;
	_tmp13__length1 = a_length1;
	_tmp14_ = (_tmp13_ != NULL) ? _vala_array_dup7 (_tmp13_, _tmp13__length1) : _tmp13_;
	_tmp14__length1 = _tmp13__length1;
	b = _tmp14_;
	b_length1 = _tmp14__length1;
	_b_size_ = b_length1;
	assert (b_length1 == 2);
	_tmp15_ = b[0];
	assert (_strcmp0 (_tmp15_, "hello") == 0);
	_tmp16_ = b[1];
	assert (_strcmp0 (_tmp16_, "world") == 0);
	b = (_vala_array_free (b, b_length1, (ValaDestroyNotify) free), NULL);
	a = (_vala_array_free (a, a_length1, (ValaDestroyNotify) free), NULL);
}

static int*
_vala_array_dup8 (int* self,
                  ssize_t length)
{
	if (length > 0) {
		int* result;
		result = calloc (length, sizeof (int));
		memcpy (result, self, length * sizeof (int));
		return result;
	}
	return NULL;
}

int*
pass_helper (int* a,
             int a_length1,
             int** b,
             int* b_length1,
             int* result_length1)
{
	int* _vala_b = NULL;
	int _vala_b_length1 = 0;
	int* _tmp0_;
	int _tmp0__length1;
	int* _tmp1_;
	int* _tmp2_;
	int _tmp2__length1;
	int* result;
	_tmp0_ = (a != NULL) ? _vala_array_dup8 (a, a_length1) : a;
	_tmp0__length1 = a_length1;
	_vala_b = (free (_vala_b), NULL);
	_vala_b = _tmp0_;
	_vala_b_length1 = _tmp0__length1;
	_tmp1_ = calloc (2, sizeof (int));
	_tmp1_[0] = 42;
	_tmp1_[1] = 23;
	_tmp2_ = _tmp1_;
	_tmp2__length1 = 2;
	if (result_length1) {
		*result_length1 = _tmp2__length1;
	}
	result = _tmp2_;
	if (b) {
		*b = _vala_b;
	} else {
		_vala_b = (free (_vala_b), NULL);
	}
	if (b_length1) {
		*b_length1 = _vala_b_length1;
	}
	return result;
}

void
test_array_pass (void)
{
	int* a = NULL;
	int a_length1 = 0;
	int _a_size_ = 0;
	int* b = NULL;
	int b_length1 = 0;
	int _b_size_ = 0;
	int* _tmp0_;
	int* _tmp1_;
	int _tmp1__length1;
	int* _tmp2_ = NULL;
	int _tmp3_ = 0;
	int _tmp4_ = 0;
	int* _tmp5_;
	int _tmp6_;
	int _tmp7_;
	int _tmp8_;
	_tmp0_ = calloc (1, sizeof (int));
	_tmp0_[0] = 42;
	_tmp1_ = _tmp0_;
	_tmp1__length1 = 1;
	_tmp5_ = pass_helper (_tmp1_, (int) 1, &_tmp2_, &_tmp3_, &_tmp4_);
	b = (free (b), NULL);
	b = _tmp2_;
	b_length1 = _tmp3_;
	_b_size_ = b_length1;
	a = (free (a), NULL);
	a = _tmp5_;
	a_length1 = _tmp4_;
	_a_size_ = a_length1;
	_tmp1_ = (free (_tmp1_), NULL);
	assert (a_length1 == 2);
	_tmp6_ = a[0];
	assert (_tmp6_ == 42);
	_tmp7_ = a[1];
	assert (_tmp7_ == 23);
	assert (b_length1 == 1);
	_tmp8_ = b[0];
	assert (_tmp8_ == 42);
	b = (free (b), NULL);
	a = (free (a), NULL);
}

void
test_static_array (void)
{
	int a[2] = {0};
	int _tmp0_;
	int _tmp1_[2] = {0};
	bool _tmp2_ = false;
	int _tmp3_;
	int b[(FOO * 1) << 3];
	assert (2 == 2);
	a[1] = 23;
	_tmp0_ = a[1];
	assert (_tmp0_ == 23);
	_tmp1_[0] = 23;
	_tmp1_[1] = 34;
	memcpy (a, _tmp1_, 2 * sizeof (int));
	_tmp3_ = a[0];
	if (_tmp3_ == 23) {
		int _tmp4_;
		_tmp4_ = a[1];
		_tmp2_ = _tmp4_ == 34;
	} else {
		_tmp2_ = false;
	}
	assert (_tmp2_);
	memset (b, 0, ((FOO * 1) << 3) * sizeof (int));
	assert (((FOO * 1) << 3) == ((FOO * 1) << 3));
}

void
test_reference_transfer (void)
{
	int* baz = NULL;
	int* _tmp0_;
	int _tmp0__length1;
	int baz_length1;
	int _baz_size_;
	int* _tmp1_;
	int _tmp1__length1;
	char** data = NULL;
	char* _tmp2_;
	char** _tmp3_;
	int data_length1;
	int _data_size_;
	char** data2 = NULL;
	char** _tmp4_;
	int _tmp4__length1;
	int data2_length1;
	int _data2_size_;
	char** _tmp5_;
	int _tmp5__length1;
	_tmp0_ = foo;
	_tmp0__length1 = _vala_array_length (foo);
	foo = NULL;
	baz = _tmp0_;
	baz_length1 = _tmp0__length1;
	_baz_size_ = baz_length1;
	_tmp1_ = bar;
	_tmp1__length1 = -1;
	bar = NULL;
	baz = (free (baz), NULL);
	baz = _tmp1_;
	baz_length1 = _tmp1__length1;
	_baz_size_ = baz_length1;
	_tmp2_ = _strdup0 ("foo");
	_tmp3_ = calloc (1 + 1, sizeof (char*));
	_tmp3_[0] = _tmp2_;
	data = _tmp3_;
	data_length1 = 1;
	_data_size_ = data_length1;
	_tmp4_ = data;
	_tmp4__length1 = data_length1;
	data = NULL;
	data_length1 = 0;
	data2 = _tmp4_;
	data2_length1 = _tmp4__length1;
	_data2_size_ = data2_length1;
	_tmp5_ = data;
	_tmp5__length1 = data_length1;
	assert (_tmp5__length1 == 0);
	data2 = (_vala_array_free (data2, data2_length1, (ValaDestroyNotify) free), NULL);
	data = (_vala_array_free (data, data_length1, (ValaDestroyNotify) free), NULL);
	baz = (free (baz), NULL);
}

void
test_length_assignment (void)
{
	int* a = NULL;
	int* _tmp0_;
	int a_length1;
	int _a_size_;
	int* b = NULL;
	int* _tmp1_;
	int b_length1;
	int b_length2;
	int _tmp2_;
	_tmp0_ = calloc (10, sizeof (int));
	a = _tmp0_;
	a_length1 = 10;
	_a_size_ = a_length1;
	_tmp1_ = calloc (20 * 30, sizeof (int));
	b = _tmp1_;
	b_length1 = 20;
	b_length2 = 30;
	a_length1 = 8;
	b_length1 = 5;
	assert (a_length1 == 8);
	_tmp2_ = b_length1;
	assert (_tmp2_ == 5);
	b = (free (b), NULL);
	a = (free (a), NULL);
}

void
test_inline_array (void)
{
	static const int a[3] = {1, 2, 3};
	assert (_vala_int_array_contains (a, VALA_N_ELEMENTS (a), 1));
}

static int*
_vala_array_dup9 (int* self,
                  ssize_t length)
{
	if (length > 0) {
		int* result;
		result = calloc (length, sizeof (int));
		memcpy (result, self, length * sizeof (int));
		return result;
	}
	return NULL;
}

static int*
_vala_array_dup10 (int* self,
                   ssize_t length)
{
	if (length > 0) {
		int* result;
		result = calloc (length, sizeof (int));
		memcpy (result, self, length * sizeof (int));
		return result;
	}
	return NULL;
}

int*
nd_array_pass (int* a,
               int a_length1,
               int a_length2,
               int a_length3,
               int** b,
               int* b_length1,
               int* b_length2,
               int* b_length3,
               int* result_length1,
               int* result_length2,
               int* result_length3)
{
	int* _vala_b = NULL;
	int _vala_b_length1 = 0;
	int _vala_b_length2 = 0;
	int _vala_b_length3 = 0;
	int _tmp0_;
	int _tmp1_;
	int _tmp2_;
	int _tmp3_;
	int* _tmp4_;
	int _tmp4__length1;
	int _tmp4__length2;
	int _tmp4__length3;
	int* _tmp5_;
	int _tmp5__length1;
	int _tmp5__length2;
	int _tmp5__length3;
	int* _tmp6_;
	int _tmp6__length1;
	int _tmp6__length2;
	int _tmp6__length3;
	int* result;
	_tmp0_ = a_length1;
	assert (_tmp0_ == 2);
	_tmp1_ = a_length2;
	assert (_tmp1_ == 2);
	_tmp2_ = a_length3;
	assert (_tmp2_ == 2);
	_tmp3_ = a[(((1 * a_length2) + 1) * a_length3) + 0];
	assert (_tmp3_ == 7);
	_tmp4_ = (a != NULL) ? _vala_array_dup9 (a, (a_length1 * a_length2) * a_length3) : a;
	_tmp4__length1 = a_length1;
	_tmp4__length2 = a_length2;
	_tmp4__length3 = a_length3;
	_vala_b = (free (_vala_b), NULL);
	_vala_b = _tmp4_;
	_vala_b_length1 = _tmp4__length1;
	_vala_b_length2 = _tmp4__length2;
	_vala_b_length3 = _tmp4__length3;
	_tmp5_ = (a != NULL) ? _vala_array_dup10 (a, (a_length1 * a_length2) * a_length3) : a;
	_tmp5__length1 = a_length1;
	_tmp5__length2 = a_length2;
	_tmp5__length3 = a_length3;
	_tmp6_ = _tmp5_;
	_tmp6__length1 = _tmp5__length1;
	_tmp6__length2 = _tmp5__length2;
	_tmp6__length3 = _tmp5__length3;
	if (result_length1) {
		*result_length1 = _tmp6__length1;
	}
	if (result_length2) {
		*result_length2 = _tmp6__length2;
	}
	if (result_length3) {
		*result_length3 = _tmp6__length3;
	}
	result = _tmp6_;
	if (b) {
		*b = _vala_b;
	} else {
		_vala_b = (free (_vala_b), NULL);
	}
	if (b_length1) {
		*b_length1 = _vala_b_length1;
	}
	if (b_length2) {
		*b_length2 = _vala_b_length2;
	}
	if (b_length3) {
		*b_length3 = _vala_b_length3;
	}
	return result;
}

void
test_nd_array (void)
{
	int* a = NULL;
	int* _tmp0_;
	int a_length1;
	int a_length2;
	int a_length3;
	int _tmp1_;
	int* b = NULL;
	int b_length1 = 0;
	int b_length2 = 0;
	int b_length3 = 0;
	int* c = NULL;
	int c_length1 = 0;
	int c_length2 = 0;
	int c_length3 = 0;
	int* _tmp2_ = NULL;
	int _tmp3_ = 0;
	int _tmp4_ = 0;
	int _tmp5_ = 0;
	int _tmp6_ = 0;
	int _tmp7_ = 0;
	int _tmp8_ = 0;
	int* _tmp9_;
	int _tmp10_;
	int _tmp11_;
	int _tmp12_;
	int _tmp13_;
	int _tmp14_;
	int _tmp15_;
	int _tmp16_;
	int _tmp17_;
	char** s = NULL;
	char* _tmp18_;
	char* _tmp19_;
	char* _tmp20_;
	char* _tmp21_;
	char* _tmp22_;
	char* _tmp23_;
	char** _tmp24_;
	int s_length1;
	int s_length2;
	int s_length3;
	const char* _tmp25_;
	_tmp0_ = calloc ((2 * 2) * 2, sizeof (int));
	_tmp0_[0] = 1;
	_tmp0_[1] = 2;
	_tmp0_[2] = 3;
	_tmp0_[3] = 4;
	_tmp0_[4] = 5;
	_tmp0_[5] = 6;
	_tmp0_[6] = 7;
	_tmp0_[7] = 8;
	a = _tmp0_;
	a_length1 = 2;
	a_length2 = 2;
	a_length3 = 2;
	_tmp1_ = a[(((1 * a_length2) + 0) * a_length3) + 1];
	assert (_tmp1_ == 6);
	_tmp9_ = nd_array_pass (a, (int) a_length1, (int) a_length2, (int) a_length3, &_tmp2_, &_tmp3_, &_tmp4_, &_tmp5_, &_tmp6_, &_tmp7_, &_tmp8_);
	b = (free (b), NULL);
	b = _tmp2_;
	b_length1 = _tmp3_;
	b_length2 = _tmp4_;
	b_length3 = _tmp5_;
	c = (free (c), NULL);
	c = _tmp9_;
	c_length1 = _tmp6_;
	c_length2 = _tmp7_;
	c_length3 = _tmp8_;
	_tmp10_ = b_length1;
	assert (_tmp10_ == 2);
	_tmp11_ = b_length2;
	assert (_tmp11_ == 2);
	_tmp12_ = b_length3;
	assert (_tmp12_ == 2);
	_tmp13_ = b[(((0 * b_length2) + 1) * b_length3) + 0];
	assert (_tmp13_ == 3);
	_tmp14_ = c_length1;
	assert (_tmp14_ == 2);
	_tmp15_ = c_length2;
	assert (_tmp15_ == 2);
	_tmp16_ = c_length3;
	assert (_tmp16_ == 2);
	_tmp17_ = c[(((0 * c_length2) + 1) * c_length3) + 1];
	assert (_tmp17_ == 4);
	_tmp18_ = _strdup0 ("a");
	_tmp19_ = _strdup0 ("b");
	_tmp20_ = _strdup0 ("c");
	_tmp21_ = _strdup0 ("d");
	_tmp22_ = _strdup0 ("e");
	_tmp23_ = _strdup0 ("f");
	_tmp24_ = calloc (((1 * 2) * 3) + 1, sizeof (char*));
	_tmp24_[0] = _tmp18_;
	_tmp24_[1] = _tmp19_;
	_tmp24_[2] = _tmp20_;
	_tmp24_[3] = _tmp21_;
	_tmp24_[4] = _tmp22_;
	_tmp24_[5] = _tmp23_;
	s = _tmp24_;
	s_length1 = 1;
	s_length2 = 2;
	s_length3 = 3;
	_tmp25_ = s[(((0 * s_length2) + 0) * s_length3) + 2];
	assert (_strcmp0 (_tmp25_, "c") == 0);
	s = (_vala_array_free (s, (s_length1 * s_length2) * s_length3, (ValaDestroyNotify) free), NULL);
	c = (free (c), NULL);
	b = (free (b), NULL);
	a = (free (a), NULL);
}

int
simple_func (void)
{
	int result;
	result = 0;
	return result;
}

static void
_vala_array_add2 (SimpleFunc* * array,
                  int* length,
                  int* size,
                  SimpleFunc value)
{
	if ((*length) == (*size)) {
		*size = (*size) ? (2 * (*size)) : 4;
		*array = realloc (*array, (*size) * sizeof (SimpleFunc));
	}
	(*array)[(*length)++] = value;
}

static bool
_vala_simple_func_array_contains (SimpleFunc * stack,
                                  ssize_t stack_length,
                                  const SimpleFunc needle)
{
	ssize_t i;
	for (i = 0; i < stack_length; i++) {
		if (needle == stack[i]) {
			return true;
		}
	}
	return false;
}

void
test_delegate_array (void)
{
	SimpleFunc* a = NULL;
	SimpleFunc* _tmp0_;
	int a_length1;
	int _a_size_;
	SimpleFunc* _tmp1_;
	int _tmp1__length1;
	SimpleFunc* _tmp2_;
	int _tmp2__length1;
	SimpleFunc* _tmp3_;
	int _tmp3__length1;
	_tmp0_ = calloc (0, sizeof (SimpleFunc));
	a = _tmp0_;
	a_length1 = 0;
	_a_size_ = a_length1;
	_tmp1_ = simple_delegates;
	_tmp1__length1 = simple_delegates_length1;
	simple_delegates = NULL;
	simple_delegates_length1 = 0;
	a = (free (a), NULL);
	a = _tmp1_;
	a_length1 = _tmp1__length1;
	_a_size_ = a_length1;
	_vala_array_add2 (&a, &a_length1, &_a_size_, (SimpleFunc) simple_func);
	_tmp2_ = a;
	_tmp2__length1 = a_length1;
	assert (_tmp2__length1 == 1);
	_tmp3_ = a;
	_tmp3__length1 = a_length1;
	assert (_vala_simple_func_array_contains (_tmp3_, _tmp3__length1, simple_func));
	a = (free (a), NULL);
}

static void
_vala_array_add3 (void** * array,
                  int* length,
                  int* size,
                  void* value)
{
	if ((*length) == (*size)) {
		*size = (*size) ? (2 * (*size)) : 4;
		*array = realloc (*array, (*size) * sizeof (void*));
	}
	(*array)[(*length)++] = value;
}

static void
_vala_array_add4 (void** * array,
                  int* length,
                  int* size,
                  void* value)
{
	if ((*length) == (*size)) {
		*size = (*size) ? (2 * (*size)) : 4;
		*array = realloc (*array, (*size) * sizeof (void*));
	}
	(*array)[(*length)++] = value;
}

static bool
_vala_valavoid_array_contains (void* * stack,
                               ssize_t stack_length,
                               const void* needle)
{
	ssize_t i;
	for (i = 0; i < stack_length; i++) {
		if (needle == stack[i]) {
			return true;
		}
	}
	return false;
}

void
test_void_array (void)
{
	void** a = NULL;
	void** _tmp0_;
	int a_length1;
	int _a_size_;
	void** _tmp1_;
	int _tmp1__length1;
	void** _tmp2_;
	int _tmp2__length1;
	_tmp0_ = calloc (0, sizeof (void*));
	a = _tmp0_;
	a_length1 = 0;
	_a_size_ = a_length1;
	_vala_array_add3 (&a, &a_length1, &_a_size_, (void*) NULL);
	_vala_array_add4 (&a, &a_length1, &_a_size_, (void*) NULL);
	_tmp1_ = a;
	_tmp1__length1 = a_length1;
	assert (_tmp1__length1 == 2);
	_tmp2_ = a;
	_tmp2__length1 = a_length1;
	assert (_vala_valavoid_array_contains (_tmp2_, _tmp2__length1, (void*) NULL));
	a = (free (a), NULL);
}

static int*
_vala_array_dup11 (int* self,
                   ssize_t length)
{
	if (length > 0) {
		int* result;
		result = calloc (length, sizeof (int));
		memcpy (result, self, length * sizeof (int));
		return result;
	}
	return NULL;
}

void
test_explicit_copying (void)
{
	int* a0 = NULL;
	int* _tmp0_;
	int a0_length1;
	int _a0_size_;
	int* a1 = NULL;
	int* _tmp1_;
	int _tmp1__length1;
	int a1_length1;
	int _a1_size_;
	int _tmp2_;
	int _tmp3_;
	_tmp0_ = calloc (3, sizeof (int));
	_tmp0_[0] = 1;
	_tmp0_[1] = 2;
	_tmp0_[2] = 3;
	a0 = _tmp0_;
	a0_length1 = 3;
	_a0_size_ = a0_length1;
	_tmp1_ = (a0 != NULL) ? _vala_array_dup11 (a0, a0_length1) : a0;
	_tmp1__length1 = a0_length1;
	a1 = _tmp1_;
	a1_length1 = _tmp1__length1;
	_a1_size_ = a1_length1;
	assert (a1_length1 == 3);
	_tmp2_ = a0[1];
	_tmp3_ = a1[1];
	assert (_tmp2_ == _tmp3_);
	a1 = (free (a1), NULL);
	a0 = (free (a0), NULL);
}

void
test_array_move (void)
{
	int* a = NULL;
	int* _tmp0_;
	int a_length1;
	int _a_size_;
	int _tmp1_;
	int _tmp2_;
	_tmp0_ = calloc (9, sizeof (int));
	_tmp0_[0] = 1;
	_tmp0_[1] = 2;
	_tmp0_[2] = 3;
	_tmp0_[3] = 4;
	_tmp0_[4] = 5;
	_tmp0_[5] = 6;
	_tmp0_[6] = 7;
	_tmp0_[7] = 8;
	_tmp0_[8] = 9;
	a = _tmp0_;
	a_length1 = 9;
	_a_size_ = a_length1;
	_tmp1_ = a[4];
	assert (_tmp1_ == 5);
	_vala_array_move (a, sizeof (int), 4, 0, 5);
	_tmp2_ = a[4];
	assert (_tmp2_ == 9);
	a = (free (a), NULL);
}

void
test_array_resize (void)
{
	int* a = NULL;
	int* _tmp0_;
	int a_length1;
	int _a_size_;
	int _tmp1_;
	int _tmp2_;
	int _tmp3_;
	_tmp0_ = calloc (9, sizeof (int));
	_tmp0_[0] = 1;
	_tmp0_[1] = 2;
	_tmp0_[2] = 3;
	_tmp0_[3] = 4;
	_tmp0_[4] = 5;
	_tmp0_[5] = 6;
	_tmp0_[6] = 7;
	_tmp0_[7] = 8;
	_tmp0_[8] = 9;
	a = _tmp0_;
	a_length1 = 9;
	_a_size_ = a_length1;
	_tmp1_ = a[a_length1 - 1];
	assert (_tmp1_ == 9);
	_tmp2_ = 5;
	a = realloc (a, sizeof (int) * 5);
	(_tmp2_ > a_length1) ? memset (a + a_length1, 0, sizeof (int) * (_tmp2_ - a_length1)) : NULL;
	a_length1 = _tmp2_;
	_a_size_ = _tmp2_;
	_tmp3_ = a[a_length1 - 1];
	assert (_tmp3_ == 5);
	a = (free (a), NULL);
}

Foo*
foo_dup (const Foo* self)
{
	Foo* dup;
	dup = calloc (1, sizeof (Foo));
	memcpy (dup, self, sizeof (Foo));
	return dup;
}

void
foo_free (Foo* self)
{
	free (self);
}

Bar*
bar_dup (const Bar* self)
{
	Bar* dup;
	dup = calloc (1, sizeof (Bar));
	memcpy (dup, self, sizeof (Bar));
	return dup;
}

void
bar_free (Bar* self)
{
	free (self);
}

Manam*
manam_dup (const Manam* self)
{
	Manam* dup;
	dup = calloc (1, sizeof (Manam));
	memcpy (dup, self, sizeof (Manam));
	return dup;
}

void
manam_free (Manam* self)
{
	free (self);
}

static bool
_bar_equal (const Bar * s1,
            const Bar * s2)
{
	if (s1 == s2) {
		return true;
	}
	if (s1 == NULL) {
		return false;
	}
	if (s2 == NULL) {
		return false;
	}
	if (s1->bar != s2->bar) {
		return false;
	}
	return true;
}

static bool
_vala_bar_array_contains (Bar * stack,
                          ssize_t stack_length,
                          const Bar * needle)
{
	ssize_t i;
	for (i = 0; i < stack_length; i++) {
		if (_bar_equal (&stack[i], needle) == true) {
			return true;
		}
	}
	return false;
}

static void*
_manam_dup0 (void* self)
{
	return self ? manam_dup (self) : NULL;
}

void
test_struct_array (void)
{
	Foo _tmp0_;
	Bar b = {0};
	Bar _tmp1_ = {0};
	Bar* bar = NULL;
	Bar* _tmp2_;
	int bar_length1;
	int _bar_size_;
	Bar _tmp3_;
	Bar _tmp4_;
	Manam* manam = NULL;
	Manam _tmp5_ = {0};
	Manam* _tmp6_;
	Manam* manam_copy = NULL;
	Manam* _tmp7_;
	_tmp0_ = FOO_ARRAY_CONST[0];
	assert (_tmp0_.bar == 42);
	_tmp1_.bar = 4711;
	b = _tmp1_;
	_tmp2_ = calloc (23, sizeof (Bar));
	bar = _tmp2_;
	bar_length1 = 23;
	_bar_size_ = bar_length1;
	_tmp3_ = b;
	bar[7] = _tmp3_;
	_tmp4_ = b;
	assert (_vala_bar_array_contains (bar, bar_length1, &_tmp4_));
	_tmp6_ = _manam_dup0 (&_tmp5_);
	manam = _tmp6_;
	_tmp7_ = _manam_dup0 (manam);
	manam_copy = _tmp7_;
	_manam_free0 (manam_copy);
	_manam_free0 (manam);
	bar = (free (bar), NULL);
}

void
give_fixed_array (int* i[3])
{
	int _vala_i[3] = {0};
	if (i) {
		*i = _vala_i;
	}
}

void
take_fixed_array (int i[3])
{
	int _tmp0_;
	assert (3 == 3);
	_tmp0_ = i[1];
	assert (_tmp0_ == 2);
}

void
change_fixed_array (int* i[3])
{
	int _tmp0_;
	assert (3 == 3);
	_tmp0_ = (*i)[1];
	assert (_tmp0_ == 7);
	(*i)[1] = 9;
}

void
test_fixed_array (void)
{
	int* i = NULL;
	int* _tmp0_;
	int i_length1;
	int _i_size_;
	int* k = NULL;
	int* _tmp1_;
	int k_length1;
	int _k_size_;
	int* _tmp2_;
	int _tmp2__length1;
	int* _tmp3_;
	int _tmp3__length1;
	int _tmp4_;
	int* j = NULL;
	int j_length1 = 0;
	int _j_size_ = 0;
	_tmp0_ = calloc (4, sizeof (int));
	_tmp0_[0] = 1;
	_tmp0_[1] = 2;
	_tmp0_[2] = 3;
	_tmp0_[3] = 4;
	i = _tmp0_;
	i_length1 = 4;
	_i_size_ = i_length1;
	assert (i_length1 == 4);
	take_fixed_array (i);
	_tmp1_ = calloc (3, sizeof (int));
	_tmp1_[0] = 6;
	_tmp1_[1] = 7;
	_tmp1_[2] = 8;
	k = _tmp1_;
	k_length1 = 3;
	_k_size_ = k_length1;
	change_fixed_array (&k);
	_tmp2_ = k;
	_tmp2__length1 = k_length1;
	assert (_tmp2__length1 == 3);
	_tmp3_ = k;
	_tmp3__length1 = k_length1;
	_tmp4_ = _tmp3_[1];
	assert (_tmp4_ == 9);
	j = (free (j), NULL);
	k = (free (k), NULL);
	i = (free (i), NULL);
}

static void
_vala_main (void)
{
	test_integer_array ();
	test_string_array ();
	test_array_pass ();
	test_static_array ();
	test_reference_transfer ();
	test_length_assignment ();
	test_inline_array ();
	test_nd_array ();
	test_delegate_array ();
	test_void_array ();
	test_explicit_copying ();
	test_array_move ();
	test_array_resize ();
	test_struct_array ();
	test_fixed_array ();
}

int
main (int argc,
      char ** argv)
{
	_vala_main ();
	return 0;
}

static void
_vala_array_destroy (void* array,
                     ssize_t array_length,
                     ValaDestroyNotify destroy_func)
{
	if ((array != NULL) && (destroy_func != NULL)) {
		ssize_t i;
		for (i = 0; i < array_length; i = i + 1) {
			if (((void**) array)[i] != NULL) {
				destroy_func (((void**) array)[i]);
			}
		}
	}
}

static void
_vala_array_free (void* array,
                  ssize_t array_length,
                  ValaDestroyNotify destroy_func)
{
	_vala_array_destroy (array, array_length, destroy_func);
	free (array);
}

static void
_vala_array_move (void* array,
                  size_t element_size,
                  ssize_t src,
                  ssize_t dest,
                  ssize_t length)
{
	memmove (((char*) array) + (dest * element_size), ((char*) array) + (src * element_size), length * element_size);
	if ((src < dest) && ((src + length) > dest)) {
		memset (((char*) array) + (src * element_size), 0, (dest - src) * element_size);
	} else if ((src > dest) && (src < (dest + length))) {
		memset (((char*) array) + ((dest + length) * element_size), 0, (src - dest) * element_size);
	} else if (src != dest) {
		memset (((char*) array) + (src * element_size), 0, length * element_size);
	}
}

static ssize_t
_vala_array_length (void* array)
{
	ssize_t length;
	length = 0;
	if (array) {
		while (((void**) array)[length]) {
			length++;
		}
	}
	return length;
}

