Matrici (RPC)

Diverse categorie di matrici sono state definite in base alle caratteristiche delle prestazioni, principalmente se la matrice può essere copiata da blocchi.

Per alcune categorie, ad esempio una matrice a dimensioni fisse, esistono due tipi di descrittori di matrice; sono indicati da una correzione nel nome del token FC principale.

Formato carattere Descrizione
SM Le dimensioni totali del tipo possono essere rappresentate in un int a 16 bit senza segno.
LG Le dimensioni totali del tipo devono essere rappresentate a lungo un segno a 32 bit.

 

Campi comuni alle matrici:

  • total_size

    Dimensioni totali della matrice in memoria, in byte. Questa è la stessa delle dimensioni del filo dopo l'allineamento. La dimensione totale viene calcolata per le categorie per cui il problema di riempimento non esiste e la dimensione è la dimensione effettiva della matrice.

  • element_size

    Dimensioni totali in memoria di un singolo elemento della matrice, inclusa la spaziatura interna (questo può verificarsi solo per matrici complesse).

  • element_description

    Descrizione del tipo di elemento della matrice.

  • pointer_layout

    Per altre informazioni, vedere l'argomento Layout puntatore .

Matrici di dimensioni fisse

Una stringa di formato matrice di dimensioni fisse viene generata per le matrici con dimensioni note e pertanto può essere copiata in blocco nel buffer di marshalling. I due formati di descrittore matrice fissi sono i seguenti.

FC_SMFARRAY alignment<1> 
total_size<2> 
[pointer_layout<>]  
element_description<> 
FC_END

e

FC_LGFARRAY alignment<1> 
total_size<4> 
[pointer_layout<>] 
element_description<> 
FC_END

Matrice conforme

Una matrice conforme può essere copiata in blocchi dopo che la dimensione della matrice è nota.

FC_CARRAY alignment<1>
element_size<2> 
conformance_description<> 
[pointer_layout<>] 
element_description<> 
FC_END

Il conformance_description<> è un descrittore di correlazione e ha 4 o 6 byte a seconda che venga usato /robust .

Matrice variabile conforme

Una matrice conforme può anche essere copiata da blocchi.

FC_CVARRAY alignment<1> 
element_size<2> 
conformance_description<> 
variance_description<>  
[pointer_layout<>] 
element_description<> 
FC_END

Il conformance_description e variance_description<><> è un descrittore di correlazione e ha 4 o 6 byte a seconda che venga usato /robust.

Matrice variabile

Le matrici variabili hanno due possibilità a seconda delle dimensioni della matrice.

FC_SMVARRAY alignment<1>
total_size<2>  
number_elements<2> 
element_size<2> 
variance_description<> 
[pointer_layout<>] 
element_description<> 
FC_END

FC_LGVARRAY alignment<1>
total_size<4>  
number_elements<4> 
element_size<2> 
variance_description<4>
[pointer_layout<>] 
element_description<> 
FC_END

Il variance_description<> è un descrittore di correlazione e ha 4 o 6 byte a seconda dell'uso di /robust .

Per le matrici variabili incorporate all'interno di una struttura, il campo offset<2> della variance_description<> è un offset relativo dalla posizione della matrice variabile nella struttura alla varianza che descrive il campo. L'offset è in genere relativo all'inizio della struttura.

Matrici complesse

Una matrice complessa è qualsiasi matrice con un elemento che impedisce la copia a blocchi e, ad esempio, deve essere eseguita un'azione aggiuntiva. Questi elementi rendono complessa una matrice:

  • tipi semplici: ENUM16, __INT3264 (solo su piattaforme a 64 bit), un integrale con [intervallo]
  • puntatori di riferimento e interfaccia (tutti i puntatori su piattaforme a 64 bit)
  • unioni
  • strutture complesse (vedere l'argomento Descrizione struttura complessa per un elenco completo di motivi per cui una struttura deve essere complessa)
  • elementi definiti con [transmit_as], [user_marshal]
  • Tutte le matrici multidimensionali con almeno una dimensione conforme e/o variabile sono complesse indipendentemente dal tipo di elemento sottostante.

La descrizione della matrice complessa è la seguente:

FC_BOGUS_ARRAY alignment<1> 
number_of_elements<2> 
conformance_description<> 
variance_description<> 
element_description<> 
FC_END

Il campo number_of_elements<2> è zero se la matrice è conforme.

Il conformance_description e variance_description<><> è un descrittore di correlazione e ha 4 o 6 byte a seconda che venga usato /robust. Se la matrice ha conformità e/o varianza, i campi conformance_description e/o variance_description<> hanno descrizioni valide, altrimenti i primi 4 byte del descrittore di correlazione vengono impostati su 0xFFFFFFFF<>. I flag, quando presenti, sono impostati su zero.