MLib Reference Manual | ||||
---|---|---|---|---|
Top | Description |
#include <mlib.h> struct MICollectionQuark; #define M_ICOLLECTIONQUARK (data) #define M_ICOLLECTIONQUARK_DATA (icollectionq, type, id) #define M_ICOLLECTIONQUARK_PRIMI (icollectionq, type, id) #define M_ICOLLECTIONQUARK_data (data) #define M_ICOLLECTIONQUARK_user (data) MICollectionQuark * m_icollectionquark_new (mchars string
,MIdOffSet offset
,msize s_type
,MInizialize inizialize
,MDestroy destroy
); MStatus m_icollectionquark_free (MICollectionQuark *icollectionq
); MStatus m_icollectionquark_full_free (MICollectionQuark *icollectionq
); MId m_icollectionquark_insert_element (MICollectionQuark *icollectionq
,mpointer data
); MId m_icollectionquark_remove_element (MICollectionQuark *icollectionq
,MId id
); #define m_c_icollectionquark_insert_element (icollectionq, data) #define m_c_icollectionquark_remove_element (icollectionq, id)
Attraverso le strutture MICollectionQuark è possibile gestire blocchi di dati archiviati, utilizzando invece che i puntarori, degli identificativi univoci di tipo MId.
Queste strutture differiscono dal tipo MICollection perchè aggiungono la possibilità di associare ad ogni MICollectionQuark una stringa legata ad un identificativo GQuark.
Ogni id di tipo MId ottenuto dopo l'inserimento di un blocco di dati nel MICollectionQuark rappresenta l'esatta posizione del dato.
Example 19. Using a MICollectionQuark.
#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 ); MICollectionQuark* icollectionq = m_icollectionquark_new ( NULL, 10, sizeof(carattere), inizializza, NULL ); MId id = m_icollectionquark_insert_element ( icollectionq, "ciao" ); g_printf ( "\n len: %d; \n", M_IDLIST_len (icollectionq) ); g_printf ( "\n c: %c; \n", M_ICOLLECTIONQUARK_DATA(icollectionq,carattere,id)->lettera ); M_ICOLLECTIONQUARK_DATA(icollectionq,carattere,id)->lettera = 'X'; g_printf ( "\n c: %c; \n", M_ICOLLECTIONQUARK_DATA(icollectionq,carattere,id)->lettera ); g_printf ( "\n string: %s \n", M_IDLISTQUARK_string (icollectionq) ); g_printf ( "\n quark: %u \n", M_IDLISTQUARK_quark (icollectionq) ); g_printf ( "\n id list: %u \n\n\n", M_IDLIST_id (icollectionq) ); m_icollectionquark_free ( icollectionq ); MICollectionQuark* icollectionq2 = m_icollectionquark_new ( "Collection 2!", 10, sizeof(mchar), inizializza2, NULL ); MId id2 = m_icollectionquark_insert_element ( icollectionq2, NULL ); g_printf ( "\n len: %d; \n", M_IDLIST_len (icollectionq2) ); g_printf ( "\n c: %c; \n", M_ICOLLECTIONQUARK_PRIMI(icollectionq2,mchar,id2) ); M_ICOLLECTIONQUARK_PRIMI(icollectionq2,mchar,id) = 'Y'; g_printf ( "\n c: %c; \n", M_ICOLLECTIONQUARK_PRIMI(icollectionq2,mchar,id) ); g_printf ( "\n string: %s \n", M_IDLISTQUARK_string (icollectionq2) ); g_printf ( "\n quark: %u \n", M_IDLISTQUARK_quark (icollectionq2) ); g_printf ( "\n id list: %u \n", M_IDLIST_id (icollectionq2) ); m_icollectionquark_free ( icollectionq2 ); return MCORRECT; }
struct MICollectionQuark { 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 MICollectionQuark.
Questa è una struttura derivata ed è diretta evoluzione della struttura MIdListQuark, della quale eredita le proprietà.
Attenzione: non è possibile utilizzare questa struttura come se fosse una MIdListQuark!
mpointer * |
array di puntatori - only Read |
#define M_ICOLLECTIONQUARK(data) ds_CAST (MICollectionQuark*,data)
stability
: Unstable
Provvede al casting di una struttura data
ritornando una struttura di tipo MICollectionQuark
|
struttura derivata |
#define M_ICOLLECTIONQUARK_DATA(icollectionq,type,id) ds_ARRAY_DATA(icollectionq,type,id,data)
ritorna la posizione di un blocco di dati archiviato in un MICollectionQuark castando e referenziando l'array.
Utilizzato nei casi in cui l' MICollectionQuark archivi dati struttura (struct)
|
un MICollectionQuark valido |
|
tipo di dati utilizzato nella MICollectionQuark |
|
identificativo del blocco di dati archiviato |
#define M_ICOLLECTIONQUARK_PRIMI(icollectionq,type,id) ds_ARRAY_PRIMI(icollectionq,type,id,data)
ritorna la posizione di un dato archiviato in un MICollectionQuark castando e referenziando l'array.
Utilizzato nei casi in cui l' MICollectionQuark archivi dati primitivi (int,char,etc.)
|
un MICollectionQuark valido |
|
tipo di dati utilizzato nella MICollectionQuark |
|
identificativo del dato archiviato |
#define M_ICOLLECTIONQUARK_data(data) ds_GET_PROPERTY(M_ICOLLECTIONQUARK(data),data)
stability
: Unstable
Provvede al casting di un dato data
ritornando la proprietà "data"
|
una struttura derivata |
#define M_ICOLLECTIONQUARK_user(data) ds_GET_PROPERTY(M_ICOLLECTIONQUARK(data),user)
stability
: Unstable
Provvede al casting di un dato data
ritornando la proprietà "user"
|
una struttura derivata |
MICollectionQuark * m_icollectionquark_new (mchars string
,MIdOffSet offset
,msize s_type
,MInizialize inizialize
,MDestroy destroy
);
Crea un nuovo MICollectionQuark.
|
una stringa da associare all'identificativo della lista. |
|
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 MICollectionQuark o NULL in caso di errore.
|
Since 0.0.2
MStatus m_icollectionquark_free (MICollectionQuark *icollectionq
);
stability
: Unstable
Libera la memoria allocata per una MICollectionQuark. 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 MICollectionQuark |
Returns : |
MCORRECT o MERROR in caso di errore.
|
Since 0.0.2
MStatus m_icollectionquark_full_free (MICollectionQuark *icollectionq
);
stability
: Unstable
Libera la memoria allocata per una MICollectionQuark. Libera la memoria allocata per tutti i dati contenuti nella collezione.
|
indirizzo ad una struttura derivata allocata di tipo MICollectionQuark |
Returns : |
MCORRECT o MERROR in caso di errore.
|
Since 0.0.2
MId m_icollectionquark_insert_element (MICollectionQuark *icollectionq
,mpointer data
);
Inserisce un elemento in un MICollectionQuark.
provvede a passare dei dati data
per l'inizializzazione.
|
un MICollectionQuark 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_icollectionquark_remove_element (MICollectionQuark *icollectionq
,MId id
);
Rimuove un elemento da un MICollectionQuark.
|
un MICollectionQuark inizializzato |
|
un identificativo valido |
Returns : |
il MId dell'elemento rimosso o MERROR in caso di errore
|
Since 0.0.2
#define m_c_icollectionquark_insert_element(icollectionq,data)
stability
: Unstable
Come la funzione m_icollectionquark_insert_element()
, provvede a passare il dato castato.
|
un MICollectionQuark inizializzato |
|
l'indirizzo a un blocco di dati o NULL
|
#define m_c_icollectionquark_remove_element(icollectionq,id)
stability
: Unstable
Come la funzione m_icollectionquark_remove_element()
, provvede a passare il dato castato.
|
un MICollectionQuark inizializzato |
|
un identificativo valido |