Создание записи таблицы замены кода из спецификаций строк концептуальных аргументов и аргументов реализации
возвращает запись таблицы замены кода. Запись отображает концептуальное представление функции или оператора в представление реализации. 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 u2int16 y1 = int16 u1 >> int16 u2int16 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) |