Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Справочное руководство






Библиотека C SDAI

Содержание.

Содержание. 1

1. Общее представление о SDAI. 4

1.1. Стандарт STEP. 4

1.2. Основные определения. 5

1.3. Язык EXPRESS. 6

1.4. SDAI. 7

1.5. Логическая организация данных SDAI. 8

1.6. Раннее и позднее (динамическое) связывание. 9

1.6.1. Раннее связывание. 10

1.6.2. Позднее связывание. 10

1.7. Структура справочника. 11

1.7.1. Условные обозначения типов шрифтов. 11

2. Программирование SDAI. 12

2.1. Общее представление. 12

2.2. Компилирование и запуск приложений SDAI. 12

2.2.1. Компилирование приложений SDAI. 12

2.2.2. Словарь SDAI. 13

2.3. Типы данных SDAI. 13

2.3.1. Константы SDAI. 14

2.3.2. Простые типы.. 14

2.3.3. Экземпляры сущностей. 14

2.3.4. Множества (агрегаты) 16

2.4. Операции SDAI. 16

2.4.1. Управление памятью.. 16

2.4.2. Обработка ошибок. 17

2.4.3. Сессия SDAI. 18

2.4.4. Репозитории. 19

2.4.5. Экземпляры схемы.. 20

2.4.6. Модели. 21

2.4.7. Функции Get и Put 22

2.4.7.1. Функции Get 22

2.4.7.2. Функции Put 23

3. Справка по функциям.. 23

3.1. Вступление. 23

3.1.1. Организация. 24

3.1.2. Класс соответствия. 24

3.1.3 Нереализованные функции. 24

3.2. sdaiAdd() 26

3.3. sdaiAddModel() 26

3.4. sdaiAddModelBN() 27

3.5. sdaiCloseRepository() 27

3.6. sdaiCloseSession() 27

3.7. sdaiCreateADB() 28

3.8. sdaiCreateAggr() 28

3.9. sdaiCreateAggrADB() 29

3.10. sdaiCreateAggrBN() 29

3.11. sdaiCreateAggrBNADB() 29

3.12. sdaiCreateComplexInstance() 29

3.13. sdaiCreateEmptyADB() 30

3.14. sdaiCreateInstance() 30

3.15. sdaiCreateInstanceBN() 31

3.16. sdaiCreateIterator() 31

3.17. sdaiCreateModel() 32

3.18. sdaiCreateModelBN() 32

3.19. sdaiCreateNestedAggrADB() 33

3.20. sdaiCreateNestedAggrByIndexADB() 33

3.21. sdaiCreateNestedAggrByItrADB() 33

3.22. sdaiCreateNPL() 34

3.23. sdaiCreateSchemaInstance() 34

3.24. sdaiCreateSchemaInstanceBN() 35

3.25. CreateSelectADB() 35

3.26. sdaiDeleteADB() 35

3.27. sdaiDeleteInstance()ъ. 35

3.28. sdaiDeleteIterator() 36

3.29. sdaiDeleteNPL() 36

3.30. sdaiDeleteSchemaInstance() 36

3.31. sdaiDeleteSchemaInstanceBN() 36

3.32. sdaiEnd() 37

3.33. sdaiFindInstanceRolesOf() 37

3.34. sdaiFindInstanceTypeOf() 37

3.35. sdaiFindInstanceUsedIn() 38

3.36. sdaiFindInstanceUsedInBN() 38

3.37. sdaiFindInstanceUsers() 38

3.38. FindTerminalDomain() 39

3.39. sdaiGetADBType() 39

3.40. sdaiGetADBValue() 39

3.41. sdaiGetAggrByIndex() 40

3.42. sdaiGetAggrByIterator() 40

3.43. GetAllAttributeDefinitions() 41

3.44. GetAllInstancesOfSchemaInstance() 41

3.45. GetAllSupertypes() 42

3.46. sdaiGetAttr() 42

3.47. sdaiGetAttrBN() 43

3.48. sdaiGetAttrDefinition() 43

3.49. sdaiGetAttrDefinitionBN() 43

3.50. GetAttributeDefinitions() 44

3.51. sdaiGetComplexEntity() 45

3.52. GetComponentsOfComplexEntity() 45

3.53. GetDefinedType() 45

3.54. sdaiGetDescription() 45

3.55. sdaiGetEntity() 46

3.56. sdaiGetEntityExtent() 46

3.57. sdaiGetEntityExtentBN() 47

3.58. sdaiGetInstanceModel() 47

3.59. sdaiGetInstanceType() 47

3.60. GetListOfInstances() 47

3.61. GetListOfSchemaInstances() 48

3.62. GetListOfSDAIModels() 48

3.63. sdaiGetLowerIndex() 48

3.64. sdaiGetMemberCount() 49

3.65. GetNamesOfComplexEntity() 49

3.66. sdaiGetSchema() 49

3.67. GetSchemaeList() 50

3.68. sdaiGetSchemaInstance() 50

3.69. sdaiGetUpperIndex() 50

3.70. sdaiInsertAfter() 50

3.71. sdaiInsertBefore() 51

3.72. sdaiInsertByIndex() 51

3.73. sdaiInsertNestedAggrAfter() 51

3.74. sdaiInsertNestedAggrAfterADB() 52

3.75. sdaiInsertNestedAggrBefore() 52

3.76. sdaiInsertNestedAggrBeforeADB() 52

3.77. sdaiInsertNestedAggrByIndex() 52

3.78. sdaiInsertNesterAggrByIndexADB() 53

3.79. sdaiIsInstanceOf() 53

3.80. sdaiIsInstanceOfBN() 53

3.81. sdaiIsEqual() 54

3.82. sdaiIsKindOf() 54

3.83. sdaiIsKindOfBN() 54

3.84. sdaiIsMember() 55

3.85. IsMemberIncludingNested() 55

3.86. sdaiNext() 55

3.87. sdaiOpenRepository() 56

3.88. sdaiOpenRepositoryBN() 57

3.89. sdaiOpenSession() 57

3.90. sdaiPrevious() 57

3.91. sdaiPutADBTypePath() 57

3.92. sdaiPutADBValue() 58

3.93. sdaiPutAggrByIndex() 58

3.94. sdaiPutAggrByIterator() 58

3.95. sdaiPutAttr() 59

3.96. sdaiPutAttrBN() 59

3.97. sdaiRemove() 59

3.98. sdaiRemoveByIndex() 60

