MLib Reference Manual | ||||
---|---|---|---|---|
Top | Description |
#include <mlib.h> struct MICollection; #define M_ICOLLECTION (data) #define M_ICOLLECTION_DATA (icollection, type, id) #define M_ICOLLECTION_PRIMI (icollection, type, id) #define M_ICOLLECTION_data (_data) #define M_ICOLLECTION_user (data) MICollection * m_icollection_new (MIdOffSet offset
,msize s_type
,MInizialize inizialize
,MDestroy destroy
); MStatus m_icollection_free (MICollection *icollection
); MStatus m_icollection_full_free (MICollection *icollection
); MId m_icollection_insert_element (MICollection *icollection
,mpointer data
); MId m_icollection_remove_element (MICollection *icollection
,MId id
); #define m_c_icollection_insert_element (icollection, data) #define m_c_icollection_remove_element (icollection, id)
Attraverso le strutture MICollection è possibile gestire blocchi di dati archiviati, utilizzando invece che i puntarori, degli identificativi univoci di tipo MId.
Ogni id di tipo MId ottenuto dopo l'inserimento di un blocco di dati nel MICollection rappresenta l'esatta posizione del dato.
Potendo eliminare i dati nell'archivio, è evidente che ogni nuovo id potrà non corrispondere alla posizione successiva del dato precendente poichè l' MICollection riutilizza le posizioni vuote prima di crearne di nuove.
Example 17. Using a MICollection.
#include <mlib.h> #include <glib/gprintf.h> typedef struct _carattere { mchar lettera; } carattere; MStatus inizializza ( mpointer _data, mpointer _parola ) { if ( (_data == NULL) || (_parola == NULL) ) { return MERROR; } carattere* data = (carattere*)_data; mchars parola = (mchars)_parola; data->lettera = 'K'; g_printf ( "\n --- %s ---\n", parola ); return MCORRECT; } MStatus inizializza2 ( mpointer _data, mpointer _null ) { if ( (_data == NULL) ) { return MERROR; } mchar* data = (mchar*)_data; m_warning_disable_var ( _null ); (*data) = 'J'; return MCORRECT; } int m_main ( argc, argv ) { m_main_init ( argc, argv ); MICollection* icollection = m_icollection_new ( 10, sizeof(carattere), inizializza, NULL ); MId id = m_icollection_insert_element ( icollection, "ciao" ); g_printf ( "\n len: %d; \n", M_IDLIST_len (icollection) ); g_printf ( "\n data: %p; \n", M_ICOLLECTION_data (icollection) ); g_printf ( "\n c: %c; \n", M_ICOLLECTION_DATA(icollection,carattere,id)->lettera ); M_ICOLLECTION_DATA(icollection,carattere,id)->lettera = 'X'; g_printf ( "\n c: %c; \n", M_ICOLLECTION_DATA(icollection,carattere,id)->lettera ); m_icollection_free ( icollection ); MICollection* icollection2 = m_icollection_new ( 10, sizeof(mchar), inizializza2, NULL ); MId id2 = m_icollection_insert_element ( icollection2, NULL ); g_printf ( "\n len: %d; \n", M_IDLIST_len (icollection2) ); g_printf ( "\n data: %p; \n", M_ICOLLECTION_data (icollection2) ); g_printf ( "\n c: %c; \n", M_ICOLLECTION_PRIMI(icollection2,mchar,id2) ); M_ICOLLECTION_PRIMI(icollection2,mchar,id) = 'Y'; g_printf ( "\n c: %c; \n", M_ICOLLECTION_PRIMI(icollection2,mchar,id) ); m_icollection_free ( icollection2 ); return MCORRECT; }
Example 18. Using a MICollection with pointer.
#include <mlib.h> #include <glib/gprintf.h> MStatus init ( mpointer _data, mpointer _car ) { if ( (_data == NULL) ) { return MERROR; } mchar** data = (mchar**)_data; mchar* car = (mchar*)_car; (*data) = car; return MCORRECT; } int m_main ( argc, argv ) { m_main_init ( argc, argv ); mchar CAR = 'X'; MICollection* icollection = m_icollection_new ( 10, sizeof(mchar*), init, NULL ); MId id = m_icollection_insert_element ( icollection, &CAR ); g_printf ( "\n len: %d; \n", M_IDLIST_len (icollection) ); g_printf ( "\n data: %p; \n", M_ICOLLECTION_data (icollection) ); g_printf ( "\n c: %c; \n", *M_ICOLLECTION_PRIMI(icollection,mchar*,id) ); m_icollection_free ( icollection ); return MCORRECT; }
struct MICollection { mpointer* data; };
contiene una lista di puntatori a blocchi di dati indefiniti
Se utilizzata in una struttura non e' necessario che questa contenga una MDefine poiche' gia' presente nella MICollection.
Questa è una struttura derivata ed è diretta evoluzione della struttura MIdList, della quale eredita le proprietà.
Attenzione: non è possibile utilizzare questa struttura come se fosse una MIdList!
mpointer * |
array di puntatori - only Read |
#define M_ICOLLECTION(data) ds_CAST (MICollection*,data)
stability
: Unstable
Provvede al casting di una struttura data
ritornando una struttura di tipo MICollection
|
struttura derivata |
#define M_ICOLLECTION_DATA(icollection,type,id) ds_ARRAY_DATA(icollection,type,id,data)
ritorna la posizione di un blocco di dati archiviato in un MICollection castando e referenziando l'array.
Utilizzato nei casi in cui l' MICollection archivi dati struttura (struct)
|
un MICollection valido |
|
tipo di dati utilizzato nella MICollection |
|
identificativo del blocco di dati archiviato |
#define M_ICOLLECTION_PRIMI(icollection,type,id) ds_ARRAY_PRIMI(icollection,type,id,data)
ritorna la posizione di un dato archiviato in un MICollection castando e referenziando l'array.
Utilizzato nei casi in cui l' MICollection archivi dati primitivi (int,char,etc.)
|
un MICollection valido |
|
tipo di dati utilizzato nella MICollection |
|
identificativo del dato archiviato |
#define M_ICOLLECTION_data(_data) ds_GET_PROPERTY(M_ICOLLECTION(_data),data)
stability
: Unstable
Provvede al casting di un dato data
ritornando la proprietà "data"
|
una struttura derivata |
#define M_ICOLLECTION_user(data) ds_GET_PROPERTY(M_ICOLLECTION(data),user)
stability
: Unstable
Provvede al casting di un dato data
ritornando la proprietà "user"
|
una struttura derivata |
MICollection * m_icollection_new (MIdOffSet offset
,msize s_type
,MInizialize inizialize
,MDestroy destroy
);
Crea un nuovo MICollection.
|
quantita' massima di blocchi di dati inseribili |
|
grandezza in byte di un tipo di dati personale |
|
funzione da chiamare dopo l'inserimento di un dato |
|
funzione da chiamare dopo la rimozione di un dato |
Returns : |
un nuovo MICollection o NULL in caso di errore.
|
Since 0.0.2
MStatus m_icollection_free (MICollection *icollection
);
stability
: Unstable
Libera la memoria allocata per una MICollection. Nel caso non fossero prima stati rimossi tutti i dati dalla collezione, la memoria allocata per questi non verrà liberata.
|
indirizzo ad una struttura derivata allocata di tipo MICollection |
Returns : |
MCORRECT o MERROR in caso di errore.
|
Since 0.0.2
MStatus m_icollection_full_free (MICollection *icollection
);
stability
: Unstable
Libera la memoria allocata per una MICollection. Libera la memoria allocata per tutti i dati contenuti nella collezione.
|
indirizzo ad una struttura derivata allocata di tipo MICollection |
Returns : |
MCORRECT o MERROR in caso di errore.
|
Since 0.0.2
MId m_icollection_insert_element (MICollection *icollection
,mpointer data
);
Inserisce un elemento in un MICollection.
provvede a passare dei dati data
per l'inizializzazione.
|
un MICollection inizializzato |
|
l'indirizzo a un blocco di dati o NULL
|
Returns : |
un identificativo valido o MERROR in caso di errore
|
Since 0.0.2
MId m_icollection_remove_element (MICollection *icollection
,MId id
);
Rimuove un elemento da un MICollection.
|
un MICollection inizializzato |
|
un identificativo valido |
Returns : |
il MId dell'elemento rimosso o MERROR in caso di errore
|
Since 0.0.2
#define m_c_icollection_insert_element(icollection,data)
stability
: Unstable
Come la funzione m_icollection_insert_element()
, provvede a passare il dato castato.
|
un MICollection inizializzato |
|
l'indirizzo a un blocco di dati o NULL
|
#define m_c_icollection_remove_element(icollection,id)
stability
: Unstable
Come la funzione m_icollection_remove_element()
, provvede a passare il dato castato.
|
un MICollection inizializzato |
|
un identificativo valido |