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

    +15

    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
    50. 50
    51. 51
    52. 52
    53. 53
    54. 54
    55. 55
    56. 56
    57. 57
    58. 58
    59. 59
    60. 60
    61. 61
    62. 62
    63. 63
    64. 64
    65. 65
    66. 66
    67. 67
    68. 68
    69. 69
    70. 70
    71. 71
    72. 72
    73. 73
    74. 74
    75. 75
    76. 76
    /**
     * @brief Serializer generic interface.
     */
    template<typename ValueType>
    struct serializer
    {
        /**
         * @brief Parses value from raw bytes.
         * @param  from byte buffer parse value from
         */
        static ValueType parse(uint8_t *from);
    
        /**
         * @brief Writes value to raw byte buffer.
         * @param  value value to write
         * @param  dest destination buffer
         */
        static void write(ValueType value, uint8_t *dest);
    };
    
    template<>
    struct serializer<uint8_t>
    {
        static uint8_t parse(uint8_t *from)
        {
            return *from;
        }
        static void write(const uint8_t value, uint8_t *to)
        {
            *to = value;
        }
    };
    
    template<>
    struct serializer<uint16_t>
    {
        static uint16_t parse(uint8_t *from)
        {
            return (uint16_t)from[0] << 8 | from[1];
        }
        static void write(const uint16_t value, uint8_t *to)
        {
            to[0] = (value >> 8);
            to[1] = value & 0xff;
        }
    };
    
    template<>
    struct serializer<uint32_t>
    {
        static uint32_t parse(uint8_t *from)
        {
            return from[0] << 24 | from[1] << 16 | from[2] << 8 | from[3];
        }
        static void write(const uint32_t value, uint8_t *to)
        {
            serializer<uint16_t>::write(value >> 16, to);
            serializer<uint16_t>::write(value & 0xffff, to + 2);
        }
    };
    
    template<>
    struct serializer<uint64_t>
    {
        static uint64_t parse(uint8_t *from)
        {
            const uint32_t high = serializer<uint32_t>::parse(from);
            const uint32_t low = serializer<uint32_t>::parse(from + 4);
            return ((uint64_t) high << 32) | low;
        }
        static void write(const uint64_t value, uint8_t *to)
        {
            serializer<uint32_t>::write(value >> 32, to);
            serializer<uint32_t>::write(value & 0xffffffff, to + 4);
        }
    };

    Тут поднялась тема неуместного битолюбства... Решил поделиться одним из моих первых крестОпусов.
    "кроссплатформенный hton(sl)".

    roman-kashitsyn, 22 Января 2013

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

    +21

    1. 1
    angle_in_radians = acos(dot(normalize(o-a), normalize(o-b)));

    Векторы такие сложные, а операции с ними так трудно запомнить, что даже игроделы не могут это сделать.

    TarasB, 20 Января 2013

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

    +8

    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
    50. 50
    51. 51
    52. 52
    #include <iostream>
     
    struct Reader_msg;
    template<class T>struct TMsg;
     
    struct IMsg
    {
        virtual ~IMsg(){}
        virtual void SendCast(Reader_msg& obj) = 0;
    };
     
    struct Some{}; 
     
    struct Reader_msg
    {
        template<class T> void ReadMsg(T& msg)
        {
            //Здесь можно приляпать статик_ассерт
            std::cout<<"ERROR UNKNOW TYPE \n";
        }
        void ReadMsg(int msg)   { (void)msg; std::cout<<"TYPE IS INT\n";   }
        void ReadMsg(float msg) { (void)msg; std::cout<<"TYPE IS FLOAT\n"; }
        void ReadMsg(Some msg)  { (void)msg; std::cout<<"TYPE IS SOME\n";  }
     
        template<class T>void TakeMsg(T& msg) { msg.SendCast(*this); }
    };
     
    template<class T>struct TMsg:IMsg
    {
        T data;
        void SendCast(Reader_msg& obj){ obj.ReadMsg(data); }
    };
     
     
    int main()
    {
        Reader_msg reader;
        TMsg<int>    msg1;
        TMsg<float>  msg2;
        IMsg& msg3 = msg1;
        IMsg& msg4 = msg2;
        TMsg<Some>   msg5;
        TMsg<double> msg6;
        
     
        reader.TakeMsg(msg1);
        reader.TakeMsg(msg2);
        reader.TakeMsg(msg3);
        reader.TakeMsg(msg4);
        reader.TakeMsg(msg5);
        reader.TakeMsg(msg6);
    }

    http://liveworkspace.org/code/4FHDTq$6

    LispGovno, 18 Января 2013

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

    +14

    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
    /*!
     * \brief Checks for a file existence
     */
    inline bool IsFolderExist( const boost::filesystem::path &path )
    {
        return boost::filesystem::exists( path ) && boost::filesystem::is_directory( path );
    }
    
    
    /*!
     * \brief Checks for a folder existence
     */
    inline bool IsFileExist( const boost::filesystem::path &path )
    {
        return boost::filesystem::exists( path ) && boost::filesystem::is_regular_file( path );
    }

    Нашёл у себя в проекте. Кручу верчу - обмануть хочу). Про то, что даже правильные комментарии тут нафиг не нужны - я уже молчу.

    suc-daniil, 17 Января 2013

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

    +12

    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
    int n, a[n]; //n - количество элементов
    void qs(int* s_arr, int first, int last) {
      int i = first, j = last, x = s_arr[(first + last) / 2]; 
      do   {
        while (s_arr[i] < x) i++;
        while (s_arr[j] > x) j--; 
        if(i <= j)  {
          if (i < j) swap(s_arr[i], s_arr[j]);
          i++;
          j--; }}
      while (i <= j);
      if (i < last) {
        qs(s_arr, i, last);  }
      if (first < j)  {
        qs(s_arr, first,j); }}

    Оттуда

    LispGovno, 17 Января 2013

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

    +22

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    int sqr(int n)
    {
      unsigned int result=n>=0?n:-n;
      n=result<<1;
      do result+=n-=2; while(n);
      return result;
    }

    Эта функция считает квадрат числа n. Писал не я, целей создания не знаю.

    ales-hon-ne, 16 Января 2013

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

    +13

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    void SetInterruptHandler(int id, unsigned int offset) {
            __asm cli;
            unsigned int *idt = (unsigned int*)0;
            idt[id*2+0] = 0x00080000 | (offset & 0x0000FFFF);
            idt[id*2+1] = 0x00008E00 | (offset & 0xFFFF0000);
            __asm sti;
    }

    Как и обещал в http://govnokod.ru/12413#comment166763, выкладываю исходник говнолоадера, запускающего 32-х битный сишный код с дискетки: https://github.com/bormand/tryos, хотя судя по всему никому это не интересно...

    Если кому-то все-таки придет в голову странное желание это собрать - нужна вижуалка (к сожалению код написан лет 5 назад, когда я юзал вижуалку) и nasm. Путь к nasm прописываем в Makefile, запускаем nmake, полученный floppy.dsk можно скормить виртуалбоксу, или же зарезать на дискету, если удастся вспомнить как она выглядит...

    UPD: Скрин http://rghost.ru/43035733.view

    bormand, 14 Января 2013

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

    +23

    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
    volatile bool b;
    
    class BoolKeeper
    {
      bool &fb;
    public:
      BoolKeeper(bool &b) 
      {
        while (b);
        b = true;
      }
      ~BoolKeeper ()
      {
        b = false;
      }  
    }
    
    void Thread1
    {
      BoolKeeper ololo(b);
      // что-то делаем
    }
    
    void Thread2
    {
      // что-то делаем
      BoolKeeper ololo(b); 
      // что-то делаем, причём в этом месте нам важен факт, что Thread1 не выполняется
    }

    http://www.gamedev.ru/flame/forum/?id=171558

    LispGovno, 13 Января 2013

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

    +19

    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
    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    #include <iostream>
    }
    void main (){
    int prog=0,n;
    
    printf ("Which programm?  ");
    scanf ("%d",&prog);
    
    if (prog==1){
    int glas=0,sogl=0,j=0,k=0;
     char *s,*l,*m;
     s=(char*)calloc(20,sizeof(char));
     l=(char*)calloc(20,sizeof(char));
     m=(char*)calloc(20,sizeof(char));
     flushall();
     printf ("\nEnter text:  ");
     gets(s);
     n=strlen(s);
     /*Разбиваем на два массива исходную строку*/
     for (int i=0;i<n;i++){
    if(s[i]=='a'||s[i]=='q'||s[i]=='e'||s[i]=='y'||s[i]=='u'||s[i]=='i'||s[i]=='o'||s[i]=='j'){ l[j]=s[i]; glas++;j++;}
    if(s[i]=='g'||s[i]=='f'||s[i]=='d'||s[i]=='s'||s[i]=='p'||s[i]=='t'||s[i]=='r'||s[i]=='w'||s[i]=='h'||s[i]=='k'||s[i]=='l'||s[i]=='z'||s[i]=='x'||s[i]=='c'||s[i]=='v'||s[i]=='b'||s[i]=='b'||s[i]=='n'||s[i]=='m'){ m[k]=s[i];sogl++;k++;}
       }
        printf ("\nDivided:\n");
     puts(l);puts(m);
    /*Сортируем каждый массив*/
     char c=51,d=11;
     for(j=0;j<sogl;j++) {for (int i=0;i<sogl;i++){if (m[i]>m[i+1] && (i+1)<sogl){d=m[i+1];  m[i+1]=l[i];  m[i]=d;}}}
     for(j=0;j<glas;j++){ for (int i=0;i<glas;i++){if (l[i]>l[i+1] && (i+1)<glas){c=l[i+1];  l[i+1]=l[i];  l[i]=c;}}}
     
      printf ("\nFinal:\n");
     puts(l);
     flushall();
     puts(m);
     }

    Источник: http://otvety.google.ru/otvety/thread?tid=78a81d7ac11a8804&table=/otvety/topics?clk=lftpn&tab=wtmtosb
    Цитата: "Задача: Написать программу для обработки строки следующим образом: вначале должны идти гласные буквы, упорядоченные по возрастанию (aaeeiioo), затем согласные, упорядоченные по убыванию.
    Написал программу, она нормально сортирует гласные, но когда переходит к согласным - совершенно не работает."

    10a10b1s, 12 Января 2013

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

    +13

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    long a=1;
    for(;;)
    {
       long  *p_ex = new long;
       *p_ex = a++;
       std::cout << *p_ex << std::endl;
    }

    "У кого больше?" Или пытки компа утечкой памяти)

    FreeLife, 12 Января 2013

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