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

    +162

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    42. 42
    43. 43
    44. 44
    45. 45
    46. 46
    47. 47
    48. 48
    49. 49
    #ifdef _WIN32
    #define BEGIN_ASM
    #define END_ASM
    #define _DB(a) __asm _emit a
    #define _STR(a) a
    #else
    #define BEGIN_ASM asm (
    #define END_ASM );
    #define _DB(a) ".byte "#a";"
    #define _STR(a) a" \n\t"
    #endif
    
    #define PARAMETERS_ESP_VOID_VOID_VOID BEGIN_ASM _STR(_DB(0x8B) _DB(0x44) _DB(0x24) _DB(0x04)) _STR(_DB(0x8B) _DB(0x54) _DB(0x24) _DB(0x08)) \
     _STR(_DB(0x8B) _DB(0x4C) _DB(0x24) _DB(0x0C)) END_ASM
    #define SAVE_3_PARAMETERS BEGIN_ASM _STR(_DB(0x89) _DB(0x44) _DB(0x24) _DB(0xE4)) _STR(_DB(0x89) _DB(0x54) _DB(0x24) _DB(0xEC)) \
    _STR(_DB(0x89) _DB(0x4C) _DB(0x24) _DB(0xE8)) END_ASM
    #define LOAD_3_PARAMETERS BEGIN_ASM _STR(_DB(0x8B) _DB(0x44) _DB(0x24) _DB(0xE4)) _STR(_DB(0x8B) _DB(0x54) _DB(0x24) _DB(0xEC)) \
    _STR(_DB(0x8B) _DB(0x4C) _DB(0x24) _DB(0xE8)) END_ASM
    
    int rdtc()
    {
      _asm RDTSC
    }
    
    #pragma optimize( "gtp", on )
    #define VECTORP2DADDFPU \
    BEGIN_ASM \
     _STR(_DB(0xD9) _DB(0x00)) \
     _STR(_DB(0xD8) _DB(0x02)) \
     _STR(_DB(0xD9) _DB(0x19)) \
     _STR(_DB(0xD9) _DB(0x40) _DB(0x04)) \
     _STR(_DB(0xD8) _DB(0x42) _DB(0x04)) \
     _STR(_DB(0xD9) _DB(0x59) _DB(0x04)) \
    END_ASM
    
    void __stdcall __VectorP2DAddFPU() {
      VECTORP2DADDFPU;
    }
    
    // для даной функции компилятор сам зделает так чтобы использовались другие регистры процессора в место eax edx ecx и сохранения не понадобится
    #define Vector2DAdd(x,y,z) _asm lea eax,x _asm lea edx,y _asm lea ecx,z _asm call __VectorP2DAddFPU;
    
    void __stdcall _VectorP2DAddFPU(void *,void *,void *) {
    // сохранение в данном случае вызывается в ручную так как сам компилятор этого не зделает что приведет к не предвиденниму результату или к подению
      SAVE_3_PARAMETERS;
      PARAMETERS_ESP_VOID_VOID_VOID;
      VECTORP2DADDFPU;
      LOAD_3_PARAMETERS;
    }

    http://www.gamedev.ru/code/forum/?id=152492#m3

    >стоит ли писать велосипед, реализующий математику подобным образом?

    CPPGovno, 18 Сентября 2011

    Комментарии (20)
  2. C++ / Говнокод #7888

    +158

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    std::ostringstream str;
    str << "Русский текст" << std::endl;
    Print(str.c_str());
    //Оттуда же:
    void ConsoleCout(const char* _text)
    {
        char* buffer=0;
        unsigned int bufferSize=0;
    
        if(!_text) return;
        while(_text[bufferSize]) bufferSize++;
    
        buffer=new (std::nothrow) char[bufferSize+1];
        if(!buffer) return;
        buffer[bufferSize]=0;
    
        if(!CharToOemA(_text,buffer))
        {
            delete[] buffer;
            return;
        }
    
        std::cout<<buffer;
        delete[] buffer;
    }

    [code]http://www.gamedev.ru/code/forum/?id=152499[\code]

    CPPGovno, 18 Сентября 2011

    Комментарии (19)
  3. C++ / Говнокод #7887

    +149

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    for(int i=0;i<size1;i+=4)
          {
            float4 boxMax(plist[i+0].Box().vmax[axis], plist[i+1].Box().vmax[axis], plist[i+2].Box().vmax[axis], plist[i+3].Box().vmax[axis]);
            float4 boxMin(plist[i+0].Box().vmin[axis], plist[i+1].Box().vmin[axis], plist[i+2].Box().vmin[axis], plist[i+3].Box().vmin[axis]);
    
            register __m128 a = _mm_and_ps(_mm_cmplt_ps(boxMax, vSplit), one);
            register __m128 b = _mm_and_ps(_mm_cmpgt_ps(boxMin, vSplit), one);
            
            register __m128 left  = _mm_sub_ps(one, b); // left  = 1 - b; same as not(b) 
            register __m128 right = _mm_sub_ps(one, a); // right = 1 - a; same as not(a) 
    
            summLeft += (left.m128_i32[0] + left.m128_i32[1] + left.m128_i32[2] + left.m128_i32[3]);
            summRight+= (right.m128_i32[0] + right.m128_i32[1] + right.m128_i32[2] + right.m128_i32[3]);
          }

    http://www.gamedev.ru/code/forum/?id=141592
    История про то, как Пятачок оптимизировал простой цикл:

    for(int i=0;i<plist.size();i++)
    {
    if(plist[i].Box().vmax[axis] < split)
    summLeft++;
    else if(plist[i].Box().vmin[axis] > split)
    summRight++;
    else
    {
    summLeft++;
    summRight++;
    }
    }

    CPPGovno, 18 Сентября 2011

    Комментарии (15)
  4. C++ / Говнокод #7877

    +157

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    class SOME_CLASS
    {
    public:
    
      struct
      {
        inline uintb operator = (uintb newValue )
        {
           (reinterpret_cast<SOME_CLASS*>(static_cast<char*>(this)-offsetof(SOME_CLASS,SOME_CLASS::i)))->_setI( newValue  );
        }
        inline operator uintb ()
        {
           return (reinterpret_cast<SOME_CLASS*>(static_cast<char*>(this)-offsetof(SOME_CLASS,SOME_CLASS::i)))->_i;
        }
        ...
        ...
      } i;
    
     ...
    private:
      void _setI( uintb newValue );
      uintb _i;
    }

    http://www.gamedev.ru/code/forum/?id=152459#m1

    >P.S. обязательно поставить + на govnokod.ru.

    CPPGovno, 16 Сентября 2011

    Комментарии (20)
  5. C++ / Говнокод #7873

    +158

    1. 1
    boost::weak_ptr<std::queue<std::vector<boost::shared_ptr<sf::Drawable>>>> _frame_queue;

    очередь кадров которые поток с игровой логикой скармливает потоку ответственному за рендеринг

    tymofey, 15 Сентября 2011

    Комментарии (18)
  6. C++ / Говнокод #7867

    +171

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    char *f(char *s1, ...)
    { char **cp = &s1;            //--адрес первого указателя
       int len = 0;        
       // цикл для определения общей длины сцепляемых строк
       while (*cp) { len += strlen(*cp); cp++; }                          
      char *s = new char[len+1];       //--память для строки
      s[0]=0;                       //-- "очищаем" строку
    // цикл для сцепления строк
      cp=&s1;                       //-- опять установка на 1-й параметр
      while (*cp) 
      {  strcat(s, *cp);             //-- прицепляем первую (и следующие)
         cp++;                       //-- перемещаемся на следующую
      }         
      return s;
    }

    Сцепление строк (ноль в конце)
    http://www.rsdn.ru/forum/cpp/418970.1.aspx

    rat4, 14 Сентября 2011

    Комментарии (238)
  7. C++ / Говнокод #7858

    +162

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    void IniRead(UnicodeString Name, int n)
    {
    	TStringList* lst=new TStringList;
    	Ini->WriteString("CardNames","Card"+(UnicodeString)n,Name);
    }

    чувак создал переменную lst просто так, для теплоты душевной. ну хотелось ему чтоб создался stringlist!

    phys-tech, 14 Сентября 2011

    Комментарии (45)
  8. C++ / Говнокод #7847

    +167

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    [code=cpp]
    #include <iostream.h> 
    void main(void) 
    { 
    cout << Заключайте сообщение в кавычки; 
    } 
    [/code]

    http://programmersclub.ru/01/

    ReallyBugMeNot, 12 Сентября 2011

    Комментарии (25)
  9. C++ / Говнокод #7844

    +163

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    /*
     См. маткад файл по нерекурсивным цифровым фильтрам.
     Рачёт дискретной последовательности отфильтрованного сигнала
     У меня то в файликах уже значения, функции нету,а в маткаде такая строка
        lpf(k)*x(Ta*(n-k)) - дык тут идёт расчёт функции х(т). Идея!!!
        *барабанная дробь*
        Сигнал повторяется с периодом 2Пи, тем более данный сигнал
        парный. Знач делаем следующее
        1. Вычисляем Step = |Ta*(n-k)|.
        2. Так как сигнал парный и симетричный на отрезке 2Пи
           то значение функции в Step = |step - 2*ПИ| тоже самое, что и
           значение функции в Step. Зачем такой геморой? Ибо в файле step.dat
           хначения идут до 2*Пи, тобишь до 6.283
        3. В файле data.dat на строке Step ищем искомое нам значение,
           по сути тоже самое, что и x(Ta*(n-k)), где х - сигнал.
    
        Сл. функция и возвращает значение Step = |step - 2*ПИ|
    
    */
    int FindStep(int k)
    {
     float step = fabs(fabs((Ta * k)) - 6.283); // (n-k) in main program
     return step*1000;
    }

    Комментарий умилил

    denis90, 12 Сентября 2011

    Комментарии (17)
  10. C++ / Говнокод #7836

    +146

    1. 1
    2. 2
    3. 3
    4. 4
    void crash()
    {
        (( void(*)() )0)();
    }

    Good crash :D

    petersvp, 11 Сентября 2011

    Комментарии (43)