1. Список говнокодов пользователя an0nym

    Всего: 10

  2. C++ / Говнокод #13894

    +1

    1. 1
    std::AIDS

    an0nym, 04 Октября 2013

    Комментарии (50)
  3. Perl / Говнокод #13647

    −159

    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
    package Bool;
    
    use strict;
    use Carp qw/croak/;
    use Scalar::Util qw/blessed/;
    
    use base "Exporter";
    our @EXPORT = qw/true false/;
    
    use overload(
       'bool' => \&op_bool,
       '!'    => \&op_not,
       '=='   => \&op_equal,
       '!='   => \&op_not_equal,
       '""'   => \&op_to_string,
    );
    
    our $true  = !0;
    our $false = !!0;
    
    use constant true  => bless \$true;
    use constant false => bless \$false;
    
    sub import {
       my($package) = @_;
       $package->export_to_level(1, @_);
        
       &Internals::SvREADONLY(\!0,  0);
       &Internals::SvREADONLY(\!!0, 0);
       ${ \!0 }  = true;
       ${ \!!0 } = false;
       &Internals::SvREADONLY(\!0,  1);
       &Internals::SvREADONLY(\!!0, 1);
    }
    
    sub op_bool {
       my($self) = @_;
       return $$self;
    }
    
    sub op_not {
       my($self) = @_;
       $$self ? false : true;
    }
    
    sub op_equal {
       my($l, $r) = @_;
       typecheck($l, $r);
       return (($$l && $$r || !$$l && !$$r) ? true : false);
    }
    
    sub op_not_equal {
       my($l, $r) = @_;
       typecheck($l, $r);
       return (($$l && $$r || !$$l && !$$r) ? false : true);
    }
    
    sub op_to_string {
       my($self) = @_;
       return $self ? "true" : "false";
    }
    
    sub typecheck {
       map { blessed $_ eq __PACKAGE__ or croak "Bool: Type error" } @_;
       return;
    }
    
    1;

    true/false в perl.
    true == true -> true
    1 == 1 -> true
    "a" eq "b" -> false
    и т.п.
    true == 1 # Ошибка
    Пришлось долго искать как превратить !0 в true и !!0 в false, посмотрел в чужом модуле.

    an0nym, 22 Августа 2013

    Комментарии (16)
  4. Perl / Говнокод #13565

    −124

    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
    package Exception;
    
    sub new {
       my($package, $what) = @_;
       return bless { what => $what }, $package;
    }
    
    sub what {
       my($self) = @_;
       return $self->{what};
    }
    
    package main;
    
    sub try(&$) {
       my($code, $catch) = @_;
       unless(eval { $code->(); 1 }) {
          local $_ = $@;
          $catch->();
       }
    }
    
    sub catch(&) { $_[0] }
    
    sub throw($) { die $_[0] }
    
    try {
       throw new Exception("Ошибка");
    } catch {
       print $_->what;
    };

    Исключения в perl.

    an0nym, 08 Августа 2013

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

    +7

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    namespace engine { namespace ui { class Console; } }
    
    class Dummy
    {
       engine::ui::Console * _ptr;
    };

    Решение проблемы с перекрёстными #include, когда классы должны хранить указатели друг на друга. Простое объявление class engine::ui::Console; не работает.
    Не в первый раз сталкиваюсь с этой проблемой из-за примитивной системы импорта.

    an0nym, 20 Июля 2013

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

    +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
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    class Random
    {
    public:
        int getInt(int min, int max)
        {
            return std::uniform_int_distribution<int>(min, max)(_rd);
        }
        
        double getReal(double min, double max)
        {
            return std::uniform_real_distribution<double>(min, max)(_rd);
        }
        
        bool getBool()
        {
            return std::uniform_int_distribution<int>(0, 1)(_rd);
        }
    
    private:
        std::random_device _rd;
    };

    Даже не знаю, говнокод это или нет.

    an0nym, 02 Июля 2013

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

    +14

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    8. 8
    9. 9
    int error = (unsigned)-1;
    
    int x, y, w, h;
    x = y = w = h = error;
    
    stream >> x >> y >> w >> h;
    
    if(x == error || y == error || w == error || h == error)
       ...

    Не нашёл, как по-другому обрабатывать ошибки текстовых командах.

    an0nym, 24 Июня 2013

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

    +16

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    8. 8
    #define Throw(exc, msg) do {  \
       std::stringstream exc_str; \
       exc_str << __FILE__ << ":" << __LINE__ \
       << ": " << __func__ << "(): " << msg;  \
       throw exc(exc_str.str()); \
       } while(0)
    
    Throw(std::runtime_error, "test");

    terminate called after throwing an instance of 'std::runtime_error'
    what(): main.cpp:22: main(): Error

    Как вам?

    an0nym, 10 Июня 2013

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

    +28

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    8. 8
    9. 9
    const std::string cyrillic = "аАбБвВгГдДеЕёЁжЖзЗиИйЙкКлЛмМнНоОпПрРсСтТуУфФхХцЦчЧшШщЩъЪыЫьЬэЭюЮяЯ";
    
    std::string cyrillic_toupper(std::string s)
    {
       if(cyrillic.find(s) == std::string::npos)
          throw std::runtime_error(std::string("cyrillic_toupper(): ") + "'" + s + "' is not cyrillic char");
    
       return cyrillic.substr(cyrillic.find(s) + 2, 2);
    }

    an0nym, 21 Октября 2012

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

    +28

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    8. 8
    std::string toString(std::function<std::string(T)> f = std::function<std::string(T)>()) {
       std::stringstream ss;
       if(f)
          ss << f(some_value);
       else
          ss << some_value;
       return ss.str();
    }

    an0nym, 03 Октября 2012

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

    +29

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    string input;
    string output;
     
    input = "C:\\bla.txt\\";          //"Bla.txt" is the file to copy
    output = "C:\\test\\";            //"Test" is the folder to copy to
     
    system("copy input.c_str() output.c_str()")

    http://cboard.cprogramming.com/cplusplus-programming/109047-help-copy-files-cplusplus.html

    an0nym, 10 Сентября 2012

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