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
Но одновременно 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