__inline BOOL
SearchOneDirectory(
IN LPSTR Directory,
IN LPSTR FileToFind,
IN LPSTR SourceFullName,
IN LPSTR SourceFilePart,
OUT PBOOL FoundInTree
)
{
//
// This was way too slow. Just say we didn't find the file.
//
*FoundInTree = FALSE;
return(TRUE);
}
Здравствуйте, IROV.., Вы писали:
IRO>ну сам прием (!!x) я знал, не знал что нужна такая функция
Очень симпатичная функция, я считаю!
IRO>а нужен этот прием я так понял, что бы избегать if которые в процессоре совсем не быстрые?
Логические ! и !! ничем по сути не отличаются от if (являются его частным случаем). Дальше всё зависит от архитектуры процессора и фантазии компилятора.
Здравствуйте, Кодт, Вы писали: К>Можно было и без for, K>... К>Но с for — получаем нужный синтаксический сахар.
Я может что-то упустил, но внутри блока within всегда будет __t == parent. Разве нет?
В противовес Вашим примерам, хотя в них parent будет указывать вроде как на текущий "элемент", а t на родительский но хотя бы на разные
Здравствуйте, std.denis, Вы писали:
SD>Я может что-то упустил, но внутри блока within всегда будет __t == parent. Разве нет? SD>В противовес Вашим примерам, хотя в них parent будет указывать вроде как на текущий "элемент", а t на родительский но хотя бы на разные
Ну, в общем, да — я у себя немножко поэкспериментировал с разными способами применения — и случайно опубликовал промежуточный. Невнимателен-с...
При известной ловкости можно сделать стек: в самом вложенном блоке иметь отсылки к более внешним переменным.
int super2 = 1;
int super = 2;
int here = 3;
{
int
super2=super, // 2
super=here, // 3
here=super*super2; // 2*3=6
{
int super2=super, super=here, here=super+super2; // 3, 6, 3+6=9
.....
}
}
ROP>cast-to-bool ROP>Logical XOR ROP>Struct/class offsets ROP>[] is symmetric ROP>
ROP>Про некоторые не знал...
А смысл?
Я применял "Duff's Device for loop unrolling" в функции преобразующей регистр строк. Реально ускорило работу на 30% под P4/VC8 (speed optimization release). Применял и "Struct/class offsets" — не неявно, через макрос MSSDK FIELD_OFFSET. Пользу от применения cast-to-bool тоже еще могу понять.
А что дает i[a] кроме удивления нубов?
Как много веселых ребят, и все делают велосипед...
Здравствуйте, ononim, Вы писали:
O> Применял и "Struct/class offsets" — не неявно, через макрос MSSDK FIELD_OFFSET.
Забавно: явное применение этого по стандарту нелегально, легально через макро offsetof, которое, как там отмечено, обычно сделано именно так.
O> Пользу от применения cast-to-bool тоже еще могу понять.
Самый короткий способ способ избежать дурацкого ворнинга MSVC.
BOOL B = GetB();
bool b1 = B; // warning C4800: 'BOOL' : forcing value to bool 'true' or 'false' (performance warning)bool b2 = B == TRUE; // неправильноbool b3 = B != FALSE; // правильно, но много буквbool b4 = !!B; // правильно и коротко
Здравствуйте, Кодт, Вы писали: К>Здравствуйте, R.O. Prokopiev, Вы писали: ROP>>Применял следующие: ROP>>[] is symmetric К>Зачем?!
Элементарно. Индексное выражение простое, а "указательное" — сложное, с C-кастами.
Например, i[(A *)b] вместо ((A *)b)[i].
ROP>>Применял следующие: ROP>>[] is symmetric К>Зачем?!
на самом деле этим можно так сказать ensure, что массив — это и в самом деле массив, а не нечто с operator[]
Как много веселых ребят, и все делают велосипед...