MLib Reference Manual | ||||
---|---|---|---|---|
Top | Description |
#include <mlib.h> MStatus (*MSArraySetNoElement) (mpointer ___array___
,const msize len
); struct MSArray; #define M_SARRAY (data) #define M_SARRAY_type_string_element (data) #define M_SARRAY_type_size_element (data) #define M_SARRAY_type_size_array (data) #define M_SARRAY_len_array (data) #define M_SARRAY_len_elements (data) #define M_SARRAY_set_noelement (data) #define M_SARRAY_user (data) #define M_SARRAY_ (data) #define M_SARRAY_REF (data, type) #define M_SARRAY_INS (data, type, index) #define M_SARRAY_REM (data, type, index) #define m_sarray_set_new (type, len, set_noelement, id) MSArray * m_sarray_new (MId id
); mpointer m_sarray_free (MSArray *sarray
); MStatus m_sarray_element_inserted (MSArray *sarray
,msize index
); MStatus m_sarray_element_removed (MSArray *sarray
,msize index
); MStatus m_sarray_set_noelement (MSArray *sarray
); #define m_c_sarray_element_inserted (sarray, index) #define m_c_sarray_element_removed (sarray, index)
Attraverso le strutture MSArray è possibile gestire array statici adoperando le potenzialità delle strutture derivate.
Ogni struttura di tipo MSArray possiede l'indirizzo di un array statico che viene memorizzato come mpointer, per questo è necessario utilizzare le macros specifiche per adoperare i corretti casting e poter utilizzare liberamente l'array statico.
A differenza delle altre strutture derivate, dopo la liberazione della memoria allocata per una struttura derivata MSArray, bisogna tener conto della memoria allocata staticamente per l'array statico che ovviamente resta a disposizione fino a terminazione programma.
Example 13. Using MSArray
#include <mlib.h> #include <glib/gprintf.h> MStatus set_noelement ( mpointer ___array___, msize _len ) { mint index, len; len = (mint)_len; for ( index = 0; index <len; index++ ) { ((mchar*)___array___)[index] = 'x'; } return MCORRECT; } int m_main ( argc, argv ) { m_main_init ( argc, argv ); MId id; m_sarray_set_new ( mchar, 5, set_noelement, id ); MSArray* array = m_sarray_new ( id ); g_printf ( "\n type_string_element: %s \n", M_SARRAY_type_string_element(array) ); g_printf ( "\n type_size_element: %lu \n", M_SARRAY_type_size_element(array) ); g_printf ( "\n type_size_array: %lu \n", M_SARRAY_type_size_array(array) ); g_printf ( "\n len_array: %lu \n", M_SARRAY_len_array(array) ); g_printf ( "\n len_elements: %lu \n", M_SARRAY_len_elements(array) ); g_printf ( "\n array: %p \n", ((mchar*)M_SARRAY_(array)) ); g_printf ( "\n %c; \n", M_SARRAY_REF (array, mchar)[0] ); g_printf ( "\n %c; \n", M_SARRAY_REF (array, mchar)[1] ); M_SARRAY_REF (array, mchar)[0] = 'a'; m_sarray_element_inserted ( array, 0 ); M_SARRAY_REF (array, mchar)[1] = 'b'; m_sarray_element_inserted ( array, 1 ); g_printf ( "\n %c; \n", M_SARRAY_REF (array, mchar)[0] ); g_printf ( "\n %c; \n", M_SARRAY_REF (array, mchar)[1] ); g_printf ( "\n len_elements: %lu \n", M_SARRAY_len_elements(array) ); // M_SARRAY_set_noelement(array) ( M_SARRAY_(array), M_SARRAY_len_array(array) ); m_sarray_set_noelement ( array ); g_printf ( "\n %c; \n", M_SARRAY_REF (array, mchar)[0] ); g_printf ( "\n %c; \n", M_SARRAY_REF (array, mchar)[1] ); g_printf ( "\n len_elements: %lu \n", M_SARRAY_len_elements(array) ); M_SARRAY_INS (array, mchar, 0)[0] = 'c'; M_SARRAY_INS (array, mchar, 1)[1] = 'd'; g_printf ( "\n %c; \n", M_SARRAY_REF (array, mchar)[0] ); g_printf ( "\n %c; \n", M_SARRAY_REF (array, mchar)[1] ); g_printf ( "\n len_elements: %lu \n", M_SARRAY_len_elements(array) ); M_SARRAY_REM (array, mchar, 0)[0] = 'X'; M_SARRAY_REM (array, mchar, 1)[1] = 'X'; g_printf ( "\n %c; \n", M_SARRAY_REF (array, mchar)[0] ); g_printf ( "\n %c; \n", M_SARRAY_REF (array, mchar)[1] ); g_printf ( "\n len_elements: %lu \n", M_SARRAY_len_elements(array) ); mchar* static_array = (mchar*)m_sarray_free ( array ); g_printf ( "\n static : %c; \n", static_array[0] ); g_printf ( "\n static : %c; \n", static_array[1] ); return MCORRECT; }
MStatus (*MSArraySetNoElement) (mpointer ___array___
,const msize len
);
Utilizzato nella inizializzazione dell' array statico contenuto nella struttura derivata MSArray.
struct MSArray { const mchars type_string_element; const msize type_size_element; const msize type_size_array; const msize len_array; const msize len_elements; MSArraySetNoElement set_noelement; const mpointer array; };
Contiene un array statico ed una serie di informazioni e strumenti utili alla sua gestione.
La struttura derivata MSArray è composta da due parti: una parte dinamica riguardante la tipica conformazione delle strutture derivate, ed una parte statica riferita ad un array statico accessibile attraverso le macro M_SARRAY_REF e M_SARRAY_ .
La proprietà len_elements
è un elemento instabile della struttura derivata.
Ciò è di peso dalla libertà di azione che l'user dispone rispetto alla gestione
degli elementi inseriti o rimossi nell'array statico.
Se utilizzata in una struttura non e' necessario che questa contenga una MDefine poiche' gia' presente nella MSArray.
Questa è una struttura derivata ed è diretta evoluzione della struttura MBoxData, della quale eredita le proprietà.
const mchars |
tipo, sottoforma di stringa, dell'elemento inseribile nell'array statico - only Read |
const msize |
dimensione in byte del tipo inseribile nell'array statico - only Read |
const msize |
dimensione in byte dell'intero array statico - only Read |
const msize |
quantità di elementi inseribili nell'array statico - only Read |
const msize |
quantità di elementi inseriti nell'array statico - only Read |
MSArraySetNoElement |
indirizzo ad una funzione di inizializzazzione dell'array statico - Read / Write |
const mpointer |
indirizzo ad un array statico - only Read |
#define M_SARRAY(data) ds_CAST (MSArray*,data)
stability
: Unstable
Provvede al casting di una struttura data
ritornando una struttura di tipo MSArray
|
struttura derivata |
#define M_SARRAY_type_string_element(data) ds_GET_PROPERTY(M_SARRAY(data),type_string_element)
stability
: Unstable
Provvede al casting di un dato data
ritornando la proprietà "type_string_element"
|
una struttura derivata |
#define M_SARRAY_type_size_element(data) ds_GET_PROPERTY(M_SARRAY(data),type_size_element)
stability
: Unstable
Provvede al casting di un dato data
ritornando la proprietà "type_size_element"
|
una struttura derivata |
#define M_SARRAY_type_size_array(data) ds_GET_PROPERTY(M_SARRAY(data),type_size_array)
stability
: Unstable
Provvede al casting di un dato data
ritornando la proprietà "type_size_array"
|
una struttura derivata |
#define M_SARRAY_len_array(data) ds_GET_PROPERTY(M_SARRAY(data),len_array)
stability
: Unstable
Provvede al casting di un dato data
ritornando la proprietà "len_array"
|
una struttura derivata |
#define M_SARRAY_len_elements(data) ds_GET_PROPERTY(M_SARRAY(data),len_elements)
stability
: Unstable
Provvede al casting di un dato data
ritornando la proprietà "len_elements"
|
una struttura derivata |
#define M_SARRAY_set_noelement(data) ds_GET_PROPERTY(M_SARRAY(data),set_noelement)
stability
: Unstable
Provvede al casting di un dato data
ritornando la proprietà "set_noelement"
|
una struttura derivata |
#define M_SARRAY_user(data) ds_GET_PROPERTY(M_SARRAY(data),user)
stability
: Unstable
Provvede al casting di un dato data
ritornando la proprietà "user"
|
una struttura derivata |
#define M_SARRAY_(data) ds_GET_PROPERTY(M_SARRAY(data),array)
stability
: Unstable
Provvede al casting di un dato data
ritornando la proprietà "array",
l'array statico è ancora nella forma di (void*)array[]
|
una struttura derivata |
#define M_SARRAY_REF(data,type) ((type*)M_SARRAY_(data))
stability
: Unstable
Provvede al casting di un dato data
ritornando la proprietà "array",
quindi effettua un ulteriore casting ritornando l'array statico utilizzabile.
|
una struttura derivata |
|
tipo dell'elemento inseribile nell'array statico |
#define M_SARRAY_INS(data,type,index)
stability
: Unstable
Provvede al casting di un dato data
ritornando la proprietà "array",
quindi effettua un ulteriore casting ritornando l'array statico utilizzabile.
Prima di queste operazioni segna come "element inserted"
la posizione index
dell'array statico parte del MSArray.
|
una struttura derivata |
|
tipo dell'elemento inseribile nell'array statico |
|
un identificativo di posizione valido |
#define M_SARRAY_REM(data,type,index)
stability
: Unstable
Provvede al casting di un dato data
ritornando la proprietà "array",
quindi effettua un ulteriore casting ritornando l'array statico utilizzabile.
Prima di queste operazioni segna come "element removed"
la posizione index
dell'array statico parte del MSArray.
|
una struttura derivata |
|
tipo dell'elemento inseribile nell'array statico |
|
un identificativo di posizione valido |
#define m_sarray_set_new(type,len,set_noelement,id)
stability
: Unstable
A differenza della maggior parte delle strutture derivate, il tipo MSArray richiede una fase di inizializzazione attraverso la chiamata alla macro m_sarray_set_new .
Questa macro espandendosi:
genera un blocco chiuso di dati comprendente la dichiarazione
e definizione di un array statico di type
elementi,
provvede al passaggio dell'indirizzo dell'array statico oltre che
degli argomenti type
, len
e set_noelement
ad una funzione interna,
questa alloca memoria per una struttura derivata di tipo MSArray archiviandola in una collezione interna di tipo MICollection,
infine viene assegnato alla variabile id
un identificativo della struttura derivata.
Passando id
alla funzione m_sarray_new()
è possibile infine ottenere un MSArray.
|
tipo dell'elemento inseribile nell'array statico |
|
quantità di elementi inseribili nell'array statico |
|
indirizzo ad una funzione di inizializzazzione dell'array statico |
|
una variabile di tipo MId valida |
Since 0.0.1
MSArray * m_sarray_new (MId id
);
stability
: Unstable
Preleva da un archivio interno di tipo MICollection una MSArray creata in precedenza attraverso la macro m_sarray_set_new.
Since 0.0.2
mpointer m_sarray_free (MSArray *sarray
);
stability
: Unstable
Libera la memoria allocata per una MSArray. L'array statico parte della MSArray resta a disposizione fino al termine del programma.
|
indirizzo ad una struttura derivata allocata di tipo MSArray |
Returns : |
l'indirizzo dell'array statico parte della MSArray o NULL in caso di errore.
|
Since 0.0.1
MStatus m_sarray_element_inserted (MSArray *sarray
,msize index
);
stability
: Unstable
Segna come "element inserted" una posizione di un array statico parte di una MSArray.
|
indirizzo ad una struttura derivata allocata di tipo MSArray |
|
identificativo di una posizione all'interno di un array statico parte di un MSArray |
Returns : |
MCORRECT o MERROR in caso di errore.
|
Since 0.0.2
MStatus m_sarray_element_removed (MSArray *sarray
,msize index
);
stability
: Unstable
Segna come "element removed" una posizione di un array statico parte di una MSArray.
|
indirizzo ad una struttura derivata allocata di tipo MSArray |
|
identificativo di una posizione all'interno di un array statico parte di un MSArray |
Returns : |
MCORRECT o MERROR in caso di errore.
|
Since 0.0.2
MStatus m_sarray_set_noelement (MSArray *sarray
);
stability
: Unstable
Provvede a chiamare la funzione di risettaggio della proprietà "set_noelement" passando come argomenti l'array statico parte della MSArray e il valore della proprietà "len_array". Segna come "element removed" tutte le posizioni dell'array statico parte della MSArray.
|
indirizzo ad una struttura derivata allocata di tipo MSArray |
Returns : |
MCORRECT o MERROR in caso di errore.
|
Since 0.0.2
#define m_c_sarray_element_inserted(sarray,index)
stability
: Unstable
Come la funzione m_sarray_element_inserted()
, provvede a passare il dato castato.
|
array dove segnare inserito un elemento |
|
un identificativo di posizione valido |
#define m_c_sarray_element_removed(sarray,index)
stability
: Unstable
Come la funzione m_sarray_element_removed()
, provvede a passare il dato castato.
|
array dove segnare rimosso un elemento |
|
un identificativo di posizione valido |