3.99. sdaiRemoveByIterator() 60

3.100. RemoveItemFromAggregate() 60

3.101. sdaiRemoveModel() 60

3.102. sdaiRemoveModelBN() 61

3.103. sdaiRenameSchemaInstance() 61

3.104. sdaiRenameSchemaInstanceBN() 61

3.105. sdaiResetArrayIndex() 62

3.106. SetRepositorySwappingLimit() 62

3.107. SetRepositorySwappingLimitBN() 62

3.108. SetRTDSswappingLimit() 62

3.109. SetWorkPath() 63

3.110. sdaiTestAttr() 63

3.111. sdaiTestAttrBN() 63

3.112. sdaiUnsetADB() 64

3.113. sdaiUnsetArrayByIndex() 64

3.114. sdaiValidateArrayNotOptional() 64

3.115. Список дополнительных функций без описания. 65

3.115.1. sdaiextGetExtentIterator () 65

3.115.2. sdaiextGetAttributeIterator () 65

3.115.3. sdaiextGetInstanceByIterator () 65

3.115.4. sdaiextGetStringByIterator () 65

1. Общее представление о SDAI

1.1. Стандарт STEP

Стандарт ISO 10303 STEP (STandard for Exchange of Product data) – один из основных информационных CALS-стандартов. Изначально стандарт STEP планировался как формат представления данных, определения которых даны в форме, доступной для компьютерной интерпретации. Это – самое основное его отличие от существовавших ранее форматов, это обеспечивает как широту охватываемых стандартом предметных областей, так и их расширяемость. Инструмент, который обеспечивает такое отличие – это язык информационного моделирования EXPRESS.

Стандарт ISO 10303 STEP представляет собой взаимосвязанную систему томов.

 

Среди прочих форматов обмена данными STEP занимает особое место в силу следующих обстоятельств:

- Его официальный статус – это утвержденный Международный стандарт ISO;

- Широта охвата предметных областей

- Наличие формального, доступного для компьютерной интерпретации, описания типов данных средствами языка EXPRESS (Язык EXPRESS является составной частью стандарта STEP и имеет обозначение ISO 10303-11).

- Наличие механизма наследования типов.

- Наличие интеграции между смежными предметными областями за счет наследования типов данных.

 

Группа стандартов ISO STEP описывает методы обмена данными об изделии. Эти стандарты могут быть сгруппированы в элементы инфраструктуры и отдельные производственные информационные модели. Элементы инфраструктуры включают следующие определения:

EXPRESS – язык создания концептуальных схем (язык моделирования, воспроизведения информации) (том 11)

Описание обменного файла данных на EXPRESS-языке (том 21)

программный интерфейс приложения (SDAI) связанный с языками C, C++, Java и языками IDL на языке EXPRESS (тома 22-26):

- в томе 22 даны логическая структура данных SDAI и спецификация функций обращения к базе данных в общем виде (без привязки к конкретному языку программирования);

- в томе 23 дана спецификация функций обращения к базе данных на языке C++;

- в томе 24 дана спецификация функций обращения к базе данных на языке C;

- в томе 25 дана спецификация функций обращения к базе данных на языке FORTRAN. Этот том был отменен. В настоящее время номер присвоен проекту реализации SDAI средствами UML.

- в томе 26 дана спецификация функций обращения к базе данных на языке IDL.

- в томе 27 дана спецификация функций обращения к базе данных на языке JAVA.

- в томе 28 дана спецификация структур данных SDAI на языке XML.

аттестационные испытания структуры (том 31)

библиотека универсальных информационных моделей для геометрии, тополологии, PDM-данных (распознавания изделия), дат, времени и т. д. (40-ая серия томов).

 

В дополнение к томам инфраструктуры STEP, стандарт включает информационные модели EXPRESS для обмена данными в пределах производственных областей, включая: Явное Черчение (том 201), Ассоциативное Черчение (том 202), Конструкторская Документация (управление компоновкой 3-хмерных моделей) (том 203), конструирование автомобилей (том 214) и многие другие (Судостроение, Электроника, Обработка Из Листового Металла и т. д.)

 

1.2. Основные определения

Дадим определения некоторых основных понятий, необходимых для изучения основ моделирования.

 

Сущность Entity Отражение некоторого класса объектов в конкретной концептуальной схеме. Сущность отражает некоторые свойства, существенные с точки зрения той концептуальной схемы, в которой эта сущность определена. Сущность не обязательно отражает все те свойства, которыми обладают объекты соответствующего класса.
Сущность   Класс информации, характеризующийся общими свойствами
Концептуальная схема C Описание того: - какие объекты существуют в реальном мире с точки зрения данной предметной области; - какими свойствами, существенными с точки зрения данной предметной области, обладают эти объекты; - как объекты соотносятся между собой; - каким правилам должны удовлетворять свойства объектов; - какие функции могут выполнять объекты. Концептуальная схема может быть описана вербально или формально.
Экземпляр I Идентифицируемое значение, т.е. информационный объект, обладающий набором конкретных значений и доступный непосредственно для чтения и модификации.
Атрибут сущности AD То свойство соответствующего класса объектов реального мира, которым объекты, соответствующие данной сущности, обладают с точки зрения той концептуальной схемы, в которой сущность определена.
Параметр P Значение свойства объекта реального мира, отраженное в экземпляре сущности, который отражает данный объект, т.е. значение атрибута сущности экземпляра сущности.

1.3. Язык EXPRESS

Прежде чем приступить к рассмотрению языка EXPRESS, следует обозначить место языка в процессе построения модели изделия. На рисунке показано место языка EXPRESS с точки зрения “треугольника Фреге”.

 

 
 

Рис. 1. Место языка EXPRESS в стандарте STEP

 

Назначение языка EXPRESS – формальное описание концептуальных схем. Язык EXPRESS относится к декларативным языкам и не является языком программирования. EXPRESS – это язык концептуальных схем. Язык EXPRESS позволяет составить концептуальную схему предметной области в формализованном, доступном для компьютерной интерпретации виде.

Язык EXPRESS – это то средство, которое обеспечивает отличие стандарта STEP от прочих унифицированных средств представления данных и обмена данными.

 

 

 
 

Рис. 2. Роль языка EXPRESS в обеспечении компьютеризированного интегрированного производства.

 

Концептуальные схемы, написанные на языке EXPRESS, вместе с необходимыми пояснениями и толкованиями, являются Протоколами Применения (AP, Application Protocol) STEP.

