Array (RPC)

Beberapa kategori array telah ditentukan berdasarkan karakteristik performanya, terutama apakah array dapat disalin blok.

Untuk beberapa kategori, seperti array ukuran tetap, ada dua jenis deskriptor array; mereka ditunjukkan oleh in-fix atas nama token FC terkemuka.

Format karakter Deskripsi
SM Ukuran total jenis dapat diwakili dalam int 16-bit yang tidak ditandatangani.
LG Ukuran total jenis membutuhkan panjang 32-bit yang tidak ditandatangani untuk diwakili.

 

Bidang umum untuk array:

  • total_size

    Ukuran total array dalam memori, dalam byte. Ini sama dengan ukuran kawat setelah penyelarasan. Ukuran total dihitung untuk kategori di mana masalah padding tidak ada dan ukurannya adalah ukuran array aktual.

  • element_size

    Ukuran total dalam memori satu elemen array, termasuk padding (ini mungkin hanya terjadi untuk array yang kompleks).

  • element_description

    Deskripsi jenis elemen array.

  • pointer_layout

    Lihat topik Tata Letak Penunjuk untuk informasi selengkapnya.

Array berukuran tetap

String format array berukuran tetap dihasilkan untuk array yang memiliki ukuran yang diketahui, dan oleh karena itu dapat disalin blok ke buffer marshaling. Dua format deskriptor array tetap adalah sebagai berikut.

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

dan

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

Array Yang Sesuai

Array yang sesuai dapat disalin blok setelah ukuran array diketahui.

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

conformance_description<> adalah deskriptor korelasi dan memiliki 4 atau 6 byte tergantung pada apakah /robust digunakan.

Array Variasi Yang Sesuai

Array yang bervariasi yang sesuai juga dapat disalin blok.

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

conformance_description<> dan variance_description<> adalah deskriptor korelasi dan memiliki 4 atau 6 byte tergantung pada apakah /robust digunakan.

Array Yang Bervariasi

Array yang bervariasi memiliki dua kemungkinan tergantung pada ukuran array.

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

variance_description<> adalah deskriptor korelasi dan memiliki 4 atau 6 byte tergantung pada /robust yang digunakan.

Untuk berbagai array yang disematkan di dalam struktur, bidang offset2<> dari variance_description<> adalah offset relatif dari posisi array yang bervariasi dalam struktur ke varian yang menjelaskan bidang. Offset biasanya relatif terhadap awal struktur.

Array Kompleks

Array kompleks adalah array apa pun dengan elemen yang mencegahnya disalin blok, dan dengan demikian, tindakan tambahan perlu diambil. Elemen-elemen ini membuat array kompleks:

  • jenis sederhana: ENUM16, __INT3264 (hanya pada platform 64-bit), integral dengan [rentang]
  • referensi dan penunjuk antarmuka (semua pointer pada platform 64-bit)
  • Serikat
  • struktur kompleks (lihat topik Deskripsi Struktur Kompleks untuk daftar lengkap alasan struktur menjadi kompleks)
  • elemen yang ditentukan dengan [transmit_as], [user_marshal]
  • Semua array multidmensional dengan setidaknya satu dimensi yang sesuai dan/atau bervariasi kompleks terlepas dari jenis elemen yang mendasar.

Deskripsi array kompleks adalah sebagai berikut:

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

Bidang number_of_elements< 2> adalah nol jika array sesuai.

conformance_description<> dan variance_description<> adalah deskriptor korelasi dan memiliki 4 atau 6 byte tergantung pada apakah /robust digunakan. Jika array memiliki kesesuaian dan/atau varians, bidang conformance_description<> dan/atau variance_description<> memiliki deskripsi yang valid, jika tidak, 4 byte pertama deskriptor korelasi diatur ke 0xFFFFFFFF. Bendera, saat ada, diatur ke nol.