1. C++ / Говнокод #11352

    +5

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    template<class T>
    bool IsAligned(T SizeOrAddress, const size_t AlignStep)
    {
    	return SizeOrAddress==Align(SizeOrAddress, AlignStep);
    }

    Запостил: HaskellGovno, 03 Июля 2012

    Комментарии (7) RSS

    • Чтобы понять, сколько лишних операций тут делается (достаточно лишь % и ==), то:
      template<class T>
      	T Align(T SizeOrAddress, const size_t AlignStep)
      	{
      		if(SizeOrAddress%AlignStep==0)
      			return SizeOrAddress;
      		else
      			return SizeOrAddress+(AlignStep-(SizeOrAddress%AlignStep));
      	}
      Я не проверял, но судя по всему для кого-нибудь void* не с компилируется, а для int* будет не верно работать?
      Ответить
      • Наверное сверху вниз писали. IsAligned определим через Align, a потом уже напишем Align.
        Ответить
        • Всё равно, что чесать левую пятку правым ухом, когда можно проще:
          return SizeOrAddress%AlignStep==0;
          Ответить
    • Может впоследствии будут добавлены какие-нибудь дикие правила выравнивания?
      Ответить
    • - Ты уж сынок молодец, что поступил, ну уж родителям помоги, пока дома, потом уж редко будем видеться - каждые выходные не наездишься.
      Ответить

    Добавить комментарий