Результатом компьютерной обработки схемы, написанной на языке EXPRESS (т.е. компиляции схемы) может быть:

- словарь данных, позволяющий компьютерным программам создавать и обрабатывать модели, построенные по откомпилированной концептуальной схеме. Такой словарь в стандарте STEP называется SDAI dictionary;

- библиотека классов на языке C++, служащая заготовкой для создания прикладных программных продуктов, решающих некоторые задачи, относящиеся к той области деятельности (предметной области), для которой создавалась концептуальная схема.

 

Из вышесказанного можно сделать заключение:

язык EXPRESS описывает модель мира на концептуальном уровне. Язык EXPRESS позволяет задать, какие объекты существуют в мире, какими наборами свойств обладают эти объекты, каким условиям должны удовлетворять свойства объектов, как объекты взаимодействуют между собой.

 

 

1.4. SDAI

SDAI - это несколько томов стандарта STEP, относящихся к методам реализации. Первый из методов реализации STEP (обменный файл) предусматривал представление и хранение данных, соответствующих STEP, только в символьном виде. Первые работы по реализации стандарта STEP начались задолго до утверждения стандарта. В ходе этих первых работ выяснилось, что кроме реализации стандарта в виде символьного обменного файла необходима и реализация в виде базы данных. Такой метод реализации и получил название SDAI (Standard Data Access Interface).

Второй метод реализации STEP - это протокол доступа к базам данным, содержимое которых определено средствами EXPRESS. Назначение такого протокола заключается в снижении стоимости эксплуатации интегрированной базы данных изделия за счет обеспечения совместимости сложных прикладных программных продуктов с такой базой данных.


Стандартный Интерфейс Доступа к Данным (SDAI) определяет интерфейс прикладного программирования для данных, заданных EXPRESS-языком, таких как Прикладные Протоколы STEP. STEP определяет функции SDAI и информационные модели в 22-м томе. Эти функции реализованы для конкретного языка программирования с помощью языковых связей. Определены реализации SDAI для C, C++, Java и CORBA/IDL. Этот документ описывает связь для языка С, как это определено в томе 24.

Рис.3.

 

В дополнение к операциям доступа к прикладным данным, приложения, построенные с использованием SDAI, имеют доступ к модели сессии, также определенной средствами EXPRESS. Модель сессии SDAI создается и изменяется в качестве побочного эффекта различных операций SDAI. Модель сессии содержит открытые наборы данных, способы доступа, протоколы сообщений об ошибках и т.д. Некоторые из реализаций SDAI могут обеспечивать словарь, содержащий определения данных. Определения данных сделаны средствами языка EXPRESS. Форма, в которой эти определения существуют, также описываются в SDAI.

 

1.5. Логическая организация данных SDAI

В SDAI дано описание логической организации базы данных. База данных состоит из репозиториев REPOSITORY, моделей SDAI MODEL, и экземпляров схем SCHEMA INSTANCE. База данных является объектно-ориентированной, поэтому содержимое ее представлено в виде множества объектов (экземпляров сущностей).

База данных, согласно SDAI, должна строиться по следующим принципам. Находящиеся в репозитории экземпляры сущностей (за исключением некоторых их разновидностей - об этом см. ниже) объединены в ассоциации. Такая ассоциация называется SDAI-модель. Один экземпляр сущности может входить только в одну SDAI-модель. SDAI-модель не может включать в себя другие SDAI-модели. SDAI-модель полностью находится в одном репозитории.

Одним из атрибутов SDAI-модели является ссылка на определение собственной " native" схемы EXPRESS. SDAI-модель может иметь только одну собственную схему. Каждый экземпляр сущности из числа входящих в данную SDAI-модель должен быть определен или в этой собственной схеме или в одной из схем, которая определена как интероперабельная с собственной схемой SDAI-модели.

Несколько SDAI-моделей, относящихся к одной схеме и к интероперабельным с ней схемам, могут быть объединены в экземпляр схемы - SCHEMA INSTANCE. Одна SDAI-модель может одновременно входить в несколько экземпляров схем. Экземпляр схемы является полем идентификации (информационной базой). Ссылки из экземпляров сущностей, входящих в экземпляр схемы на экземпляры сущностей, не входящие в экземпляр схемы, не допускаются. Возможность вхождения SDAI-модели одновременно в несколько экземпляров схем позволяет использовать общие информационные ресурсы в разделенном режиме.

Экземпляр схемы (SCHEMA INSTANCE) может включать SDAI-модели, существующие в нескольких репозиториях.

Информации о количестве и составе SDAI-моделей также хранится в виде экземпляров сущностей. Отличие экземпляров сущности, описывающих SDAI-модели от всех прочих экземпляров сущностей лишь в том, что сами экземпляры сущностей, описывающие SDAI-модель, ни в какую SDAI-модель в обязательном порядке не входят. В то же время запрета на вхождение этих экземпляров в какую-нибудь SDAI-модель нет. Сама SDAI-модель может быть структурирована с помощью механизма SCOPE (областей видимости). Области видимости образуют иерархическую структуру неограниченной глубины. Определены операции над областями видимости:

 

- формирование областей видимости (создание новой области видимости, добавление в область видимости экземпляра сущности, удаление экземпляра сущности из области видимости, управлению видимостью экземпляров сущностей из-за пределов области видимости);

- операции над областями видимости в целом - копирование, удаление и проверка целостности структуры данных.

1.6. Раннее и позднее (динамическое) связывание

 

Конкретные реализации SDAI могут быть разделены на две большие группы: реализация SDAI раннего связывания (EARLY BINDING) и реализация SDAI позднего связывания (LATE BINDING).

Реализация SDAI с ранним связыванием не содержит словаря данных. Реализация SDAI с поздним связыванием содержит словарь данных, доступный для приложения во время работы.

Словарь данных SDAI описывается в томе 22, часть 6. Интерфейс C-SDAI - динамического связывания.

 

1.6.1. Раннее связывание

Системы с ранним связыванием предполагают создание поддерживаемых конкретным языком программирования структур данных. Структуры данных отображают определения данных, сделанные средствами EXPRESS. Например, раннее связывание для Прикладного Протокола AP203, сделанное с использованием SDAI C++, использует для каждого определения, сделанного на EXPRESS, свой класс C++. Преимущество такого подхода состоит в возможности организации проверки типов.

