Il gestore di variabili in memoria permette di memorizzare strutture annidate complesse.
Per questo motivo è così strutturato:
L'array delle variabili risiede in
sSoap.dmiVar (EHS_VAR)EHS_VAR contiene due strutture:
typedef struct {
EHS_ELEMENT sElement; // Descrizione del primo elemento o elementi
EHS_CONTAINER sContainer; // Contenitore dei dati della variabile
} EHS_VAR;
sElement contiene la definizione della variabile, tipo, nome, NameSpace ed altri dati.
I tipi possibli sono:
- STE_UNKNOW
Sconosciuto.
- STE_SIMPLE
Tipo semplice; un valore soltanto definito in EHS_SIMPLEDATATYPE
- STE_COMPLEX
Tipo Complesso: strutturato e annidabile.
- STE_ARRAY
Array di elementi (possono essere sia semplici che complessi)
- STE_ELEMENT
E' l'elemento di una sequenza può essere di tipo STE_SIMPLE o E_COMPLEX
- STE_REF
Da definire (?)
sElement è la sola definizione di come sarà l'elemento, a sua volta può contenere altri sElement numerati in iElements e inseriti nell'array arElement.
Nota: arsElement è void *, ma dovrebbe essere EHS_ELEMENT * , ma non posso inserire l'elemento in se stesso (!).
Il concetto è che l'elemento viene definito in tutte le su parti complesse con EHS_ELEMENT e i dati vengono inseriti nei contenitori EHS_CONTAINER; questo avviene perchè potrei avere degli array e quindi a stessa definizione dell'elemento più valori.
sContainer contiene il "dato" l'informazione e può essere: dato singolo, array di stringhe o array di dati complessi.
typedef struct {
EleType iType;
SINT iLength; // Lunghezza (numero di elementi se array o array di tipo complesso)
CHAR szLength[10]; // Mi serve per il ritorno se richiesta
void * pValue; // NOTA:
// Se datosingolo ptr a stringa iLength=Lunghezza dato
// se array puntatore a array di stringhe iLength=Numero di elementi
// se complesso, puntatore ad array di elementi array iLength=Numero di elementi
} EHS_CONTAINER;