1. C# / Говнокод #6066

    +134

    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
    /// <summary>
            /// попытка парсинга потока в bool {true,false,1,0} поддерживатеся любой регистр 
            /// </summary>
            /// <param name="lpwcstr">указатель текущую позицию потока</param>
            /// <param name="result">результат</param>
            /// <returns>см. ParseSucces</returns>
            static public ParseSuccess TryParse(ref char* lpwcstr, out bool result)
            {
                char* cur = lpwcstr;
            to_begin:
                switch (*cur++)
                {
                    case ' ':
                    case '\t':
                    case '\n':
                    case '\r':goto to_begin;
                    case '0': lpwcstr = cur; goto to_fail;
                    case '1': lpwcstr = cur; result = true; return ParseSuccess.Success;
                    case 't':
                    case 'T':
                        switch (*cur++)
                        {
                            case 'r':
                            case 'R': switch (*cur++)
                                {
                                    case 'u':
                                    case 'U': switch (*cur++)
                                        {
                                            case 'e':
                                            case 'E': lpwcstr = cur; result = true; return ParseSuccess.Success;
                                            default: result = false; return (ParseSuccess)(lpwcstr - cur + 1);
                                        }
                                    default: goto to_fail;
                                }
                            default: goto to_fail;
                        }
                    case 'f':
                    case 'F': switch (*cur++)
                        {
                            case 'a':
                            case 'A': switch (*cur++)
                                {
                                    case 'l':
                                    case 'L': switch (*cur++)
                                        {
                                            case 's':
                                            case 'S': switch (*cur++)
                                                {
                                                    case 'e':
                                                    case 'E': lpwcstr = cur; result = false; return ParseSuccess.Success;
                                                    default: goto to_fail;
                                                }
                                            default: goto to_fail;
                                        }
                                    default: goto to_fail;
                                }
                            default: goto to_fail;
                        }
                    default: goto to_fail;
                }
            to_fail:
                result = false; 
                return (ParseSuccess)(lpwcstr - cur + 1);
            }

    Запостил: FMB, 23 Марта 2011

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

    • блэт, найду - убъю
      Ответить
    • это просто охуенно, автор - гений!
      Ответить
    • Эмуляция банального префиксного дерева через вложенный свич? Круто.
      Ответить
    • самый оригинальный boolshit, что я видел
      на мой взгяд это граничит с гениальностью

      >поддерживатеся любой регистр
      лол
      Ответить
    • тут еще и гото ))))
      Ответить
    • Если бы заместо switch/case автор бы использовал if/else то был бы полный букет возможных извращений
      Ответить
    • это просто анбеливибл
      как человек, знающий про ref, out и unsafe мог написать такое?
      Ответить
      • А это кстати вполне объяснимо, в смысле ref / out. Я когда самые первые попытки на C# делал - тоже писал какой-то парсер чего-то. Изза того, что функции были длинные и сложные, и переписывать их нехотелось... обнаружил, что можно не переделывать (!) а вернуть еще одно значение, которое тоже ингода нужно :) Лень она такая, иногда может даже документацию заставить почитать.
        Ответить
    • Впечатляет
      Ответить
    • мда
      Ответить
    • так, все заходим и начинаем дрочить!!! ехуууууууууу!
      Ответить

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