- 1
- 2
- 3
//Determine padding for use in allocating new memory
int padding = 0;
while ( (width * 3 + padding) % 4 != 0) padding++;
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
+145
//Determine padding for use in allocating new memory
int padding = 0;
while ( (width * 3 + padding) % 4 != 0) padding++;
http://www.cplusplus.com/forum/windows/6353/
Ещё одна история о том, как людям не дано запомнить двоичную природу данных.
Если что, вот корректный шаблон на D:
int packed(int alignment)(int location) {
static assert(alignment == 2 | alignment == 4 | alignment == 8);
const badEnd = alignment - 1; //0b11, 0b111, 0b1111
return location & badEnd ? (location & ~badEnd) + alignment : location;
}
Dummy00001 16.04.2011 13:12 # +5
то что делает это цикл заменяется на `padding = width % 4`. что в контексте есть имо говно. да там вся функция слегка попахивает.
выравнивание делается *намного* проще:
alignment = 1<<power2;
location = (location + (alignment-1)) & ~(alignment-1);
и это такая древняя классика системного программирования, что просто стыдно это не знать.
denis-sh 16.04.2011 18:39 # 0
gegMOPO4 18.04.2011 11:51 # 0
Для произвольного alignment.
absolut 18.04.2011 12:46 # +5
bugmenot 18.04.2011 12:56 # 0
gegMOPO4 18.04.2011 14:56 # +2