Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Литература / photon_old.doc
Скачиваний:
45
Добавлен:
02.04.2015
Размер:
8 Мб
Скачать
☆

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" )

Элемент реестра

Наконец, вот элемент реестра для Simp2_t:

static const PhTransportRegEntry_t

Simp2TransDef = {

"simp2",

Ph_PACK_STRUCT,

sizeof( Simp2_t ),

sizeof(Simp2Fixups)/sizeof(Simp2Fixups[0]),

&Simp2Fixups,

&Simp2Endians,

&Simp2ClearRefs

};

Транспортные функции

В этом разделе описываются низкоуровневые функции и типы данных, относящиеся к механизму транспортировки. Некоторые функции вызываются приложением, которое является источником данных. Некоторые функции вызываются приложением, которое является источником данных, некоторые – адресатом, некоторые – и тем и другим.

Оба приложения

Оба приложения используют:

PhTransportRegEntry_t

Структура данных, описывающая транспортируемые данные

PhRegisterTransportType()

Добавляет новый транспортный тип в реестр транспортировки

PhFindTransportType()

Отыскивает транспортный тип в реестре транспортировки

Приложение-источник

Приложение-источник использует это, примерно в таком порядке:

PhTransportCtrl_t

Структура управления для механизма транспортировки Photon'а

PhCreateTransportCtrl()

Выделяет память под структуру PhCreateTransportCtrl()

PhTransportType()

Упаковывает данные в структуру PhTransportCtrl_t

PhTransportFindLink()

Отыскивает связанный список данных транспортировки для некоторых специфических данных

PhTransportLink_t

Элемент связанного списка транспортных данных

PhLinkTransportData()

Добавляет транспортные данные в связанный список

PhGetNextInlineData()

Получает данные из следующего элемента связанного списка транспортных данных

PhGetTransportVectors()

Строит вектор ввода/вывода транспортируемых данных

PhFreeTransportType()

Освобождает данные, связанные с элементом транспортного реестра

PhReleaseTransportCtrl()

Освобождает структуру PhTransportCtrl_t

Это низкоуровневые функции, которые Вам, вероятно, никогда не понадобятся вызывать непосредственно:

PhAllocPackType()

Выделяет буфер и упаковывает в него транспортные данные

PhPackEntry()

Упаковывает транспортные данные, установленные элементом транспортного реестра

PhPackType()

Упаковывает транспортные данные, установленные типом данных

Соседние файлы в папке Литература