ut0vec.ic 1.56 KB
Newer Older
1 2 3 4 5 6 7
/********************************************************************
Get number of elements in vector. */
UNIV_INLINE
ulint
ib_vector_size(
/*===========*/
				/* out: number of elements in vector */
sunny's avatar
sunny committed
8
	const ib_vector_t*	vec)	/* in: vector */
9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
{
	return(vec->used);
}

/********************************************************************
Get n'th element. */
UNIV_INLINE
void*
ib_vector_get(
/*==========*/
				/* out: n'th element */
	ib_vector_t*	vec,	/* in: vector */
	ulint		n)	/* in: element index to get */
{
	ut_a(n < vec->used);

	return(vec->data[n]);
}
sunny's avatar
sunny committed
27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70

/********************************************************************
Remove the last element from the vector. */
UNIV_INLINE
void*
ib_vector_pop(
/*==========*/
				/* out: last vector element */
	ib_vector_t*    vec)    /* in/out: vector */
{
	void*           elem;

	ut_a(vec->used > 0);
	--vec->used;
	elem = vec->data[vec->used];

	ut_d(vec->data[vec->used] = NULL);
	UNIV_MEM_INVALID(&vec->data[vec->used], sizeof(*vec->data));

	return(elem);
}

/********************************************************************
Free the underlying heap of the vector. Note that vec is invalid
after this call. */
UNIV_INLINE
void
ib_vector_free(
/*===========*/
	ib_vector_t*    vec)    /* in, own: vector */
{
	mem_heap_free(vec->heap);
}

/********************************************************************
Test whether a vector is empty or not. */
UNIV_INLINE
ibool
ib_vector_is_empty(
/*===============*/			/* out: TRUE if empty else FALSE */
	const ib_vector_t*	vec)	/* in vector to test */
{
	return(ib_vector_size(vec) == 0);
}