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

    +3

    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
    const char _LETTERS[] =
    "000000000000000000000000000000000000000000000000000000000000000001111111111<...>";
    const char _DIGITS[] =
    "000000000000000000000000000000000000000000000000111111111100000000000000000<...>";
    const char _CONTROL_CHARS[] =
    "111111111111111111111111111111110000000000000000000000000000000000000000000<...>";
    const char _PUNCT_CHARS[] =
    "000000000000000000000000000000000111011111101111000000000011000110000000000<...>";
    const char _SEP_CHARS[] =
    "000000000000000000000000000000001000000000000000000000000000000000000000000<...>";
    const char _SYM_CHARS[] =
    "000000000000000000000000000000000000100000010000000000000000111000000000000<...>";
    
    #define min(i,l,I) (((i) < (l)) ? (((i) < (I)) ? (i) : (I)) : (((l) < (I)) ? (l) : (I)))
    
    bool CharIsLetter(wchar_t c) {
      return _LETTERS[c] != L'0';
    }
    bool CharIsDigit(wchar_t c) {
      return _DIGITS[c] != L'0';
    }
    bool CharIsControl(wchar_t c) {
      return _CONTROL_CHARS[c] != L'0';
    }
    bool CharIsPunctuation(wchar_t c) {
      return _PUNCT_CHARS[c] != L'0';
    }
    bool CharIsSeparator(wchar_t c) {
      return _SEP_CHARS[c] != L'0';
    }
    bool CharIsSymbol(wchar_t c) {
      return _SYM_CHARS[c] != L'0';
    }

    Лёшенька Кондратьев учится оптимизации

    Запостил: groser, 25 Декабря 2015

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

    • Забыл упомянуть, что каждая строка длиной в 65536 символом!
      Ответить
      • Тяжелый случай. Во всех смыслах.
        Ответить
      • > 65536
        Ок, с base plane разобрались. Осталось ещё 16.
        Ответить
    • Неоптимальненько. Можно было упаковать в каждый байт по несколько характеристик символа, тогда бы потребовалось в несколько раз меньше места.
      bool CharIsLetter(wchar_t c) {
          return TRAITS[c & 0xffff] & HAS_LETTER_BIT;
      }
      Ну а так-то, конечно, надо показать мученику заголовки <locale> и <algorithm>.

      P.S. Начинать в C++ идентификатор с подчёркивания и большой буквы - UB.
      Ответить
      • > Начинать в C++ идентификатор с подчёркивания и большой буквы - UB.

        О_о нихера себе

        А из-за чего так?
        Ответить
        • Он пошутил.
          Ответить
          • > Он пошутил.

            Кто ж с таким шутит.

            Certain sets of names and function signatures are always reserved to the implementation:

            Each name that contains a double underscore (_ _) or begins with an underscore followed by an uppercase letter (2.11) is reserved to the implementation for any use.
            ...
            If the program declares or defines an identifier in a context in which it is reserved (other than as allowed by 7.1.4), or defines a reserved identifier as a macro name, the behavior is undefined.

            -- http://stackoverflow.com/questions/228783/what-are-the-rules-about-using-an-underscore-in-a-c-identifier
            Ответить
            • > begins with an underscore followed by an uppercase letter
              А _name разве не считаются зарезервированными?
              Ответить
              • Считаются...

                Each name that begins with an underscore is reserved to the implementation for use as a name in the global namespace.

                Т.е. _name нельзя юзать только в глобальном неймспейсе, а _Name и __name - вообще нигде и никогда.
                Ответить
                • Более того, na__me тоже нельзя.
                  Ответить
                  • Кому вообще в голову придёт юзать два подчёркивания внутри имён?
                    Ответить
                    • > Кому вообще в голову придёт юзать два подчёркивания внутри имён?
                      А вдруг разработчики BEM доберутся и до C++?
                      Ответить
    • тут ещё и сравнение (char) != (wchar_t)
      Ответить
    • b3b2dd4751a02e567df5d6bb5bd2309f
      Ответить

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