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
(undoCase&(!op&OpAfter))?(uf.read(&hb, sizeof(hb)),*hNew++= hb,++i;) :
uf.seek(sizeof(GHarmonicBase), SEEK_CUR),++hOld)
Усё.
no subject
Одно ясно, что это неверно, т.к. в некоторых случаях может понадобится seek+read или read+seek, а у вас - только read либо только seek
no subject
no subject
но OpBefore == 1, OpAfter == 2, а op == некая комбинация битов, включая OpBefore и OpAfter
no subject
Но одновременно before и after - не по моим мозгам. :)))
Скачайте как-нить сафроутер (ну, оттуда, например,http://as.fatal.ru/projects/route/index.htm ) - так программил я.
no subject
1) удаления надо сохранить то, что было ДО удаления (для undo),
2) вставки надо сохранить то, что будет ПОСЛЕ вставки (для redo),
3) изменения надо сохранить то, что было ДО (для undo) и будет ПОСЛЕ (для redo) изменения
так и получается одновременно :)
no subject
Любой подобный наворот говорит о неправильном дизайне. Просто ловить ошибки и отрабатывать.
no subject
обычный undo/redo в редакторе
no subject
no subject
no subject
Любая нештатная ситуация легко обрабатывается катчем. А лучше книжки почитать.
no subject
no subject
no subject
catch команду Undo {
делать Undo
}
no subject
no subject
(no subject)
(no subject)
no subject
no subject
no subject
Пойдете с электронным паспортом через контроль - кивните, стэк драйверов там мой. :)
no subject
no subject
Шли бы Вы со своими редакторами? :)))
no subject
no subject
no subject
А я никнейм не по словарю подбирал :)
Желаю Вам успехов!
no subject