コード例 #1
0
ファイル: parr.c プロジェクト: hsk81/picocoin
bool parr_resize(parr *pa, size_t newsz)
{
	unsigned int i;

	// same size
	if (newsz == pa->len)
		return true;

	// truncate
	else if (newsz < pa->len) {
		size_t del_count = pa->len - newsz;

		for (i = (pa->len - del_count); i < pa->len; i++) {
			if (pa->elem_free_f)
				pa->elem_free_f(pa->data[i]);
			pa->data[i] = NULL;
		}

		pa->len = newsz;
		return true;
	}

	// last possibility: grow
	if (!parr_grow(pa, newsz))
		return false;

	// set new elements to NULL
	for (i = pa->len; i < newsz; i++)
		pa->data[i] = NULL;

	pa->len = newsz;
	return true;
}
コード例 #2
0
ファイル: parr.c プロジェクト: hsk81/picocoin
bool parr_add(parr *pa, void *data)
{
	if (pa->len == pa->alloc)
		if (!parr_grow(pa, pa->len + 1))
			return false;

	pa->data[pa->len] = data;
	pa->len++;
	return true;
}
コード例 #3
0
ファイル: array.c プロジェクト: 1761461582/NoteItIOS
/* parr_insert • inserting nb elements before the nth one */
int
parr_insert(struct parray *parr, int nb, int n) {
	char *src, *dst;
	size_t len, i;
	if (!parr || nb <= 0 || n < 0
	|| !parr_grow(parr, parr->size + nb))
		return 0;
	if (n < parr->size) {
		src = (void *)parr->item;
		src += n * sizeof (void *);
		dst = src + nb * sizeof (void *);
		len = (parr->size - n) * sizeof (void *);
		memmove(dst, src, len);
		for (i = 0; i < (size_t) nb; ++i)
			parr->item[n + i] = 0; }
	parr->size += nb;
	return 1; }
コード例 #4
0
ファイル: array.c プロジェクト: 1761461582/NoteItIOS
/* parr_push • pushes a pointer at the end of the array (= append) */
int
parr_push(struct parray *arr, void *i) {
	if (!parr_grow(arr, arr->size + 1)) return 0;
	arr->item[arr->size] = i;
	arr->size += 1;
	return 1; }