psilogic: (Default)
[personal profile] psilogic
Задачка: как оптимизировать такой код, чтобы убрать копи-пасты?
Напрашивается заведение двух функций... а, может, кто-нибудь знает другие трюки?


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.

Date: 2011-04-05 12:50 pm (UTC)
From: [identity profile] psilogic.livejournal.com
Ничего не понял...
Одно ясно, что это неверно, т.к. в некоторых случаях может понадобится seek+read или read+seek, а у вас - только read либо только seek

Date: 2011-04-05 12:56 pm (UTC)
From: [identity profile] sfy-y.livejournal.com
Там в начале дисклеймер, (предполагается, что программер умеет именовать переменные)

Date: 2011-04-05 12:59 pm (UTC)
From: [identity profile] psilogic.livejournal.com
хрен поймешь этот дисклеймер

но OpBefore == 1, OpAfter == 2, а op == некая комбинация битов, включая OpBefore и OpAfter

Date: 2011-04-05 01:05 pm (UTC)
From: [identity profile] sfy-y.livejournal.com
Тогда делать макрики и не париться.

Но одновременно before и after - не по моим мозгам. :)))


Скачайте как-нить сафроутер (ну, оттуда, например,http://as.fatal.ru/projects/route/index.htm ) - так программил я.

Date: 2011-04-05 01:07 pm (UTC)
From: [identity profile] psilogic.livejournal.com
Это код из обработки undo/redo. В случае операции
1) удаления надо сохранить то, что было ДО удаления (для undo),
2) вставки надо сохранить то, что будет ПОСЛЕ вставки (для redo),
3) изменения надо сохранить то, что было ДО (для undo) и будет ПОСЛЕ (для redo) изменения
так и получается одновременно :)

Date: 2011-04-05 01:15 pm (UTC)
From: [identity profile] sfy-y.livejournal.com
А catch - не канает?

Любой подобный наворот говорит о неправильном дизайне. Просто ловить ошибки и отрабатывать.

Date: 2011-04-05 01:16 pm (UTC)
From: [identity profile] psilogic.livejournal.com
да при чем тут ошибки?
обычный undo/redo в редакторе

Date: 2011-04-05 01:18 pm (UTC)
From: [identity profile] sfy-y.livejournal.com
А в чём разница?

Date: 2011-04-05 01:24 pm (UTC)
From: [identity profile] psilogic.livejournal.com
а при чем тут ошибки? :)

Date: 2011-04-05 02:15 pm (UTC)
From: [identity profile] sfy-y.livejournal.com
Упс. Ну, совсем по-быстрому подробно не объясню.

Любая нештатная ситуация легко обрабатывается катчем. А лучше книжки почитать.

Date: 2011-04-05 02:17 pm (UTC)
From: [identity profile] psilogic.livejournal.com
В этом коде нет никакой нештатной ситуации. Просто юзер в редакторе захотел выполнить команду undo или redo.

Date: 2011-04-05 02:29 pm (UTC)
From: [identity profile] sfy-y.livejournal.com
Ой, мама. Всё, уровень понял.

Date: 2011-04-05 02:55 pm (UTC)
From: [identity profile] sfy-y.livejournal.com
Ну, ох 2 раза.

catch команду Undo {
делать Undo
}

Date: 2011-04-05 03:01 pm (UTC)
From: [identity profile] psilogic.livejournal.com
Команда Undo не является нештатной ситуацией.

Date: 2011-04-05 03:03 pm (UTC)
From: [identity profile] sfy-y.livejournal.com
Ну божешка ты ж мой. Просто event-driving. А по жизни - является.

Date: 2011-04-05 03:09 pm (UTC)
From: [identity profile] psilogic.livejournal.com
а catch не является событием (event)

кроме вас, остальные комментаторы суть ухватили

продОлжите строить из себя умного, или, может, хватит? :)

(no subject)

From: [identity profile] sfy-y.livejournal.com - Date: 2011-04-05 03:28 pm (UTC) - Expand

Date: 2011-04-05 02:28 pm (UTC)
From: [identity profile] sfy-y.livejournal.com
Где там у Вас в коде выполняется seek+read или read+seek?

Date: 2011-04-05 03:01 pm (UTC)
From: [identity profile] psilogic.livejournal.com
уровень понял :)

Date: 2011-04-05 03:06 pm (UTC)
From: [identity profile] sfy-y.livejournal.com
Увидел. Так это ошибка by design.

Пойдете с электронным паспортом через контроль - кивните, стэк драйверов там мой. :)

Date: 2011-04-05 03:11 pm (UTC)
From: [identity profile] psilogic.livejournal.com
"стек драйверов" - какие слова знаете :))))

Date: 2011-04-05 03:33 pm (UTC)
From: [identity profile] sfy-y.livejournal.com
Так случилось. Я и Кнута читал, и Оллонгрена, и Мартина, и много кого ещё. Когда-то писал ЦУПы (6 штук). В 2005-2006 от скуки написал драйверы для электронных паспортов (по заказу ГУП Атлас).

Шли бы Вы со своими редакторами? :)))

Date: 2011-04-09 02:55 pm (UTC)
From: [identity profile] boldcat.livejournal.com
Где у Кнута написано, что по можно посмотреть на названия переменных и переписать логику?

Date: 2011-04-09 03:13 pm (UTC)
From: [identity profile] sfy-y.livejournal.com
А в каком словаре написано, что fat и bold - синонимы?

Date: 2011-04-09 05:58 pm (UTC)
From: [identity profile] boldcat.livejournal.com
:) :) :) :)
А я никнейм не по словарю подбирал :)
Желаю Вам успехов!

Date: 2011-04-09 06:20 pm (UTC)
From: [identity profile] sfy-y.livejournal.com
:))) И Вам.
Page generated Sep. 4th, 2025 03:24 pm
Powered by Dreamwidth Studios