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 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)

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

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

Date: 2011-04-05 03:28 pm (UTC)
From: [identity profile] sfy-y.livejournal.com
Сути не было. Была ошибка в дизайне.
Page generated Aug. 14th, 2025 08:49 am
Powered by Dreamwidth Studios