Си диез / Говнокод #6066 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  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 FMB, (Updated )

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

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

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

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

Помни, guest, за тобой могут следить!

    А не использовать ли нам bbcode?


    8