Классы C++ для раннего связывания обычно генерируются компилятором EXPRESS (в специальном режиме генерации классов C++). Определения сущностей ENTITY отображаются в классы, определения типов TYPE отображаются или в классы, или в определения типов (TYPEDEF). Структура наследования, описанная средствами EXPRESS, отображается в иерархию классов C++. Каждый из классов имеет методы доступа и модификации для хранящихся атрибутов, и конструкторы для инициализации новых экземпляров. Ниже приведен простой пример определения сущностей, сделанного средствами EXPRESS, и соответствующие этому определению классы C++.

 

ENTITY Point;

x: REAL;

y: REAL;

END_ENTITY;

 

Прикладная программная система может использовать методы классов C++ для создания экземпляров сущностей, присвоения значений атрибутам и записи экземпляров сущностей в репозиторий.

 

/* Create a point using the default constructor

* and use the update methods to set its values. */

SdaiModelH mod;

PointH point1 = SdaiCreate(mod, Point);

Point1-> x (1.0);

Point1-> y (0.0);

 

сущность создается с применением специальной версии оператора new.

1.6.2. Позднее связывание

SDAI позднего связывания, такое как SDAI C, использует для доступа к данным словарь данных EXPRESS. При позднем связывании не используются генерируемые структуры. Для всех определений модели EXPRESS используется одна единственная структура данных.

Для поиска значений данных используется словарь данных SDAI. Прикладная программная система использует для присвоения и запроса значений использует ограниченный набор простых универсальных функций, а не специализированные функции для каждого из значений. Ниже приведен программный код прикладной программной системы, построенной на SDAI позднего связывания:

 

/* create new instances */

SdaiAppInstance point1;

point1 = sdaiCreateInstanceBN(myModel, “point”);

sdaiPutAttrBN(point1, “X”, sdaiREAL, 1.0);

sdaiPutAttrBN(point1, “Y”, sdaiREAL, 0.0);

 

В общем, позднее связывание полезно в тех случаях, когда требуется работа прикладного программного обеспечения с большим количеством определений данных, относящихся к нескольким схемам EXPRESS, в условиях, когда нет необходимости в строгом контроле типов. Определение типов данных, сделанное средствами EXPRESS, может быть изменено без отражения влияния этих изменений на прикладное программное обеспечение.

 

Следует учесть, что стандартный, не очень большой, Прикладной Протокол STEP может включать сотни определений типов данных (например, Протокол AP203 содержит определения 262 типов сущностей, и это далеко не самый большой из Прикладных Протоколов). При раннем связывании необходимо каждое из определений преобразовать в классы C++, откомпилировать реализации этих классов и собрать их в библиотеки.

Описанная на языке EXPRESS концептуальная модель данных STEP отличается большим многообразием типов сущностей и свойств сущностей, сложными отношениями наследования и широким использованием агрегатных типов данных, в том числе и с несколькими уровнями вложенности. Такая модель плохо совместима с реляционной моделью данных, и первые попытки организовать хранение данных STEP с использованием реляционных моделей не дали положительных результатов.

Принцип позднего связывания может быть реализован с использованием технологии динамических сетей. Разработка SDAI, первые варианты которого появились в 1992 году, является важным этапом в процессе перехода от реляционных моделей данных к объектно-ориентированным моделям.

 

1.7. Структура справочника

Это руководство описывает библиотеку SDAI и способы, необходимые для разработки приложений SDAI.

Программирование SDAI (часть 2) описывает детали, необходимые для разработки приложений SDAI.

Справочная информация по функциям (часть 3) описывает стандартные функции SDAI.

 

1.7.1. Условные обозначения типов шрифтов

В пределах параграфа функции, ключевые слова и имена файлов выделены жирным шрифтом, например libsdai.a или /usr/local/bin.

Имена функций показаны с круглыми скобками в конце, например sdaiOpenSession() или sdaiGetAttrBN().

Прототипы функций представлены в виде списка с каждым параметром на отдельной строке, а имена функций выделены жирным шрифтом, как указано ниже.

 

SdaiAppInstance sdaiCreateInstance (

SdaiModel model,

SdaiEntity entity

);

 

Примеры программ показаны отдельными параграфами в стиле шрифта “печатной машинки”:

 

SdaiSet extent = sdaiGetEntityExtentBN (model, " curve");

SditItrerator itor = sdaiCreateIterator (extent);

