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

    +24

    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
    any<
        mpl::vector<
            copy_constructible<>,
            typeid_<>,
            incrementable<>,
            ostreamable<>
        >
    > x(10);
    ++x;
    std::cout << x << std::endl; // prints 11
    
    
    
    The library provides concepts for most C++ operators, but this obviously won't cover all use cases; we often need to define our own requirements. Let's take the push_back member, defined by several STL containers.
    BOOST_TYPE_ERASURE_MEMBER((has_push_back), push_back, 1)
    
    void append_many(any<has_push_back<void(int)>, _self&> container) {
        for(int i = 0; i < 10; ++i)
            container.push_back(i);
    }

    Я ждал этого! В С++ добавили dynamic из сишарпика.

    LispGovno, 27 Июня 2013

    Комментарии (24)
  2. C++ / Говнокод #13224

    +34

    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
    class A
    {
    public:
        unsigned int m_value;
    
        inline bool operator != ( const A & value )
        {
            unsigned int temp;
            temp = 0 != ( m_value != value.m_value );
            return 0 == temp;
        }
    
        inline bool operator == ( const A & value )
        {
            unsigned int temp;
            temp = 0 != ( m_value == value.m_value );
            return 0 != temp;
        }
    };

    Фрагмент кода одной коммерческой библиотеки. Имя класса изменено, 100500 прочих методов вырезано, но они похожи на эти.
    Я не буду акцентировать внимание на том, что операторы невозможно использовать для константных объектов, даже не буду говорить о странном способе сравнения целых чисел... Но я упомяну о том, что 'operator !=' работает немножко не так, как руссо-индусы ожидали.

    Little-Horny, 24 Июня 2013

    Комментарии (28)
  3. 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)
  4. C++ / Говнокод #13208

    +16

    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
    // Lock the write mutex, to provide consistency of data                                                                                            
    #define LOCK                                                                   \                                                                   
        if (_ugb) {                                                                \                                                                   
            if (pthread_mutex_lock(&_write_mutex) == EINVAL)                       \                                                                   
                ASSERT(0);                                                         \                                                                   
        }                                                                                                                                              
    // Unlock write mutex when data sent                                                                                                               
    #define UNLOCK                                                                 \                                                                   
        if (_ugb) {                                                                \                                                                   
            if (pthread_mutex_unlock(&_write_mutex) == EINVAL)                     \                                                                   
                ASSERT(0);                                                         \                                                                   
        } 
    
    // Пример использования
    
    void socket::add_var(uint16_t code, const void *buffer, uint32_t length)                                                                          
    {                                                                                                                                                  
        LOCK
        try                                                                                                                                       
        {                                                                                                                                              
            DEBUG_I(Vblock, "Sending code 0x%X of size 0x%X\n", code, length);                                                                         
            send(&code, sizeof(code));                                                                                                                 
            send(&length, sizeof(length));                                                                                                             
            send(buffer, length);                                                                                                                      
        }                                                                                                                                              
        catch (const error & ve)                                                                                                                       
        {                                                                                                                                              
            UNLOCK                                                                                                                                     
            DEBUG_E(Vblock, "Caught an exception!\n");                                                                                                 
            throw;                                                                                                                                     
        }                                                                                                                                              
        catch (...)                                                                                                                                    
        {                                                                                                                                              
            UNLOCK                                                                                                                                     
        }                                                                                                                                              
        UNLOCK                                                                                                                                         
    }

    OK_BOOST_LOCK_A_MUTEX

    roman-kashitsyn, 21 Июня 2013

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

    +16

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    for(int i=0;i<World::size;i++)
    {
        for(int u=0;u<World::size;u++)
        {
                    //Задаётся зерно для генерации случайных чисел
            srand(GetTickCount()*i*u);                           
                    //Задаются случайные значения всем точкам от 0*0.1-10, до 100*0.1-10
            World::data[i][u]=(rand()%100)*0.1f-10.0f;                            
        }
    }

    http://habrahabr.ru/post/183986/

    Abbath, 20 Июня 2013

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

    +20

    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
    #include <iostream>
    
    enum Quiet { LOG };
    
    template<typename T>
    Quiet operator <<(Quiet o, T) {
        return o;
    }
    
    static inline Quiet operator <<(Quiet o, std::ostream &(*)(std::ostream &)) {
        return o;
    }
    
    int main() {
        LOG << "Hello world!" << std::endl;
        return 0;
    }

    Измыслил сегодня вот такую вот затычку для выключения логгирования

    uranix, 20 Июня 2013

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

    +21

    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
    class socket_exception                                                                                                                        
    {                                                                                                                                              
    public:                                                                                                                                    
                char *buf;                                                                                                                             
                int ret;                                                                                                                               
                socket_exception()                                                                                                                    
                {                                                                                                                                      
                    buf=new char[10000];                                                                                                               
                    ret=RET_OK;                                                                                                                        
                }                                                                                                                                      
                socket_exception(char *b, int r)                                                                                                      
                {                                                                                                                                      
                    buf=new char[10000];                                                                                                               
                    snprintf(buf,9999,"%s",b);                                                                                                         
                    ret=r;                                                                                                                             
                }                                                                                                                                      
                socket_exception(vsocket_exception &ex)                                                                                               
                {                                                                                                                                      
                    buf=new char[10000];                                                                                                               
                    snprintf(buf, 9999, "%s", ex.buf);                                                                                                 
                    ret=ex.ret;                                                                                                                        
                }                                                                                                                                      
                const char * what (){return buf;}                                                                                                      
                int get_ret(){return ret;}                                                                                                             
                ~socket_exception(){delete[] buf;}                                                                                                    
    };

    фрактал

    roman-kashitsyn, 20 Июня 2013

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

    +9

    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
    void SillyThread::run()
    {
        forever
        {
            // ... a test ...
        }
    }
    
    void CrazyThread::run()
    {
        forever
        {
            if(qrand() % 2 == 0)
            {
                // ... a test ...
            }
    
            if(qrand() % 2 == 0)
            {
                // ... a test ...
            }
    
            if(qrand() % 2 == 0)
            {
                // ... a test ...
            }
    
            if(qrand() % 2 == 0)
            {
                // ... a test ...
            }
    
            if(qrand() % 2 == 0)
            {
                // ... a test ...
            }
    
            if(qrand() % 2 == 0)
            {
                // ... a test ...
            }
    
            if(qrand() % 2 == 0)
            {
                // ... a test ...
            }
    
            if(qrand() % 2 == 0)
            {
                // ... a test ...
            }
    
            if(qrand() % 2 == 0)
            {
                // ... a test ...
            }
        }
    }

    не совсем говно, но имена и структука прикололи. из кода стресс-теста PDF библиотеки poppler.

    Dummy00001, 19 Июня 2013

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

    +17

    1. 1
    2. 2
    3. 3
    4. 4
    int a=0; 
    while (a<=1 && a>=0) { 
      a--; 
    }

    Я даже хз, что тут автор делает...

    kostoprav, 19 Июня 2013

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

    +18

    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
    std::tuple<std::vector<long double> , std::vector<std::vector<long double> > , std::vector<long double> >
    inline
    training(const std::size_t hidden_neurons,
             const long double hlr,
             const std::size_t epochs,
             const std::vector< long double > train_ou,
             const std::vector< std::vector< long double > >& train_in,
             volatile bool * reset)
    {
    
    
        auto train_inp = train_in;
        auto train_out = train_ou;
    //    std::cerr << "hidden_neurons: " << hidden_neurons << std::endl;
    //    std::cerr << "hlr: " << hlr << std::endl;
    //    std::cerr << "epochs: " << epochs << std::endl;
    //    std::cerr << "train_inp: " << train_inp << std::endl;
    //    std::cerr << "train_out: " << train_out << std::endl;
    
        const auto mu_inp = mean( train_inp );
        const auto sigma_inp = stand( train_inp );
        train_inp = ( train_inp - mu_inp[ 0 ] ) / sigma_inp[ 0 ];
        const auto mu_out = mean( train_out );
        const auto sigma_out = stand( train_out );
        train_out = ( train_out - mu_out ) / sigma_out;
        const auto patterns = size( train_inp ).first;
    
        std::cout << "patterns: " << patterns << std::endl;
        auto bias = ones( patterns );
        train_inp = merge( train_inp, bias );
        const auto inputs = size( train_inp ).second;
    
        std::vector< long double > err( epochs );
    
        auto weight_input_hidden = ( randn( inputs, hidden_neurons) - 0.5l ) / 10.0l;
        auto weight_hidden_output = ( randn( hidden_neurons ) - 0.5l ) / 10.0l;
    
        for( std::size_t i = 0; i < epochs; ++i ) {
            if ( *reset ) {
                break;
            }
            const auto alr = hlr;
            const auto blr = alr / 10.0;
            for( std::size_t j = 0; j < patterns; ++j ){
                const auto patnum = ( static_cast<std::size_t>( round( randd() * patterns + 0.5 ) ) - 1 ) % patterns;
                const auto this_pat = train_inp[ patnum ];
                const auto act = train_out[ patnum ];
                const auto hval = feval( []( const long double & v ){ return std::tanh( v ); }, this_pat * weight_input_hidden );
                const auto pred = hval * weight_hidden_output;
                const auto error = pred - act;
                const auto delta_HO = hval * error * blr;
                weight_hidden_output = weight_hidden_output - delta_HO;
                const auto m1 = weight_hidden_output * alr * error;
                const auto m2 = 1.0l - (hval^2);
                const auto m3 = dot_operator( m1, m2, std::multiplies< long double >());
                const auto m4 = vec_to_vecvec( m3 );
                const auto delta_IH = m4 * this_pat;
                weight_input_hidden = weight_input_hidden - trans( delta_IH );
            }
            const auto p1 = feval( []( const long double& v ){ return std::tanh( v ); }, train_inp * weight_input_hidden );
            const auto pred = weight_hidden_output * trans( p1 );
            const auto error = pred - train_out;
            const auto error_sq = error ^ 2;
            err[ i ] = std::sqrt( std::accumulate( error_sq.cbegin(), error_sq.cend(), 0.0, std::plus<long double> () ) );
            std::cerr << "err[ i ]: " << err[ i ] << ' ' << i <<  std::endl;
        }
        return std::move(std::make_tuple(weight_hidden_output, weight_input_hidden, err));
    }

    Велосипедостроение

    Abbath, 19 Июня 2013

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