171
idxout : outsize.size() - 1;
idxin = (idxin != PSEUDOFSM_NETOUTPUT) ?
idxin : insize.size() - 1;
outsize[idxout] =
std::max(outsize[idxout], links[i].first.second);
insize[idxin] =
std::max(insize[idxin], links[i].second.second);
};
// корректируем до размеров
for (int i = 0; i < outsize.size(); i++)
outsize[i]++;
for (int i = 0; i < insize.size(); i++)
insize[i]++;
// формируем список позиций начал областей выходов
int fullsize = 0;
for (int i = 0; i < outsize.size(); i++)
{
m_outpos.push_back(fullsize);
fullsize += outsize[i];
};
// создаем массив общих данных
m_data.resize(fullsize);
fill(m_data.begin(), m_data.end(), 0);
// сохраняем размеры выходных областей в массиве общих данных
m_outsize.assign(outsize.begin(), outsize.end());
// создаем список списков позиций входов
for (int i = 0; i < insize.size(); i++)
m_inpos.push_back(std::vector<int>(insize[i]));
// заполняем список списков позиций входов
for (int i = 0; i < links.size(); i++)
{
int idxout = links[i].first.first;
int idxin = links[i].second.first;
idxout = (idxout != PSEUDOFSM_NETINPUT) ?
idxout : m_outpos.size() - 1;
idxin = (idxin != PSEUDOFSM_NETOUTPUT) ?
idxin : m_inpos.size() - 1;
int out = links[i].first.second;
int in = links[i].second.second;
m_inpos[idxin][in] = m_outpos[idxout] + out;
};
}
// сохранение выходных данных конкретного автомата
void put_output(int i, const std::vector<data_type> &output)
{
copy(output.begin(), output.end(), m_data.begin() + m_outpos[i]);
}