logo
Литература_1 / photon_old

Fixup-список

Структура Simp2_t, приведенная выше, включает несколько членов, ссылающихся на данные вне этой структуры. Эти элементы требуют наличия членов типа PhTransportFixupRec_t в списке fixup, чтобы указать транспортному механизму, как получить данные:

static const PhTransportFixupRec_t

Simp2Fixups[] = {

Tr_REF_ARRAY( Simp2_t, ref_vals, Tr_FETCH( Simp2_t, num_ref_vals ) ),

Tr_STRING( Simp2_t, name2 ),

Tr_TYPE( Simp2_t, simp1_instance ),

Tr_TYPE_ARRAY( Simp2_t, simp1_array ),

Tr_REF_TYPE( Simp2_t, simp1_reference ),

Tr_REF_TYPE_ARRAY(

Simp2_t, ref_simp1_array,

Tr_FETCH( Simp2_t, num_simps ) ),

Tr_REF_TYPE_REF_ARRAY(

Simp2_t, ref_simp1_ref_array,

Tr_FETCH( Simp2_t, num_simp_refs ) ),

Tr_ALLOC(

Simp2_t, bitmap,

Tr_FETCH( Simp2_t, bm_bpl ), '*',

Tr_FETCH( Simp2_t, bm_height ) )

};

При определении элемента в fixup Вам может понадобиться использовать информацию, находящуюся в структуре, элемент которой Вы определяете. В этой ситуации используйте декларацию:

Tr_FETCH(type, member)

Эта декларация приводит к тому, что значение задаваемого члена будет использоваться во время исполнения – когда данные будут паковаться или распаковываться. Кроме того, любые члены, определённые через другие зарегистрированные типы, автоматически являются эндиан-корректными, используя эндиан-определение из элемента транспортного реестра.

Вот полный список деклараций адресной привязки:

Scalar

Скаляр. Отсутствует

Scalar Array

Массив скаляров. Отсутствует

Reference (string)

Сссылка (строка).

Tr_STRING (type, member)

Reference (scalar array)

Ссылка (массив скаляров). Tr_REF_ARRAY (type, member, number_of_elements)

Registered type

Зарегистрированный тип.

Tr_TYPE (type, member, type_name)

Registered type array

Массив зарегистрированных типов. Tr_TYPE_ARRAY(type, member, type_name)

Reference (registered type)

Ссылка (зарегистрированный тип). Tr_REF_TYPE (type, member, type_name)

Reference (registered type array)

Ссылка (массив зарегистрированных типов).

Tr_REF_TYPE_ARRAY (type, member, num_elements, type_name)

Reference (registered type reference array)

Ссылка (массив ссылок на зарегистрированные типы). Tr_REF_TYPEREF_ARRAY (type, member, num_elements, type_name)

Вот несколько примеров членов и их деклараций адресной привязки:

char *name;

Tr_STRING( Sample_t, name )

int num_nums; int *int_array;

Tr_REF_ARRAY( Sample_t, int_array, Tr_FETCH( Sample_t, num_nums) )

или, если член известен:

Tr_REF_ARRAY( Sample_t, int_array, 7 )

Simp1_t simple_instance

Tr_TYPE( Sample_t, simple_instance, "simp1" )

или как один экземпляр, если это просто массив:

Tr_TYPE_ARRAY( Sample_t, simple_instance, "simp1" )

Simp1_t simple_array[5]

Tr_TYPE_ARRAY( Sample_t, simple_array, "simp1" )

Simp1_t *simp1_ref

Tr_REF_TYPE( Sample_t, simp1_ref, "simp1" )

short num_simp1s; Simp1_t *simp1_ref

Tr_REF_TYPE_ARRAY( Sample_t, simp1_ref, Tr_FETCH( Sample_t, num_simp1s ), "simp1" )

short num_simp1s; Simp1_t **simp1_ref;

Tr_REF_TYPE_REF_ARRAY( Sample_t, simp1_ref,

Tr_FETCH( Sample_t, num_simp1s ), "simp1" )

Yandex.RTB R-A-252273-3
Yandex.RTB R-A-252273-4