Id List

Id List — Semplice via per ottenere degli identificativi univoci

Stability Level

Unstable, unless otherwise indicated

Synopsis

#include <mlib.h>

struct              MIdList;
#define             M_IDLIST                            (data)
#define             M_IDLIST_id                         (data)
#define             M_IDLIST_len                        (data)
#define             M_IDLIST_user                       (data)
#define             MIDLIST_MAX
#define             MID_TO_MAX
typedef             MLId;
#define             MLId_new                            (name)
MIdList *           m_idlist_new                        (MIdOffSet offset);
MStatus             m_idlist_free                       (MIdList *idlist);
MId                 m_idlist_insert_element             (MIdList *idlist);
MId                 m_idlist_remove_element             (MIdList *idlist,
                                                         MId id);
MStatus             m_idlist_remove_element0            (MIdList *idlist,
                                                         MId *id);
MId                 m_idlist_get_offset_element         (MIdList *idlist);
MLId                m_lid_new                           (void);
MId                 m_lidlist_insert_element            (MIdList *idlist,
                                                         MLId lid);
MId                 m_lidlist_remove_element            (MIdList *idlist,
                                                         MLId lid);
MStatus             m_lidlist_remove_element0           (MIdList *idlist,
                                                         MLId lid);
#define             m_c_idlist_insert_element           (idlist)
#define             m_c_idlist_remove_element           (idlist,
                                                         id)
#define             m_c_idlist_remove_element0          (idlist,
                                                         id)
#define             m_c_idlist_get_offset_element       (idlist)
#define             m_c_lidlist_insert_element          (idlist,
                                                         lid)
#define             m_c_lidlist_remove_element          (idlist,
                                                         lid)
#define             m_c_lidlist_remove_element0         (idlist,
                                                         lid)
mboolean            m_id_equal_id                       (MId id1,
                                                         MId id2);
mboolean            m_lid_equal_list                    (MLId lid1,
                                                         MLId lid2);
mboolean            m_lid_equal_id                      (MLId lid1,
                                                         MLId lid2);

Description

MLib offre un metodo semplice e pratico per l'ottenimento di identificativi numerici univoci utilizzabili ad esempio per l'archiviazione sicura dei dati.

Gli identificativi sono valori numerici interi del tipo MId e vengono associati a delle liste di tipo MIdList.

Example 15. Using MIdList


#include <mlib.h>
#include <mlib/mprintf.h>


    int
    m_main ( argc, argv )
{
    m_main_init ( argc, argv );

    MIdList* idlist = m_idlist_new ( 5 );

    MId id[5] = { 0, 0, 0, 0, 0 };

    cicloindex ( 5, index,
    {
        id[index] = m_idlist_insert_element (idlist);
    } );

    cicloindex ( 5, index,
    {
        g_printf ( "\n id[%u]: %u \n", index, id[index] );
    } );

    m_idlist_remove_element0 ( idlist, &(id[2]) );
    m_idlist_remove_element0 ( idlist, &(id[3]) );
    m_idlist_remove_element0 ( idlist, &(id[4]) );

    id[2] = m_idlist_insert_element (idlist);
    id[3] = m_idlist_insert_element (idlist);
    id[4] = m_idlist_insert_element (idlist);

    cicloindex ( 5, index,
    {
        g_printf ( "\n id[%u]: %u \n", index, id[index] );
    } );

    g_printf ( "\n len: %u \n", M_IDLIST_len (idlist) );

    m_idlist_free ( idlist );

    return MCORRECT;
}

  


Details

struct MIdList

struct MIdList {
        const MId           id;
        const muint         len;
};

Questa struttura contiene le informazioni riguardo un gruppo di identificativi in relazione tra loro dall'appartenenza ad uno stesso insieme.

La MIdList mantiene riservati e non visibili i dati riguardanti gli id rimossi.

Se utilizzata in una struttura non e' necessario che questa contenga una MDefine poiche' gia' presente nella MIdList.

Questa è una struttura derivata ed è diretta evoluzione della struttura MBoxData, della quale eredita le proprietà.