while (sdaiNext (itor)) {

SdaiInstance inst=NULL;


sdaiGetAggrByItrator (itor, sdaiINSTANCE, & inst);

/* Process the value in the instance */

 

Атрибуты и сущности из информационных моделей EXPRESS показаны жирным шрифтом. Когда идет ссылка на атрибут конкретной сущности, имя сущности отделено от атрибута точкой, например: schema_instance.repository. Эта ссылка на атрибут repository сущности schema_instance.

 

2. Программирование SDAI

 

2.1. Общее представление

Эта глава дает информацию, необходимую для разработки приложений при помощи интерфейса C SDAI. Здесь описано, как скомпилировать и запустить приложения SDAI, вслед за этим - описание типов данных SDAI C и некоторых способов программирования для управления ими.

 

2.2. Компилирование и запуск приложений SDAI

Чтобы откомпилировать приложение SDAI, вы должны дать указание вашему компилятору использовать заголовочный файл и библиотеки SDAI. Чтобы сделать определения SDAI доступными для программы, приложение SDAI должно включать оператор:

 

#include < sdai.h>

 

2.2.1. Компилирование приложений SDAI

Каждый исходный файл, который вызывает функцию SDAI, включает заголовочный файл < sdai.h>.

 

2.2.2. Словарь SDAI

Словарь данных описывает структуру информационной модели для приложения. Для большего количества информации о содержимом словаря, смотрите Dictionary Schema (схему словаря) (часть 6.4). Библиотека SDAI генерирует словарь за время выполнения программы. Если структурные данные EXPRESS отсутствуют или старой версии, библиотека генерирует ограниченную форму словаря, которой достаточно для многих приложений SDAI. Вместе со структурными данными SDAI должна генерировать полный соответствующий словарь, содержащий все типы, правила и атрибуты информационной модели EXPRESS.

 

Структурные данные требуются в следующих случаях:

Ваше приложение использует интерпретатор EXPRESS, чтобы получить значения для производных атрибутов или проверить достоверность правил(в данной версии SDAI не реализовано).

Вашему приложению нужен доступ к значениям инверсных атрибутов

Приложение исследует словарь SDAI и ему необходимо определить точный тип каждого атрибута. (Без полного словаря, вы не получите правильных типов из описанных типов базисных элементов, кроме SELECTS)

 

2.3. Типы данных SDAI

SDAI обеспечивает доступ к данным, определенным EXPRESS из языка программирования C. Этот раздел описывает, как типы данных EXPRESS отображаются на типы данных языка С при помощи SDAI. Все эти типы описаны в заголовочном файле < sdai.h>.

2.3.1. Константы SDAI

Файл < sdai.h> определяетрядконстант. Все константы начинаются со строчных букв sdai с выделением текущего имени константы заглавными буквами:

 

sdaiNULL Instance or aggregate which does not exist

sdaiTRUE

sdaiFALSE Boolean and Logical values

sdaiUNKNOWN

sdaiBIT0

sdaiBIT1 Binary Values

sdaiE Mathematical constant e (2.718281...)

sdaiPI Mathematical constant pi (3.141592...)

 

2.3.2. Простые типы

Связывание SDAI определяет несколько типов данных, которые используются для параметров функций, определенных в связывании. В целом, вам лучше использовать типы данных, определенные SDAI, чем основные типы С, так как они могут меняться от версии к версии. Вот эти типы:

 

EXPRESS Type SDAI C Type Underlying C Type

BINARY SdaiBinary SdaiBit *

BOOLEAN SdaiBoolean int

ENUMERATION SdaiEnum char *

INTEGER SdaiInteger long

LOGICAL SdaiLogical int

NUMBER SdaiReal double

REAL SdaiReal double

STRING SdaiString char *

 

Строки – обычные строки C с завершающим нулем, поэтому строки SDAI можно использовать в качестве параметров для стандартных строковых функций С. Двоичный кодпредставлен как строка с завершающим нулем sdaiBIT0 и sdaiBIT1. В этой реализации это означает, что двоичные коды – это строки ASCII из символов ‘0’ и ‘1’ Для получения длины двоичного кода используйте функцию C strlen(). Значения подсчета представлены как строки (с завершающим нулем).

 

2.3.3. Экземпляры сущностей

Экземпляры сущностей (или просто сущность) представлена с помощью типа C SdaiInstance. Есть ряд более характерных типов SdaiInstance, и они могут быть использовано всюду, где требуетсядескриптор типа SdaiInstance. Они организованы в следующую концептуальную иерархию типов.

 

SdaiInstance

SdaiAppInstance

SdaiModel

SdaiRep

SdaiSession

SdaiAttr

SdaiExplicitAttr

SdaiNamedType

SdaiEntity

SdaiDefinedType

SdaiWhereRule

SdaiUniRule

SdaiGlobalRule

SdaiSchema

SdaiSchemaInstance

SdaiTrx

 

Таким образом, дескриптор типа SdaiModel можно использовать как параметр для функции sdaiGetAttrBN(), даже если прототип требует параметр типа SdaiInstance.


Рис. 4. Представление экземпляра сущности

2.3.4. Множества (агрегаты)

Множества представлены типом C SdaiAggr. Множества состоят из множеств с повторяющимися элементами, наборов, массивов и списков и организованы в следующую иерархию типов:

 

SdaiAggr

SdaiOrderedAggr

SdaiArray

SdaiList

SdaiUnorderedAggr

SdaiSet

SdaiBag

 

Например, любой из вышеперечисленных типов можно использовать там, где требуется SdaiAggr.

2.4. Операции SDAI

Сессия SDAI представляет собой набор операций на наборе данных. Все операции SDAI происходят в пределах контекста (состояния) сессии. Экземпляры данных STEP сами по себе содержаться в SDAI моделях. Каждая модель содержится в репозитории. SDAI приложение должно управлять сессиями, репозиториями и моделями, чтобы получить доступ к текущим данным STEP. В целом, приложение SDAI должно выполнять следующие действия:

 

open session

open repository

open model(s)

manipulate data

close model(s)

close repository

close session

 

Этот раздел описывает, как выполнять эти операции с помощью библиотеки SDAI.

 

2.4.1. Управление памятью

Строки, перечисления и файлы, содержащие двоичные данные представлены в виде строк с завершающим нулем. Когда значение одного из этих типов передается в библиотеку SDAI в качестве параметра, она делает копию, если требуется. После вызова, приложение может отделаться от первоначальной строки. Когда SDAI возвращает такое значение приложению, оно должно рассматривать его, как только для чтения. Содержание памяти не будет нарушено, по крайней мере, до тех пор, пока не поступит следующий вызов, который вернет строку, перечисление или двоичный код.

 

2.4.2. Обработка ошибок

В данной версии SDAI не реализована.

2.4.3. Сессия SDAI

Все операции SDAI должны выполняться в рамках сессии. Чтобы начать сессию вызовите sdaiOpenSession(). После того, как операции со SDAI завершены, используйте sdaiCloseSession(), чтобы закрыть сессию. Только одна сессия может быть открыта в одно и тоже время, но количество открытий-закрытий не ограничено. Функция sdaiOpenSession() возвращает идентификатор экземпляра сущности объекта «сессия». Эта сущность является объектом «сессии» SDAI. Идентификатор объекта “сессия” должен быть сохранен для последующих вызовов, таких как sdaiOpenRepository() и sdaiCloseSession(). Объект “сессия” обеспечивает приложению доступ к внутреннему состоянию реализации SDAI. Объект “сессия” является экземпляром сущности в схеме “сессия”, как это описано в 22-м томе:

ENTITY sdai_session;

sdai_implementation: implementation;

recording_active: BOOLEAN;

errors: LIST [0:? ] OF error_event;

known_servers: SET [1:? ] OF sdai_repository;

active_servers: SET [1:? ] OF sdai_repository;

active_models: SET [1:? ] OF sdai_model;

data_dictionary: OPTIONAL schema_instance;

INVERSE

active_transaction: SET [0: 1] OF sdai_transaction

FOR owning_session;

END_ENTITY;

 

2.4.4. Репозитории

Репозитории – это коллекции SDAI моделей, на физическом уровне представленные как базы данных. Для доступа к содержимому репозитория, он должен быть открыт. В модели «сессия» репозиторий определяется сущностями sdai_repository и sdai_repository_contents:

 

ENTITY sdai_repository;

name: STRING;

contents: sdai_repository_contents;

description: STRING;

INVERSE

session: sdai_session FOR known_servers;

UNIQUE

UR1: name, session;

END_ENTITY;

ENTITY sdai_repository_contents;

models: SET[0:? ] OF sdai_model;

schemas: SET[0:? ] OF schema_instance;

INVERSE

repository: sdai_repository FOR contents;

END_ENTITY;

 

Для открытия репозитория используйте также: sdaiOpenRepository() или sdaiOpenRepositoryBN(). Если вам известно имя репозитория, используйте sdaiOpenRepositoryBN():

 

SdaiSession sess;

SdaiRep repo;

session = sdaiOpenSession();

repo = sdaiOpenRepositoryBN (session, " standard_3.0");

 

Если вы не знаете, какой из репозиториев будет доступен, вы можете проверить набор репозиториев, хранящийся в атрибуте “ known_servers ” объекта «сессии» SDAI и открыть любой из найденных там репозиториев. Следующая программа показывает все репозитории, доступные приложению:

 

#include < sdai.h>

$include < stdio.h>

int main()

{

SdaiSession sess;

SdaiAggr reposet=NULL;

SdaiIterator itor;

SdaiString reponame;

SdaiInstance repo;

sess = sdaiOpenSession ();

sdaiGetAttrBN (sess, " known_servers", sdaiAGGR, & reposet);

itor = sdaiCreateIterator (reposet);

while (sdaiNext (itor)) {

repo = NULL;

sdaiGetAggrByIterator (itor, sdaiINSTANCE, & repo);

if (! repo) continue; /* paranoia check, should not happen*/

sdaiGetAttrBN (repo, " name", sdaiSTRING, & reponame);

printf (" Repository: %s\n", reponame);

}

sdaiCloseSession (sess);

return 0;

 

 
 

Рис.5. Структура репозитория.

 

2.4.5. Экземпляры схемы

Экземпляр схемы это набор моделей, которые некоторым образом концептуально связаны между собой. Экземпляры схемы используются, чтобы определить область, для которой оцениваются глобальные правила и правила уникальности схемы EXPRESS. Модель может принадлежать различным экземплярам схемы. Схема представлена как файл в репозитории, основанном на schema_instance_schema. Эта схема содержит следующую сущность, которая определяет один экземпляр схемы:

 

ENTITY sdai_schema_instance;

associated_models: SET [0:? ] OF STRING;

native_schema: STRING;

change_date: STRING;

validation_date: STRING;

validation_result: LOGICAL;

validation_level: INTEGER;

END_ENTITY;

 

Когда экземпляр схемы доступен, библиотека SDAI конвертирует экземпляр схемы во внутреннюю форму, определенную в модели совокупности:

 

ENTITY schema_instance;

name: STRING;

associated_models: SET [0:? ] OF sdai_model;

native_schema: schema_definition;

repository: sdai_repository;

change_date: OPTIONAL time_stamp;

validation_date: time_stamp;

validation_result: LOGICAL;

validation_level: INTEGER;

UNIQUE

UR1: name, repository;

WHERE

WR1: SELF IN SELF.repository.contents.schemas;

END_ENTITY;

 

2.4.6. Модели

Каждый репозиторий содержит ряд моделей. Модель может быть открыта как в режиме только чтения, так и в режиме чтения-записи. В модели только для чтения любая операция, изменяющая содержимое модели запрещена и генерирует ошибку. Когда атрибут ссылается на элемент в другой модели, вторая модель открывается неявно в режиме только чтения, если она уже не открыта. В модели “сессия” модель определяется сущностями sdai_model и sdai_model_contents:

 

ENTITY sdai_model;

name: STRING;

contents: sdai_model_contents;

underlying_schema: schema_definition;

repository: sdai_repository;

change_date: OPTIONAL time_stamp;

mode: OPTIONAL access_type;

INVERSE

associated_with: SET [0:? ] OF schema_instance FOR

associated_models;

UNIQUE

UR1: repository, name;

WHERE

WR1: SELF IN SELF.repository.contents.models;

END_ENTITY;

ENTITY sdai_model_contents;

instances: SET[0:? ] OF entity_instance;

folders: SET[0:? ] OF entity_extent;

populated_folders: SET[0:? ] OF entity_extent;

END_ENTITY;

 

Используйте функцию sdaiAccessModelBN() для открытиямодели по имени. Если вам не известно имя модели, вы можете просмотреть набор моделей, находящихся в соответствии с репозиторием, при помощи проверки атрибута contents.sdai_models в открытом репозитории. Новые модели можно создать при помощи функций sdaiCreateModelBN() и sdaiCreateModel(). После создания модели, вам нужно будет ее открыть (в режиме чтения-записи), прежде чем любая информация может быть сохранена в ней.

 

SdaiModel newmod = sdaiCreateModelBN (" modname", " config_control_design");

sdaiAccessModel (newmod, sdaiRW);

 

2.4.7. Функции Get и Put

В связывании существует несколько функций, которые извлекают информацию для приложения. Конечно, чем иметь раздельные функции put и get для каждого простого типа, SDAI обеспечивает единый вариант функции get или put, которая принимает параметр, идентифицирующий нужный тип. Чтобы определить тип значения, к которому было обращение, заголовочный файл < sdai.h> определяет перечисляемый тип SdaiPrimitiveType, который включает следующие значения:

 

sdaiAGGR

sdaiBINARY

sdaiBOOLEAN

sdaiENUM

sdaiINSTANCE

sdaiINTEGER

sdaiLOGICAL

sdaiREAL

sdaiSTRING

 

2.4.7.1. Функции Get

Все функции get (в том числе sdaiGetAttr(), sdaiGetAggrByIterator() и т.д.) имеют 2 одинаковых конечных параметра: один типа sdaiPrimitiveType, называющийся type (тип) и один типа void *, называемый value (значение). Чтобы использовать эти функции, вы должны передать адрес объекта, о котором SDAI предоставит информацию. Параметр type должен распознать тип объекта, который вы передали. Заданный тип должен соответствовать типу C, который вы передаете, но необязательно типу EXPRESS атрибута, который вы извлекаете. Если это необходимо и возможно, библиотека SDAI преобразовывает представление EXPRESS в требуемый тип. Если это преобразование невозможно, обычно генерируется ошибка sdaiVT_NVLD (неверный тип значения). Следующий фрагмент кода извлекает значение атрибута, имеющего имя fooatt из экземпляра inst, используя функцию getAttrBN(). Возвращаемое значение (переменная val) инициализируется до sdaiNULL, так что приложение может определить, был ли вызов успешным. Если sdaiGetAttrBN не сработала, генерируется ошибка, и значение никогда не заполняется, оставляя val с ее предыдущим, неопределенным значением. Это может привести к повреждению сегментации или другому неопределенному изменению, если значения ненужных данных, когда-нибудь будут использоваться в будущем вызове SDAI.

 

SdaiAppInstance val = sdaiNULL;

sdaiGetAttrBN (inst, " fooatt", sdaiINSTANCE, & val);

 

Так как sdaiGetAttrBN возвращает содержимое val, возможно объединить различные вызовы.

 

SdaiInstance ival=sdaiNULL;

SdaiREAL realval;

sdaiGetAttrBN (sdaiGetAttrBN(inst, " fooatt", sdaiINSTANCE, & inst1),

" baratt", sdaiREAL, & realval);

 

Если бы требуемый тип был простым (например, таким как строка, целое число или вещественное число), функция вернула бы скорее адрес, который передавался как параметр value, чем значение, которое там находится.

 

 

2.4.7.2. Функции Put

SDAI предусматривает набор функции, которые позволяют приложению корректировать данные. Эти функции включают sdaiPutAttr(), sdaiPutADBValue(), sdaiAdd() и многие другие. Все функции put требуют 2 одинаковых конечных параметра: один типа SdaiPrimitiveType, идентифицирующий тип данных, другой из требуемых типов содержит фактические данные.

Предупреждение – Конечный параметр функций get определен в заголовочном файле как “ ... ”, так чтобы знать, что ваш компилятор C не может к любому извлекаемому типу неправильно подобрать ошибки, которые могут привести к неопределенным изменениям.

Как и в функциях get, параметр type определяет тип параметра, а не тип базового атрибута, который устанавливается. Когда возможно, преобразуется значение. Если значение нельзя преобразовать в базовый тип, библиотека генерирует ошибку (обычно sdaiVT_NVLD). Следующий тип использует функцию sdaiPutAttr(), чтобы включить вещественное значение в атрибут, названный realatt:

 

sdaiPutAttrBN (inst, " realatt", sdaiREAL, 3.651);

 

Вы могли также определить значение как целое число, а интерфейс преобразует его в вещественное значение:

 

sdaiPutAttrBN (inst, " realatt", sdaiRINTEGER, 42);

 

3. Справка по функциям

 

3.1. Вступление

Эта глава дает справку по функциям, выстроенных в алфавитном порядке и предусматриваемых библиотекой программирования C SDAI.

 

3.1.1. Организация

Описание каждой функции начинается с прототипа функции. После прототипа описывается назначение функции и ее параметры. Эта часть также описывает любые побочные явления, которые могут быть у функции, и какое значение, если оно существует, возвращается функцией.

 

Ошибки

Раздел об ошибках выдает список ошибок и дает краткое разъяснение, какие режимы могут послужить причиной того, что каждая ошибка будет помечена.

 

Пример

Для некоторых функции это справочное руководство дает пример того, как программу можно использовать. Этот пример ни завершенная программа, ни функция, а схема, которая коротко показывает, как можно использовать функцию

 

See also (Посмотрите также)

Этот раздел дает перекрестную ссылку на зависимые функции в связывании SDAI, обеспечивает ссылку на параграфы стандарта SDAI (и том 22 и том 24), которые определяют функцию.

 

3.1.2. Класс соответствия

В этом документе описана реализация SDAI, которая поддерживает следующие классы соответствия:

2 уровень поддержки входного сообщения

2 уровень поддержки вычисления выражения

1 уровень поддержки регистрации событий

1 уровень поддержки области действия

1 уровень поддержки области эквивалентности

 

Это значит, что эта реализация обеспечивает поддержку, требуемую классами реализации 1 и 2, исключая поддержку области действия. Она соответствует классу реализации 4, за исключением поддержки регистрации сессии.

 

3.1.3 Нереализованные функции

Здесь представлен список функций, определенных в томе 22, но не документированные здесь. Эти функции не включены в класс соответствия, который обеспечивает эта реализация SDAI, и сгенерируют ошибку FN_NAVL (функция недоступна), если их вызвать. Эти нереализованные функции:

 

1. int sdaiLogicalCompare (SdaiLogical value1, SdaiLogical value2)

2. SdaiErrorCode sdaiErrorQuery(void)

3. void sdaiSetErrorHandler(SdaiErrorHandler function)

4. SdaiErrorHandler sdaiRestoreErrorHandler(void)

5. void sdaiRecordEvent(SdaiSession session, SdaiString functionName, SdaiErrorCode error, SdaiString description)

6. SdaiBoolean sdaiSetEventRecording(SdaiSession session, SdaiBoolean setRec)

7. SdaiTrx sdaiStartTrx(SdaiSession session, SdaiAccessMode mode)

8. void sdaiBreakTrx(SdaiTrx transaction, SdaiCommitMode mode)

9. void sdaiEndTrx(SdaiTrx transaction, SdaiCommitMode mode)

10. SdaiInteger sdaiQuery(SdaiAggr source, SdaiString criteria, SdaiInstance instance,

SdaiNPL result)

11. SdaiLogical sdaiIsRecordingOn(SdaiSession session)

12. void sdaiDeleteModel(SdaiModel model)

13. void sdaiRenameModel(SdaiModel model, SdaiString modelName)

14. SdaiModel sdaiAccessModel(SdaiModel model, SdaiAccessMode mode)

15. SdaiModel sdaiAccessModelBN(SdaiRep repository, SdaiString modelName, SdaiAccessMode mode)

16. void sdaiPromoteModel(SdaiModel model)

17. void sdaiEndModelAccess(SdaiModel model)

18. SdaiLogical sdaiValidateGlobalRule(SdaiSchemaInstance schemaInstance, SdaiGlobalRule rule, SdaiNPL *list)

19. SdaiLogical sdaiValidateGlobalRuleBN(SdaiSchemaInstance schemaInstance, SdaiString ruleName, SdaiNPL *list)

20. SdaiLogical sdaiValidateUniqueness(SdaiSchemaInstance schemaInstance, SdaiUniRule uniRule, SdaiInstance *instance)

21. SdaiLogical sdaiValidateUniquenessBN(SdaiSchemaInstance schemaInstance, SdaiString entityName, SdaiString uniRuleName, SdaiInstance *instance)

22. SdaiLogical sdaiValidateReferenceDomain (SdaiSchemaInstance schemaInstance, SdaiAppInstance appInstance, SdaiNPL *list)

23. SdaiLogical sdaiValidateSchemaInstance(SdaiSchemaInstance schemaInstance)

24. SdaiLogical sdaiIsValidationCurrent(SdaiSchemaInstance schemaInstance)

25. void sdaiUndoChanges(SdaiModel model)

26. void sdaiSaveChanges(SdaiModel model)

27. SdaiAppInstance sdaiCreateComplexInstanceBN(SdaiModel model, SdaiNPL nameList)

28. SdaiEntity sdaiGetComplexEntityBN(SdaiString schemaName, SdaiNPL nameList)

29. SdaiBoolean sdaiIsSubtypeOf(SdaiEntity subtype, SdaiEntity supertype)

30. SdaiBoolean sdaiIsSubtypeOfBN(SdaiString schemaName, SdaiString subName, SdaiString superName)

31. SdaiBoolean sdaiIsSDAISubtypeOf(SdaiEntity subtype, SdaiEntity supertype)

32. SdaiBoolean sdaiIsSDAISubtypeOfBN(SdaiString schemaName, SdaiString subName, SdaiString superName)

33. SdaiBoolean sdaiIsDeqWith(SdaiEntity entityType1, SdaiEntity entityType2)

34. SdaiBoolean sdaiIsDeqWithBN(SdaiString schemaName, SdaiString entityName1, SdaiString entityName2)

35. SdaiBoolean sdaiIsSDAIKindOf(SdaiInstance instance, SdaiEntity entity)

36. SdaiBoolean sdaiIsSDAIKindOfBN(SdaiInstance instance, SdaiString entityName)

37. void sdaiGetAttrs(SdaiInstance instance, SdaiInteger numberAttr, SdaiAttr attribute, SdaiPrimitiveType valueType, void *value,...)

38. void sdaiGetAttrsBN(SdaiInstance instance, SdaiInteger numberAttr, SdaiString attributeName, SdaiPrimitiveType valueType, void *value,...)

39. SdaiADB *sdaiGetAllAttrs(SdaiInstance instance, SdaiInteger *numberAttr)

40. SdaiAppInstance sdaiNearCopyInstance(SdaiAppInstance instance)

41. SdaiAppInstance sdaiFarCopyInstance(SdaiAppInstance instance, SdaiModel model)

42. void sdaiUnsetAttr(SdaiAppInstance instance, SdaiExplicitAttr attribute)

43. void sdaiUnsetAttrBN(SdaiAppInstance instance, SdaiString attributeName)

44. SdaiString sdaiGetPersistentLabel(SdaiAppInstance instance, SdaiString labelBuffer)

45. SdaiAppInstance sdaiGetSessionId(SdaiRep repository, SdaiString label)

46. SdaiLogical sdaiValidateWhereRule(SdaiAppInstance instance, SdaiWhereRule rule)

47. SdaiLogical sdaiValidateWhereRuleBN(SdaiAppInstance instance, SdaiString ruleName)

48. SdaiBoolean sdaiValidateRequiredAttrs(SdaiAppInstance instance, SdaiNPL *list)

49. SdaiLogical sdaiValidateInverseAttrs(SdaiAppInstance instance, SdaiNPL *list)

50. SdaiLogical sdaiValidateAttrTypes(SdaiAppInstance instance, SdaiNPL *list)

51. SdaiLogical sdaiValidateAggrSizes(SdaiAppInstance instance, SdaiNPL *list)

52. SdaiLogical sdaiValidateAggrUni(SdaiAppInstance instance, SdaiNPL *list)

53. SdaiLogical sdaiValidateArraySparseness(SdaiAppInstance instance, SdaiNPL *list)

54. SdaiLogical sdaiValidateStringWidth(SdaiAppInstance appInstance, SdaiNPL *list)

55. SdaiLogical sdaiValidateBinaryWidth(SdaiAppInstance appInstance, SdaiNPL *list)

56. SdaiLogical sdaiValidateRealPrecision(SdaiAppInstance appInstance, SdaiNPL *list)

57. void sdaiPutAttrs(SdaiAppInstance appInstance, SdaiInteger numberAttr, SdaiAttr attribute, SdaiPrimitiveType valueType,...)

58. void sdaiPutAttrsBN(SdaiAppInstance appInstance, SdaiInteger numberAttr, SdaiString attributeName, SdaiPrimitiveType valueType,...)

59. void sdaiPutAllAttrs(SdaiAppInstance appInstance, SdaiInteger numberAttr, SdaiADB *values)

60. SdaiAggr sdaiCreateNestedAggrByItr(SdaiAggr aggregate, SdaiIterator current)

61. SdaiAggr sdaiCreateNestedAggr(SdaiUnorderedAggr aggregate)

62. SdaiAggr sdaiCreateNestedAggrByIndex(SdaiOrderedAggr aggregate, SdaiAggrIndex index)

63. SdaiBoolean sdaiTestArrayByIndex(SdaiArray array, SdaiAggrIndex index)

64. SdaiBoolean sdaiTestArrayByItr(SdaiIterator iterator)

65. void sdaiUnsetArrayByItr(SdaiIterator iterator)

66. SdaiList sdaiCreateAttrTypePath(SdaiAppInstance instance, SdaiAttr attribute)

67. SdaiList sdaiCreateAggrTypePathByIndex(SdaiOrderedAggr aggregate, SdaiAggrIndex index)

68. SdaiList sdaiCreateAggrTypePathByItr(SdaiIterator iterator)

69. SdaiList sdaiGetADBTypePath(SdaiADB block)

70. SdaiLogical sdaiValidateTypePath(SdaiAppInstance appInstance, SdaiNPL *list)

 

3.2. sdaiAdd()

void sdaiAdd (

SdaiUnorderedAggr unorderedAggr,

SdaiPrimitiveType valueType,

< TYPE> value

);

 

Функция sdaiAdd() добавляет значение неупорядоченному множеству. Параметр valueType определяет тип параметра value и должен быть sdaiINTEGER, sdaiREAL, sdaiBOOLEAN, sdaiLOGICAL, sdaiSTRING, sdaiBINARY, sdaiENUM, sdaiINSTANCE, sdaiAGGR или sdaiADB.






© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.