Создайте заменяющую запись таблицы кода из концептуального и спецификаций строки аргумента реализации
возвращает заменяющую запись таблицы кода. Запись сопоставляет концептуальное представление функции или оператора к представлению реализации. tableEntry
= createCRLEntry(crTable
,conceptualSpecification
,implementationSpecification
)conceptualSpecification
аргумент является вектором символов или скаляром строки, который задает имя и концептуальные аргументы, знакомые генератору кода, для функции или оператора, чтобы заменить. 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) |