Entry tags:
Программерам
Задачка: как оптимизировать такой код, чтобы убрать копи-пасты?
Напрашивается заведение двух функций... а, может, кто-нибудь знает другие трюки?
Upd: Порядок вызова seek/read важен - там в файле два последовательных блока, наличие/отсутствие которых определяется флагами OpAfter/OpBefore.
Напрашивается заведение двух функций... а, может, кто-нибудь знает другие трюки?
if (undoCase)
{
if (op & OpBefore)
{
uf.read(&hb, sizeof(hb));
*hNew= hb;
++hNew;
++i;
}
if (op & OpAfter)
{
uf.seek(sizeof(GHarmonicBase), SEEK_CUR);//pass redo data
++hOld;
}
}
else
{
if (op & OpBefore)
{
uf.seek(sizeof(GHarmonicBase), SEEK_CUR);//pass undo data
++hOld;
}
if (op & OpAfter)
{
uf.read(&hb, sizeof(hb));
*hNew= hb;
++hNew;
++i;
}
}
Upd: Порядок вызова seek/read важен - там в файле два последовательных блока, наличие/отсутствие которых определяется флагами OpAfter/OpBefore.

no subject
void OrFirstOrSecond(boolean First, boolean DoOrNot) {
if (First && DoOrNot) {
uf.read(&hb, sizeof(hb));
*hNew= hb;
++hNew;
++i;
}
else if (DoOrNot) {
uf.seek(sizeof(GHarmonicBase), SEEK_CUR);//pass redo data
++hOld;
}
}
И Ваш код:
OrFirstOrSecond(undoCase, op && OpBefore);
OrFirstOrSecond(!undoCase, op && OpAfter);
(никогда в жизни такого говна в своём коде не напишу, но как решение олимпиадной задачи - почему нет?
no subject
no subject
no subject