Id Collection Quark

Id Collection Quark — collezzioni di blocchi di dati indefiniti

Stability Level

Unstable, unless otherwise indicated

Synopsis

#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)

Description

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;
}

  


Details

struct MICollectionQuark

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 *data;

array di puntatori - only Read

M_ICOLLECTIONQUARK()

    #define M_ICOLLECTIONQUARK(data)     ds_CAST (MICollectionQuark*,data)

stability: Unstable

Provvede al casting di una struttura data ritornando una struttura di tipo MICollectionQuark

data :

struttura derivata

M_ICOLLECTIONQUARK_DATA()

	#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)

icollectionq :

un MICollectionQuark valido

type :

tipo di dati utilizzato nella MICollectionQuark

id :

identificativo del blocco di dati archiviato

M_ICOLLECTIONQUARK_PRIMI()

	#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.)

icollectionq :

un MICollectionQuark valido

type :

tipo di dati utilizzato nella MICollectionQuark

id :

identificativo del dato archiviato

M_ICOLLECTIONQUARK_data()

    #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"

data :

una struttura derivata

M_ICOLLECTIONQUARK_user()

    #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"

data :

una struttura derivata

m_icollectionquark_new ()

MICollectionQuark * m_icollectionquark_new              (mchars string,
                                                         MIdOffSet offset,
                                                         msize s_type,
                                                         MInizialize inizialize,
                                                         MDestroy destroy);

Crea un nuovo MICollectionQuark.

string :

una stringa da associare all'identificativo della lista.

offset :

quantita' massima di blocchi di dati inseribili

s_type :

grandezza in byte di un tipo di dati personale

inizialize :

funzione da chiamare dopo l'inserimento di un dato

destroy :

funzione da chiamare dopo la rimozione di un dato

Returns :

un nuovo MICollectionQuark o NULL in caso di errore.

Since 0.0.2


m_icollectionquark_free ()

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.

icollectionq :

indirizzo ad una struttura derivata allocata di tipo MICollectionQuark

Returns :

MCORRECT o MERROR in caso di errore.

Since 0.0.2


m_icollectionquark_full_free ()

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.

icollectionq :

indirizzo ad una struttura derivata allocata di tipo MICollectionQuark

Returns :

MCORRECT o MERROR in caso di errore.

Since 0.0.2


m_icollectionquark_insert_element ()

MId                 m_icollectionquark_insert_element   (MICollectionQuark *icollectionq,
                                                         mpointer data);

Inserisce un elemento in un MICollectionQuark. provvede a passare dei dati data per l'inizializzazione.

icollectionq :

un MICollectionQuark inizializzato

data :

l'indirizzo a un blocco di dati o NULL

Returns :

un identificativo valido o MERROR in caso di errore

Since 0.0.2


m_icollectionquark_remove_element ()

MId                 m_icollectionquark_remove_element   (MICollectionQuark *icollectionq,
                                                         MId id);

Rimuove un elemento da un MICollectionQuark.

icollectionq :

un MICollectionQuark inizializzato

id :

un identificativo valido

Returns :

il MId dell'elemento rimosso o MERROR in caso di errore

Since 0.0.2


m_c_icollectionquark_insert_element()

#define             m_c_icollectionquark_insert_element(icollectionq,data)

stability: Unstable

Come la funzione m_icollectionquark_insert_element() , provvede a passare il dato castato.

icollectionq :

un MICollectionQuark inizializzato

data :

l'indirizzo a un blocco di dati o NULL

m_c_icollectionquark_remove_element()

#define             m_c_icollectionquark_remove_element(icollectionq,id)

stability: Unstable

Come la funzione m_icollectionquark_remove_element() , provvede a passare il dato castato.

icollectionq :

un MICollectionQuark inizializzato

id :

un identificativo valido