Le liste sono una serie di elementi (stringhe o strutture) concatenati tra loro in modo dinamico.
Sono un modo
classico di memorizzare dati quando non sia ha un'idea di quanto occuperanno.
Il sistema è molto veloce, ma impegnativo a livello di occupazione di memoria da parte dell'OS.
Stringhe
Un modo semplice di usare una lista è il seguente:
EH_LST lstFld=lstNew();
CHAR * psz;
int i;
for (i=0; i<rsSet->iFields; i++)
{
psz=strEncode(rsSet->myRow[i],SE_CFORMAT,NULL);
lstPushf(lstFld,"\"%s\":\"%s\"",rsSet->arFields[i].name,psz);
ehFree(psz);
}
psz=lstToString(lstFld,",","{","}");
lstDestroy(lstFld);
Strutture
Esempio con una struttura.
// Creazione
_l.lstMovi=lstCreate(sizeof(S_MOVIS));
.
.
// Riempimento
_(sMovi);
sMovi.idCode=sql_int(rsSet,"IDCODE");
sMovi.idProd=idProd;
strcpy(sMovi.szDate,sql_ptr(rsSet,"JM_DATEINS"));
sMovi.idFigura=sql_int(rsSet,"IDFIGURA");
strcpy(sMovi.szEan,pszEan);
sMovi.iQta=(INT) dQta;
lstPush(_l.lstMovi,&sMovi);
.
.
// Scansione
S_MOVIS * psMovi;
SQL_RS rsFig;
for (lstLoop(_l.lstMovi,psMovi)) {
printf("%d",psMovi->idCode);
}
Se la lista contiene strutture che a loro volta contengono puntatori a zone di memoria allocata, sarà necessario creare una funzione per liberare le risorse, lstDestroy non può occuparsi di liberare la memoria allocata all'interno di una struttura. Vicevera usando le stringhe non è necessario liberare la memoria allocata