Fri Oct 25 22:15:59 CEST 2013

Documentazione Supplier 0.2

introduzione

Supplier è una libreria per la gestione della memoria.

compilazione

Viene fornito un makefile per la compilazione. Su una macchina a 64 bit è necessario settare CFLAGS="-fPIC", se si desidera invece crosscompilare a 32 bit è necessario settare CFLAGS="-m32" e LDFLAGS="-m elf_i386". Per eseguire il programma di test è necessario poi settare LD_LIBRARY_PATH.

Anche se non viene fornito supporto dovrebbe funzionare sotto Windows.

supplier

Dopo aver creato un supplier è possibile sostituire le malloc con chiamate a s_supply. Questo permette di non dovere liberare la memoria che viene poi rilasciata quando il supplier viene distrutto.

Naturalmente è possibile avere diversi supplier attivi contemporaneamente.

void *supplier;
char *memory;
supplier = s_create(0);
if (!supplier)
    exit(-1);
memory = (char *) s_supply(supplier, 64);
if (!memory)
    exit(-1);
strcpy(memory, "some text");
puts(memory);
s_destroy(supplier);

array dinamico

Si tratta di un array dinamico (simile al Vector Java) i cui elementi sono generici puntatori. Si basa sul supplier e non deve quindi essere distrutto esplicitamente.

void *supplier;
void *v;
int i;
void *v2;
supplier = s_create(0);
if (!supplier)
    exit(-1);
v = v_new(supplier, 0);
if (!v)
    exit(-1);
if (!v_add(v, "an element"))
    exit(-1);
puts((char *) v_remove(v, 0));
for (i = 0; i<10; ++i) {
    v2 = v_new(supplier, 0);
    if (!v2)
        exit(-1);
    if (!v_add(v, v2))
        exit(-1);
}
s_destroy(supplier);

buffer

Il buffer è un array associativo (simile alle Map Java o ai dizionari Python) in cui chiavi e valori sono solo stringhe. Si basa sul supplier e non deve quindi essere distrutto esplicitamente.

Generando chiavi progressive può essere utilizzato per la costruzione di stringhe particolarmente lunghe (come con lo StringBuffer Java o con il metodo join delle stringhe python).

Sono inoltre state realizzate alcune funzioni di utilità per le stringhe. Sono disponibili buffer_strstartswith (simile al metodo startsWith della String Java, al metodo startswith delle stringhe Python o alla funzione starts-with XSL) e buffer_strendswith (simile al metodo endsWith della String Java o al metodo endswith delle stringhe Python). Si basano sul supplier buffer_strclone (utile in quando le stringhe C non sono immutabili), buffer_strconcat (equivalente alla somma nei linguaggi Java e Python o alla funzione concat XSL) e buffer_strsubstring (simile al metodo substring della String Java o alla funzione substring XSL). Non sono invece presenti funzioni per ricercare una sottostringa (la strstr è sufficiente) o per estrarre una sottostringa non limitata in lunghezza (basta utilizzare string+begin eventualmente clonandola se necessario). La funzione buffer_stranotherkey genera sempre una stringa maggiore (confrontandole con strcmp) di quella di partenza.

void *supplier;
void *buffer;
char *key;
supplier = s_create(0);
if (!supplier)
    exit(-1);
buffer = buffer_new(supplier);
if (!buffer)
    exit(-1);
key = "";
if (!buffer_put(buffer, key, "first string"))
    exit(-1);
key = buffer_stranotherkey(supplier, key);
if (!buffer_put(buffer, key, "second string"))
    exit(-1);
if (!buffer_put(buffer, key, " and more"))
    exit(-1);
puts(buffer_strjoin(buffer));
s_destroy(supplier);


Posted by athos | Permanent link | File under: supplier