Exemplo n.º 1
0
/** 
 * C++ nezna nic jako realloc(), takze se musi misto toho naalokovat nove pole
 * prekopirovat obsah a uvolnit stare pole. 
 * realloc() zkusi zvetsit pamet na miste v heapu, kde se nachazi. Lze pouze
 * pokud v heapu pamet za pointerem je volna. Pokud to nejde hleda jine misto a
 * pote tam nakopiruje puvodni. => realloc je efektivnejsi nez free+malloc.
 * Kdyz realloc dostane NULL jako prvni parametru funguje jako malloc. */ 
void stack_push(stack *s, void *elem_addr) {
	if (s->logical_length == s->allocated_length) {
		StackGrow(s);
	}
	/* V nasledujicim copy funkci musim pretypovat s->elem na (char*) jinak 
	   kompilator by mohle delat blbe pointer aritmetiku... a kvuli citelnosti */
	memcpy(((char *)s->elem) + (s->logical_length * s->elem_size), elem_addr, s->elem_size); 
	s->logical_length++;
}
Exemplo n.º 2
0
void
StackPush(Stack *s, void *elemAddr)
{
	if (s->logLength == s->allocLength)
		StackGrow(s);

	void *target = (char *)s->elems + s->logLength * s->elemSize;
	memcpy(target, elemAddr, s->elemSize);
	s->logLength++;
}