Esempio n. 1
0
/* resizeDynamicArray: resize array, if needed */
void resizeDynamicArray( Array *array )
{
    int         i, oldSize, newSize;

    oldSize = array->upper[0];

    /* out of room? */
    if (array->lower[0] >= oldSize-1) {

        /* double space */
        newSize = oldSize * 2;

        array->data.cell = (ArrayCell *)eRealloc(
            (void *)(array->data.cell),
            newSize * sizeof(ArrayCell) );

        /* initialize new area */
        for ( i = oldSize; i < newSize; i++ ) {
            array->data.cell[i].key = NULL;
            array->data.cell[i].data.datatype = DATA_UNDEFINED;
        }

        /* set size */
        array->upper[0] = newSize;

    }
}
Esempio n. 2
0
/* buildKey: build key from stack data */
char *buildKey( Array *array, Symbol *s )
{
    int     args, i, keylen;
    char    *index, *buffer;

/* FIX: should eventually just realloc when size is exceeded */

    /* create a buffer */
    buffer = (char *)eMalloc( 256 );
    buffer[0] = '\0';

    /* check arg count */
    args = (int)popNumber();

    /* there must be at least one index */
    if (args == 0) {
        ePrintf( Runtime, "Array %s[]x expects at least 1 index, not 0" );
    }

    /* build the key backwards, for speed */
    keylen = 0;
    for ( i = 1; i <= args; i++ ) {

        /* get index */
        index = popString();

        /* make sure it fits in the buffer */
        keylen += strlen( index );
        if (keylen >= 256) {
            ePrintf( Runtime, "Array key exceeds 256 characters" );
        }

        /* append to key */
        strcat( buffer, index );

	/*
	ivanixcu: debug
	need free allocated memory of index!
	printf("ivanixdebug: freeing (index) (%d)\n", *index );
	*/
	if (*index != '\0' ){
	    eFree( index );
	}

        if (i < args) {
            /* add delimiter */
            keylen += 1;
            if (keylen >= 256) {
                ePrintf( Runtime, "Array key exceeds 256 characters" );
            }
            /* replace with ASCII 34 eventually */
            strcat( buffer, "," );
        }
    }

    /* resize the buffer */
    return (char *)eRealloc( buffer, keylen+1 );
}
Esempio n. 3
0
extern NestingLevel * nestingLevelsPush(NestingLevels *nls, int corkIndex)
{
	NestingLevel *nl = NULL;

	if (nls->n >= nls->allocated)
	{
		nls->allocated++;
		nls->levels = eRealloc(nls->levels,
				       nls->allocated * NL_SIZE (nls));
	}
	nl = NL_NTH(nls, nls->n);
	nls->n++;

	nl->corkIndex = corkIndex;
	return nl;
}