const MId id;

identificativo univoco di una MIdList - only Read

const muint len;

numero di identificativi validi presenti nella MIdList - only Read

M_IDLIST()

    #define M_IDLIST(data)     ds_CAST (MIdList*,data)

stability: Unstable

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

data :

struttura derivata

M_IDLIST_id()

    #define M_IDLIST_id(data)     ds_GET_PROPERTY(M_IDLIST(data),id)

stability: Unstable

Provvede al casting di un dato data ritornando la proprietà "id"

data :

una struttura derivata

M_IDLIST_len()

    #define M_IDLIST_len(data)     ds_GET_PROPERTY(M_IDLIST(data),len)

stability: Unstable

Provvede al casting di un dato data ritornando la proprietà "len"

data :

una struttura derivata

M_IDLIST_user()

    #define M_IDLIST_user(data)     ds_GET_PROPERTY(M_IDLIST(data),user)

stability: Unstable

Provvede al casting di un dato data ritornando la proprietà "user"

data :

una struttura derivata

MIDLIST_MAX

    #define MIDLIST_MAX     INT_MAX

Quantita' massima di MIdList allocabili tramite la funzione m_idlist_new()


MID_TO_MAX

    #define MID_TO_MAX      INT_MAX

Quantita' massima di MId inseribili in una MIdList attraverso la funzione m_idlist_insert_element()


MLId

	typedef MId*    MLId;

Versione piu' avanzata del tipo MId.

Attraverso l' MLId e' possibile conoscere oltre l'identificativo, anche a quale MIdList esso sia associato.


MLId_new()

    #define MLId_new(name)			MLId name = m_lid_new()

stability: Unstable

Declare and define a new MLId structure pointer.

name :

name of a new MLId structure pointer

m_idlist_new ()

MIdList *           m_idlist_new                        (MIdOffSet offset);

stability: Unstable

Crea una nuova MIdList. offset non puo' essere superiore a MID_TO_MAX.

offset :

quantita' massima di identificativi inseribili nella rispettiva MIdList.

Returns :

un nuovo MIdList o NULL in caso di errore.

Since 0.0.2


m_idlist_free ()

MStatus             m_idlist_free                       (MIdList *idlist);

stability: Unstable

Libera la memoria allocata per una MIdList.

idlist :

indirizzo ad una struttura derivata allocata di tipo MIdList

Returns :

MCORRECT o MERROR in caso di errore.

Since 0.0.2


m_idlist_insert_element ()

MId                 m_idlist_insert_element             (MIdList *idlist);

stability: Unstable

Inserisce un nuovo identificativo univoco in una MIdList.

idlist :

lista dove inserire il prossimo identificativo

Returns :

un nuovo MId o MERROR in caso di errore.

Since 0.0.2


m_idlist_remove_element ()

MId                 m_idlist_remove_element             (MIdList *idlist,
                                                         MId id);

stability: Unstable

Rimuove un identificativo univoco in una MIdList.

idlist :

lista dalla quale rimuovere l' identificativo

id :

un identificativo valido

Returns :

il MId rimosso o MERROR in caso di errore.

Since 0.0.2


m_idlist_remove_element0 ()

MStatus             m_idlist_remove_element0            (MIdList *idlist,
                                                         MId *id);

stability: Unstable

Rimuove un identificativo univoco in una MIdList. Se la funzione ha successo id viene impostato a MNOID.

idlist :

lista dalla quale rimuovere l' identificativo

id :

un puntatore ad un identificativo valido

Returns :

MCORRECT in caso di corretta esecuzione MERROR in caso di errore

Since 0.0.2


m_idlist_get_offset_element ()

MId                 m_idlist_get_offset_element         (MIdList *idlist);

stability: Unstable

