ГОСТ ISO/1EC 24724—2011
inti;
int mxwelement;
int subVal. lessVal:
int narrowMask = 0;
for (bar = 0; bar < elements-1; bar++)
{
for (elmWidth = 1. narrowMask |= (1«bar);
elmWidth++. nanowMask &= —<1«bar>)
{
/* получение всех комбинаций 7
subVal = combins(n-elmWidth-1. elements-bar-2);
/• исключение комбинаций с отсутствием элементов шириной один модуль 7
if ((InoNarrow) && (narrowMask == 0) &&
(n-elmWidth-(elements-bar-l) >= elements-bar-1))
{
subVal — combins(n-elmWtdth-(elements-bar), eiements-bar-2);
}
/* исключение комбинаций с размером (шириной) элемента более допустимой > maxVal 7
if (elements-bar-1 > 1)
{
lessVal = 0;
for (mxwElement = n-elmWridth-(elements-bar-2);
mxwElement > maxWidth:
mxwElement-)
{
lessVal += combins(n-elmWidth-mxwElement-1. elements-bar-3);
}
subVal -= lessVal * (elements-1-bar);
}
else if (n-elmWidth > maxWidth)
{
subVal-:
}
val -= subVal:
if (val < 0) break:
/
}
val += subVal:
n — elmWidth:
widths[bar] = elmWidth:
}
widthsfbar] = n;
return;
)
........
.............................................................................
* getRSSvalue
* подпрограмма вычисления подмножества значений при заданных размерах (ширине) элементов.
* Calling arguments (аргументы вызова):
* widths[) = заданные размеры (ширина) элементов
* elements = число пар элементов в наборе (для GS1 DataBar Всенаправленный,GS1 DataBar усеченный,
GS1 DataBar Двустрочный. GS1 DataBar Двустрочный Всенаправленный и GS1 DataBar Расширенный = 4; GS1
DataBar ограниченный = 7);
* maxWidth = максимальная ширина элемента в модулях
* noNarrow = 0 пропуск шаблонов, не имеющих элементов шириной один модуль
* Return (возвращаемое значение):
* Значения подмножества
...........
...................*
..........
..................................................
..........
I
int getRSSvalue (int widths[J, int elements, int maxWidth. int noNarrow)
46