Создайте запись таблицы замещения кода из спецификаций строк концептуальных аргументов и аргументов реализации
возвращает запись таблицы замещения кода. Запись сопоставляет концептуальное представление функции или оператора с реализацией представления. The tableEntry
= createCRLEntry(crTable
,conceptualSpecification
,implementationSpecification
)conceptualSpecification
аргумент является вектором символов или строковым скаляром, который задает имя и концептуальные аргументы, знакомые генератору кода, для заменяемой функции или оператора. The implementationSpecification
Аргумент является символьным вектором или строковым скаляром, который задает имя и аргументы реализации C/C + + для функции замены.
Эта функция не поддерживает:
Реализации C++
Выравнивание данных
Замена оператора сетевыми аргументами наклона
Спецификации параметра входа (для примера, приоритета, алгоритма, информации о здании)
Замена семафоров и мьютексных функций
В спецификациях синтаксиса поместите пространство до и после символа оператора. Для примера используйте double u1 + double u2
вместо double u1+double u2
. Кроме того, звездочка (*), тильда (~) и точка с запятой (;) имеют следующее значение.
Символ | Значение |
---|---|
* |
|
~ | Исходя из положения символа, наклоны или смещение должны быть одинаковыми для различных типов данных. |
; | Разделяет области значений размерностей. Для примера, [1 10; 1 100] задает вектор с длиной от 10 до 100. |
В следующей таблице показан синтаксис концептуальных спецификаций и спецификаций реализации, основанных на:
Создается ли запись для функции или оператора.
Тип или характеристика замены кода.
Тип замены | Концептуальный синтаксис | Синтаксис реализации |
---|---|---|
Синтаксис замены кода функции | ||
Типичный | double y1 = sin(double u1) | double y1 = mySin(double u1) |
Выведите типы данных аргументов реализации из концептуальной спецификации | double y1 = sin(double u1) | y1 = mySin(u1) |
Выведите аргументы реализации и типы данных из концептуальной спецификации | double y1 = sin(double u1) | mySin |
Изменение типа данных | single y1 = sin(single u1) | double y1 = mySin(double u1) |
Переупорядочить аргументы | double y1 = atan2(double u1, double u2) | y1 = myAtan(u2, u1) |
Задайте вектор-столбец аргументы | double y1 = sin(double u1[10]) | double y1 = mySin(double* u1) |
Задайте вектор-столбец аргументы и размерность области значений | double y1[1 100; 1 100] = sin(double u1[1 100; 1 100]) | mySin(double* u1, double* y1) |
Переделайте возвращаемое значение как выходной аргумент | double y1 = sin(double u1) | mySin(double u1, double* y1) |
Задайте типы данных с фиксированной точкой | fixdt(1,16,3) y1 = sin(fixdt(1,16,3) u1) | int16 y1 = mySin(int16 u1) |
Задайте типы данных с фиксированной точкой и задайте CheckSlope на false , CheckBias на true , и Bias к 0 | fixdt(1,16,*) y1 = sin(fixdt(1,16,*) u1) | int16 y1 = mySin(int16 u1) |
Задайте типы данных с фиксированной точкой и задайте SlopesMustBeTheSame на true , CheckSlope на false , CheckBias на true , и Bias к 0 | fixdt(1,16,~) y1 = sin(fixdt(1,16,~) u1) | int16 y1 = mySin(int16 u1) |
Задайте типы данных с фиксированной точкой и задайте SlopesMustBeTheSame на true , BiasMustBeTheSame на true , CheckSlope на false , и CheckBias на false | fixdt(1,16,~,~) y1 = sin(fixdt(1,16,~,~) u1) | int16 y1 = mySin(int16 u1) |
Задайте несколько выходных аргументов | [double y1 double y2] = foo(double u1, double u2) | double y1 = myFoo(double u1, double u2, double* y2) |
Синтаксис замены кода оператора | ||
Типичный | int16 y1 = int16 u1 + int16 u2 | int16 y1 = myAdd(int16 u1, int16 u2) |
Задайте типы данных с фиксированной точкой | fixdt(1,16,3) y1 = fixdt(1,16,3) u1 + fixdt(1,16,3) u2 | int16 y1 = myAdd(int16 u1, int16 u2) |
Задайте типы данных с фиксированной точкой и задайте CheckSlope на false , CheckBias на true , и Bias к 0 | fixdt(1,16,*) y1 = fixdt(1,16,*) u1 + fixdt(1,16,*) u2 | int16 y1 = myAdd(int16 u1, int16 u2) |
Укажите типы данных с фиксированной точкой, подстановочный символ, уклоны должны быть одинаковыми и нулевое смещение | fixdt(1,16,~,0) y1 = fixdt(1,16,~,0) u1 + fixdt(1,16,~,0) u2 | int16 y1 = myAdd(int16 u1, int16 u2) |
Приглашать на однотипные роли | int16 y1 = int8 u1 | int16 y1 = myCast(int8 u1) |
Сдвиг | int16 y1 = int16 u1 << int16 u2 int16 y1 = int16 u1 >> int16 u2 int16 y1 = int16 u1 .>> int16 u2 | int16 y1 = myShiftLeft(int16 u1, int16 u2) int16 y1 = myShiftRightArithmetic(int16 u1, int16 u2) int16 y1 = myShiftRightLogical(int16 u1, int16 u2) |
Задайте реляционный оператор | bool y1 = int16 u1 < int16 u2 | bool y1 = myLessThan(int6 u1, int16 u2) |
Задайте умножение и деление | int32 y1 = int32 u1 * in32 u2 / in32 u3 | int32 y1 = myMultDiv(int32 u1, int32 u2, int32 u3) |
Задайте матричное умножение | double y1[10][10] = double u1[10][10] * double u2[10][10] | myMult(double* u1, double* u2, double* y1) |
Задайте поэлементное матричное умножение | double y1[10][10] = double u1[10][10] .* double u2[10][10] | myMult(double* u1, double* u2, double* y1) |
Задайте матричное умножение с транспонированием входного параметра | double y1[10][10] = double u1[10][10]' * double u2[10][10] | myMult(double* u1, double* u2, double* y1) |
Задайте матричное умножение с Эрмитианом входном параметре | cdouble y1[10][10] = cdouble u1[10][10]' * cdouble u2[10][10] cdouble y1[10][10] = cdouble u1[10][10] * cdouble u2[10][10]' | myMult(cdouble* u1, cdouble* u2, cdouble* y1) |
Задайте левое матричное деление | double y1[10][10] = double u1[10][10] \ double u2[10][10] | myLeftDiv(double* u1, double* u2, double* y1) |
Задайте правое матричное деление | double y1[10][10] = double u1[10][10] / double u2[10][10] | myRightDiv(double* u1, double* u2, double* y1) |