ritorna l' identificativo di piu' alto valore inserito nella lista ( non necessariamente risulta essere l'ultimo identificativo ritornato dalla funzione m_idlist_insert_element().

idlist :

una lista valida

Returns :

un identificativo o MNOID, MERROR in caso di errore

Since 0.0.2


m_lid_new ()

MLId                m_lid_new                           (void);

stability: Unstable

Crea un nuovo MLId.

Returns :

un nuovo MLId

Since 0.0.1


m_lidlist_insert_element ()

MId                 m_lidlist_insert_element            (MIdList *idlist,
                                                         MLId lid);

stability: Unstable

Inserisce un nuovo identificativo univoco in una MIdList. L'identificativo viene inserito nella variabile lid la quale contiene inoltre l'identificativo della MIdList utilizzata.

idlist :

lista dove inserire il prossimo identificativo

lid :

una variabile MLId

Returns :

un nuovo MLId o MERROR in caso di errore.

Since 0.0.2


m_lidlist_remove_element ()

MId                 m_lidlist_remove_element            (MIdList *idlist,
                                                         MLId lid);

stability: Unstable

Rimuove un identificativo univoco in una MIdList.

idlist :

lista dalla quale rimuovere l' identificativo

lid :

un identificativo valido

Returns :

il MId rimosso o MERROR in caso di errore.

Since 0.0.2


m_lidlist_remove_element0 ()

MStatus             m_lidlist_remove_element0           (MIdList *idlist,
                                                         MLId lid);

stability: Unstable

Rimuove un identificativo univoco in una MIdList. Se la funzione ha successo lid viene impostato a MNOID.

idlist :

lista dalla quale rimuovere l' identificativo

lid :

un identificativo valido

Returns :

MCORRECT in caso di corretta esecuzione MERROR in caso di errore

Since 0.0.2


m_c_idlist_insert_element()

#define             m_c_idlist_insert_element(idlist)

stability: Unstable

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

idlist :

lista dove inserire il prossimo identificativo

m_c_idlist_remove_element()

#define             m_c_idlist_remove_element(idlist,id)

stability: Unstable

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

idlist :

lista dalla quale rimuovere l' identificativo

id :

un identificativo valido

m_c_idlist_remove_element0()

#define             m_c_idlist_remove_element0(idlist,id)

stability: Unstable

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

idlist :

lista dalla quale rimuovere l' identificativo

id :

un puntatore ad un identificativo valido

m_c_idlist_get_offset_element()

#define             m_c_idlist_get_offset_element(idlist)

stability: Unstable

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

idlist :

una lista valida

m_c_lidlist_insert_element()

#define             m_c_lidlist_insert_element(idlist,lid)

stability: Unstable

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

idlist :

lista dove inserire il prossimo identificativo

lid :

una variabile MLId

m_c_lidlist_remove_element()

#define             m_c_lidlist_remove_element(idlist,lid)

stability: Unstable

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

idlist :

lista dalla quale rimuovere l' identificativo

lid :

un identificativo valido

m_c_lidlist_remove_element0()

#define             m_c_lidlist_remove_element0(idlist,lid)

stability: Unstable

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

idlist :

lista dalla quale rimuovere l' identificativo

lid :

un identificativo valido

m_id_equal_id ()

mboolean            m_id_equal_id                       (MId id1,
                                                         MId id2);

stability: Unstable

Verifica l'uguaglianza tra due identificativi.

id1 :

un identificativo valido

id2 :

un identificativo valido

Returns :

TRUE in caso di uguaglianza, FALSE nel caso opposto.

Since 0.0.1


m_lid_equal_list ()

mboolean            m_lid_equal_list                    (MLId lid1,
                                                         MLId lid2);

stability: Unstable

Verifica la stessa appartenenza ad una MIdList di due identificativi.

lid1 :

un identificativo valido

lid2 :

un identificativo valido

Returns :

TRUE in caso di appartenenza, FALSE nel caso opposto.

Since 0.0.1


m_lid_equal_id ()

mboolean            m_lid_equal_id                      (MLId lid1,
                                                         MLId lid2);

stability: Unstable

Verifica l'uguaglianza tra due identificativi.

lid1 :

un identificativo valido

lid2 :

un identificativo valido

Returns :

TRUE in caso di uguaglianza, FALSE nel caso opposto.

Since 0.0.1