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

    +2

    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
    #define PS *p++!=*s++  /* Body of inner unrolled matching loop.         */
    #define ITEMMAX 16     /* Maximum number of bytes in an expanded item.  */
    {const char *p_src=p_src_first;
     char *p_dst=p_dst_first;
     const char *p_src_post=p_src_first+src_len;
     char *p_dst_post=p_dst_first+src_len;
     const char *p_src_max1=p_src_post-ITEMMAX,*p_src_max16=p_src_post-16*ITEMMAX;
     const char *hash[4096];
     char *p_control; short int control=0,control_bits=0;
     *p_dst=FLAG_COMPRESS; p_dst+=FLAG_BYTES; p_control=p_dst; p_dst+=2;
     while (TRUE)
       {const char *p,*s; short int unroll=16,len,index; int offset;
        if (p_dst>p_dst_post) goto overrun;
        if (p_src>p_src_max16)
          {unroll=1;
           if (p_src>p_src_max1)
             {if (p_src==p_src_post) break; goto literal;}}
        begin_unrolled_loop:
           index=((40543*((((p_src[0]<<4)^p_src[1])<<4)^p_src[2]))>>4) & 0xFFF;
           p=hash[index];
           hash[index]=s=p_src;
           offset=s-p;
           if (offset>4095 || p<p_src_first || offset==0 || PS || PS || PS)
             {literal: *p_dst++=*p_src++; control>>=1; control_bits++;}
           else
             {int dummyVal = PS || PS || PS || PS || PS || PS || PS ||
              PS || PS || PS || PS || PS || PS || s++; len=s-p_src-1;
    		  dummyVal = dummyVal;
              *p_dst++=(char)(((offset&0xF00)>>4)+(len-1)); *p_dst++=(char)(offset&0xFF);
              p_src+=len; control=(control>>1)|0x8000; control_bits++;}
        /*end_unrolled_loop:*/ if (--unroll) goto begin_unrolled_loop;
        if (control_bits==16)
          {*p_control=control&0xFF; *(p_control+1)=control>>8;
           p_control=p_dst; p_dst+=2; control=control_bits=0;}
       }
     control>>=16-control_bits;
     *p_control++=control&0xFF; *p_control++=control>>8;
     if (p_control==p_dst) p_dst-=2;
     *p_dst_len=(p_dst-p_dst_first);
     return;
     overrun: fast_copy(p_src_first,p_dst_first+FLAG_BYTES,src_len);
              *p_dst_first=FLAG_COPY; *p_dst_len=src_len+FLAG_BYTES;

    Красота в одном из методов кода одной MMO игры)

    Запостил: Sigos, 16 Октября 2017

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

    • Анролл через short-circuit evaluation при инициализации переменной:
      #define PS *p++!=*s++  /* Body of inner unrolled matching loop.         */
      ...
      int dummyVal = PS || PS || PS || PS || PS || PS || PS ||
        PS || PS || PS || PS || PS || PS || s++; len=s-p_src-1;


      А это интересно нахуя?
      dummyVal = dummyVal;

      наверное это чтоб компилятор не писал ворнинг на то, что вот переменную проинициализировали, но никак не используют потом
      Ответить
      • int dummyVal = PS || PS || PS || PS || PS || PS || PS ||
          PS || PS || PS || PS || PS || PS || s++; len=s-p_src-1;


        > А это интересно нахуя?

        #define PS *p++!=*s++
        Ответить
        • Вопрос относился к строчке
          dummyVal = dummyVal;

          С той PS || PS || PS хренью как раз все достаточно очевидно. Только зачем ее куда-то присваивать? Можно ж и без "int dummyVal =" обойтись, тупо сделать PS || PS || PS ...
          Ответить
      • Какой умный компилятор, если переменную проинициализировали, но никак не использовали, он ругается, а если присвоили самой себе, то уже нет.

        Возможно, сейчас придет Борманд и (используя позикс) напишет код, в котором строка val = val; имеет эффект.
        Ответить
        • Интересно, а считается за инициализацию val ^= val?
          Ответить
        • > код, в котором строка val = val; имеет эффект
          Оставим это читателю в качестве упражнения.
          Ответить
          • Может, автор хотел написать "имеет смысл"? Чтобы val = val имело эффект, даже побочный, немного надо. Особенно - в C++.
            Ответить

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