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

    +10

    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
    69. 69
    70. 70
    71. 71
    72. 72
    73. 73
    74. 74
    75. 75
    76. 76
    77. 77
    78. 78
    79. 79
    80. 80
    81. 81
    82. 82
    83. 83
    84. 84
    85. 85
    86. 86
    87. 87
    88. 88
    89. 89
    90. 90
    91. 91
    92. 92
    93. 93
    94. 94
    95. 95
    #include <iostream>
    #include <list>
    #include <queue>
    #include <memory>
    #include <mutex>
    #include <condition_variable>
    #include <type_traits>
    #include <assert.h>
    using namespace std;
    
    template<class Data>
    class UnboundedQueueForNonThrowMovable
    {
    	static_assert(std::is_nothrow_move_constructible<Data>::value, "Data must be nonthrow movable type.");
    	static_assert(!std::is_array<Data>::value, "Data must not be c-array.");
    	
    public:
    	typedef Data value_type;
    	
    private:
    	typedef std::queue<Data, std::list<Data>> Queue;
    	typedef std::unique_lock<std::mutex> Lock;
    	Queue _queue;
    	std::mutex _lockQueue;
    	std::condition_variable _pushToQueue;
    	
    	UnboundedQueueForNonThrowMovable(const UnboundedQueueForNonThrowMovable&) = delete;
    	UnboundedQueueForNonThrowMovable(UnboundedQueueForNonThrowMovable&&) = delete;
    	UnboundedQueueForNonThrowMovable& operator=(const UnboundedQueueForNonThrowMovable&) = delete;
    	UnboundedQueueForNonThrowMovable& operator=(UnboundedQueueForNonThrowMovable&&) = delete;
    public:
    	UnboundedQueueForNonThrowMovable(void){}
    	
    	void push(Data&& data)
    	{
    		Lock lockerQueue(this->_lockQueue);
    		this->_queue.push(std::move(data));
    		this->_pushToQueue.notify_all();//_condition.notify_one(); most optimal, but can cause deadlock.
    	}
    	
    	void push(Data& data)
    	{
    		this->push(std::move(data));
    	}
    	
    	bool emptyUnstable(void) const
    	{
    		Lock lockerQueue(this->_lockQueue);
    		return this->_queue.empty();
    	}
    	
    	Data pop(void)
    	{
    		Lock lockerQueue(this->_lockQueue);
    		this->_pushToQueue.wait(lockerQueue, [this](void){return !this->_queue.empty();});
    		assert(!this->_queue.empty());
    		Data result = std::move(this->_queue.front());
    		this->_queue.pop();
    		return result;
    	}
    	
    	template< class Rep, class Period>
    	Data pop(const std::chrono::duration<Rep, Period> WaitDuration)
    	{
    		Lock lockerQueue(this->_lockQueue);
    		if(!this->_pushToQueue.wait(lockerQueue, WaitDuration, [this](void){return !this->_queue.empty();}))
    			return Data();
    		assert(!this->_queue.empty());
    		Data result = std::move(this->_queue.front());
    		this->_queue.pop();
    		return result;
    	}
    };
    
    template<class Data>	
    using UnboundedQueueForUniquePtr = UnboundedQueueForNonThrowMovable<std::unique_ptr<Data>>;
    template<class Data>
    using UnboundedQueueForSharedPtr = UnboundedQueueForNonThrowMovable<std::shared_ptr<const Data>>;
    template<class Data>
    using UnboundedQueue = UnboundedQueueForUniquePtr<Data>;
    
    int main() {
    	cout<<"ok"<<endl;
    	{
    		//UnboundedQueueForSharedPtr<int>::value_type == std::shared_ptr<const int>
    		UnboundedQueueForSharedPtr<int> queueSharedPtr;
    		//auto a = std::make_shared<const int>(45);
    		auto a = std::make_shared<int>(45);
    		assert(a);
    		queueSharedPtr.push(a);
    		assert(!a);//Fired if you use "auto a = std::make_shared<int>(45)" below. It is compiler bug, I think, because previus code line must cause compile error.
    		auto b = queueSharedPtr.pop();//std::shared_ptr<const int>
    		assert(b);
    		cout<<*b<<endl;
    		assert(*b==45);

    http://ideone.com/qdsWJi
    Немного глупый вопрос, почему в 90 строчке не получаем ошибку компиляции если закомментировать 87-ую строку и разкомментировать 88-ую?

    laMer007, 16 Декабря 2013

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

    +7

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    auto r = [&](){
    for(auto i: a)
      if(i==k)
        return f(i);
    }();

    Однажды мне знакомый рассказывал, что во многих языках плохие грязные циклы. Мол настоящие чистые циклы должны возвращать значение. Я написал ему вот это. Он многозначительно подумал и замолчал. Через две с половиной недели он уволился.

    LispGovno, 14 Декабря 2013

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

    +15

    1. 1
    normalize((a+b)/2)

    TarasB, 12 Декабря 2013

    Комментарии (152)
  4. C++ / Говнокод #14213

    +6

    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
    class Log
    {
    
    	ReverseStruct<std::list<std::string> > _logList;
    	semafor semafor;
    	Log()
    	{
    		std::list<std::string> right , left;
    		std::shared_ptr<std::list<std::string> > ptrRight=std::shared_ptr<std::list<std::string> >(*right);
    		std::shared_ptr<std::list<std::string> > ptrLeft=std::shared_ptr<std::list<std::string> >(*left);
    		_logList=TReverseStruct<std::list<std::string> >(ptrRight,ptrLeft);
    	}
    
    
    	void writeMessage(std::string message, Level level ){_logList.getWriteStorage.push_back( currentTime+level+messge); semafor.signal();}
    	void body()
    	{
    		try
    		{
    			semafor.wait();
    			_logList.revers();
    			for (std::list<std::string>::iterator i =_logList.getReadStorage->begin(); i != _logList.getReadStorage->end(); ++i)
    			{
    			fixedBufferString<7000, '\0'> stringLog;
    			stringLog.append(*i);
    			FileDevice flashInternal(FLASHINTERNAL);
    			const DriveErrors::E WriteResult = flashInternal.writeFile("log.iso", (byte*)stringLog.content(), stringLog.length());
    			}
    		}
    		catch()
    		{}
    	}
    }

    laMer007, 11 Декабря 2013

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

    +15

    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
    if( (Input.GetMouseX() >= 545 && Input.GetMouseX() <= 567 && Input.GetMouseY() >= 165 && Input.GetMouseY() <= 197) || (Input.GetMouseX() >= 545 && Input.GetMouseX() <= 567 && Input.GetMouseY() >= 205 && Input.GetMouseY() <= 237) ||
                (Input.GetMouseX() >= 545 && Input.GetMouseX() <= 567 && Input.GetMouseY() >= 85 && Input.GetMouseY() <= 117) || (Input.GetMouseX() >= 545 && Input.GetMouseX() <= 567 && Input.GetMouseY() >= 125 && Input.GetMouseY() <= 157) ||
    
               (Input.GetMouseX() >= 675 && Input.GetMouseX() <= 707 && Input.GetMouseY() >= 85 && Input.GetMouseY() <= 117) || (Input.GetMouseX() >= 675 && Input.GetMouseX() <= 707 && Input.GetMouseY() >= 145 && Input.GetMouseY() <= 177) ||
               (Input.GetMouseX() >= 675 && Input.GetMouseX() <= 707 && Input.GetMouseY() >= 205 && Input.GetMouseY() <= 237)||
    
               (Input.GetMouseX() >= 780 && Input.GetMouseX() <= 807 && Input.GetMouseY() >= 85 && Input.GetMouseY() <= 117) || (Input.GetMouseX() >= 780 && Input.GetMouseX() <= 807 && Input.GetMouseY() >= 125 && Input.GetMouseY() <= 157) ||
               (Input.GetMouseX() >= 780 && Input.GetMouseX() <= 807 && Input.GetMouseY() >= 165 && Input.GetMouseY() <= 197) || (Input.GetMouseX() >= 780 && Input.GetMouseX() <= 807 && Input.GetMouseY() >= 205 && Input.GetMouseY() <= 237) ||
    
               ...
    
            {
                int i; int e;
                if(Input.GetMouseX() >= 55 && Input.GetMouseX() <= 87 && Input.GetMouseY() >= 210 && Input.GetMouseY() <= 242) i = 0;
                if(Input.GetMouseX() >= 95 && Input.GetMouseX() <= 127 && Input.GetMouseY() >= 210 && Input.GetMouseY() <= 242) i = 1;
                if(Input.GetMouseX() >= 135 && Input.GetMouseX() <= 167 && Input.GetMouseY() >= 210 && Input.GetMouseY() <= 242) i = 2;
                if(Input.GetMouseX() >= 175 && Input.GetMouseX() <= 207 && Input.GetMouseY() >= 210 && Input.GetMouseY() <= 242) i = 3;
                if(Input.GetMouseX() >= 215 && Input.GetMouseX() <= 247 && Input.GetMouseY() >= 210 && Input.GetMouseY() <= 242) i = 4;
                if(Input.GetMouseX() >= 255 && Input.GetMouseX() <= 287 && Input.GetMouseY() >= 210 && Input.GetMouseY() <= 242) i = 5;
                if(Input.GetMouseX() >= 295 && Input.GetMouseX() <= 327 && Input.GetMouseY() >= 210 && Input.GetMouseY() <= 242) i = 6;
                if(Input.GetMouseX() >= 335 && Input.GetMouseX() <= 367 && Input.GetMouseY() >= 210 && Input.GetMouseY() <= 242) i = 7;
    
                if(Input.GetMouseX() >= 55 && Input.GetMouseX() <= 87 && Input.GetMouseY() >= 250 && Input.GetMouseY() <= 282) i = 8;
                if(Input.GetMouseX() >= 95 && Input.GetMouseX() <= 127 && Input.GetMouseY() >= 250 && Input.GetMouseY() <= 282) i = 9;
                if(Input.GetMouseX() >= 135 && Input.GetMouseX() <= 167 && Input.GetMouseY() >= 250 && Input.GetMouseY() <= 282) i = 10;
                if(Input.GetMouseX() >= 175 && Input.GetMouseX() <= 207 && Input.GetMouseY() >= 250 && Input.GetMouseY() <= 282) i = 11;
                if(Input.GetMouseX() >= 215 && Input.GetMouseX() <= 247 && Input.GetMouseY() >= 250 && Input.GetMouseY() <= 282) i = 12;
                if(Input.GetMouseX() >= 255 && Input.GetMouseX() <= 287 && Input.GetMouseY() >= 250 && Input.GetMouseY() <= 282) i = 13;
                if(Input.GetMouseX() >= 295 && Input.GetMouseX() <= 327 && Input.GetMouseY() >= 250 && Input.GetMouseY() <= 282) i = 14;
                if(Input.GetMouseX() >= 335 && Input.GetMouseX() <= 367 && Input.GetMouseY() >= 250 && Input.GetMouseY() <= 282) i = 15;
    
                ...
    
                if(Input.GetMouseX() >= 55 && Input.GetMouseX() <= 87 && Input.GetMouseY() >= 410 && Input.GetMouseY() <= 442) i = 40;
                if(Input.GetMouseX() >= 95 && Input.GetMouseX() <= 127 && Input.GetMouseY() >= 410 && Input.GetMouseY() <= 442) i = 41;
                if(Input.GetMouseX() >= 135 && Input.GetMouseX() <= 167 && Input.GetMouseY() >= 410 && Input.GetMouseY() <= 442) i = 42;
                if(Input.GetMouseX() >= 175 && Input.GetMouseX() <= 207 && Input.GetMouseY() >= 410 && Input.GetMouseY() <= 442) i = 43;
                if(Input.GetMouseX() >= 215 && Input.GetMouseX() <= 247 && Input.GetMouseY() >= 410 && Input.GetMouseY() <= 442) i = 44;
                if(Input.GetMouseX() >= 255 && Input.GetMouseX() <= 287 && Input.GetMouseY() >= 410 && Input.GetMouseY() <= 442) i = 45;
                if(Input.GetMouseX() >= 295 && Input.GetMouseX() <= 327 && Input.GetMouseY() >= 410 && Input.GetMouseY() <= 442) i = 46;
                if(Input.GetMouseX() >= 335 && Input.GetMouseX() <= 367 && Input.GetMouseY() >= 410 && Input.GetMouseY() <= 442) i = 47;
    
               if(Input.GetMouseX() >= 545 && Input.GetMouseX() <= 567 && Input.GetMouseY() >= 85 && Input.GetMouseY() <= 117) e = 0; // Bracers
               if(Input.GetMouseX() >= 545 && Input.GetMouseX() <= 567 && Input.GetMouseY() >= 125 && Input.GetMouseY() <= 157) e = 1; // Hands
               if(Input.GetMouseX() >= 545 && Input.GetMouseX() <= 567 && Input.GetMouseY() >= 165 && Input.GetMouseY() <= 197) e = 2; // Sword
               if(Input.GetMouseX() >= 545 && Input.GetMouseX() <= 567 && Input.GetMouseY() >= 205 && Input.GetMouseY() <= 237) e = 3; // Off hand
    
               if(Input.GetMouseX() >= 675 && Input.GetMouseX() <= 707 && Input.GetMouseY() >= 85 && Input.GetMouseY() <= 117) e = 4; // Helmet
               if(Input.GetMouseX() >= 675 && Input.GetMouseX() <= 707 && Input.GetMouseY() >= 145 && Input.GetMouseY() <= 177) e = 5; // Chest
               if(Input.GetMouseX() >= 675 && Input.GetMouseX() <= 707 && Input.GetMouseY() >= 205 && Input.GetMouseY() <= 237)  e = 6; // Legs

    https://github.com/LaurentGomila/SFML/wiki/Tutorial%3A-Basic-Inventory-System

    Crazy_penguin, 11 Декабря 2013

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

    +9

    1. 1
    #   define BOOST_MPL_AUX_NTTP_DECL(T, x) T x

    Очень интересный стайлгайд Алексей Гуртового

    crastinus, 07 Декабря 2013

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

    +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
    59. 59
    60. 60
    61. 61
    62. 62
    63. 63
    64. 64
    65. 65
    66. 66
    67. 67
    68. 68
    69. 69
    70. 70
    71. 71
    72. 72
    73. 73
    74. 74
    75. 75
    76. 76
    77. 77
    78. 78
    79. 79
    80. 80
    81. 81
    82. 82
    int numBlock = 0;
        for(int i = 0; i < 16; i++)
            for(int j = 0; j < 25; j++)
            {
    
            if(levelInfo[i][j].active)
            {
            if(levelInfo[i][j].part && levelInfo[i][j].type) continue;
            if(levelInfo[i][j].type)
            {
                tempLevel[numBlock*8  ] = i*24;
                tempLevel[numBlock*8+1] = (j)*24;
                tempLevel[numBlock*8+2] = (i+2)*24;
                tempLevel[numBlock*8+3] = (j)*24;
                tempLevel[numBlock*8+4] = (i+2)*24;
                tempLevel[numBlock*8+5] = (j+1)*24;
                tempLevel[numBlock*8+6] = i*24;
                tempLevel[numBlock*8+7] = (j+1)*24;
            }
            else
            {
                tempLevel[numBlock*8  ] = i*24;
                tempLevel[numBlock*8+1] = (j)*24;
                tempLevel[numBlock*8+2] = (i+1)*24;
                tempLevel[numBlock*8+3] = (j)*24;
                tempLevel[numBlock*8+4] = (i+1)*24;
                tempLevel[numBlock*8+5] = (j+1)*24;
                tempLevel[numBlock*8+6] = i*24;
                tempLevel[numBlock*8+7] = (j+1)*24;
            }
    
            if(levelInfo[i][j].type)
                for(int k = 0; k < 8; k++) tempTex[numBlock*8+k] = coord[0][k];
            else
                for(int k = 0; k < 8; k++) tempTex[numBlock*8+k] = coord[1][k];
            }
            else
            {
            tempLevel[numBlock*8  ] = i*24;
            tempLevel[numBlock*8+1] = (j)*24;
            tempLevel[numBlock*8+2] = (i+1)*24;
            tempLevel[numBlock*8+3] = (j)*24;
            tempLevel[numBlock*8+4] = (i+1)*24;
            tempLevel[numBlock*8+5] = (j+1)*24;
            tempLevel[numBlock*8+6] = i*24;
            tempLevel[numBlock*8+7] = (j+1)*24;
            for(int k = 0; k < 8; k++) tempTex[numBlock*8+k] = coord[2][k];
            }
            numBlock++;
            }
    
        for(int i = 0; i < 2; i++)
            for(int j = 0; j < 3; j++)
            {
                if(!fallBlocks[i][j].active) continue;
                if(fallBlocks[i][j].part && fallBlocks[i][j].type) continue;
                if(!fallBlocks[i][j].type)
                {
                    tempLevel[numBlock*8  ] = (fallPosX+i)*24;
                    tempLevel[numBlock*8+1] = (fallPosY-j)*24;
                    tempLevel[numBlock*8+2] = (fallPosX+i+1)*24;
                    tempLevel[numBlock*8+3] = (fallPosY-j)*24;
                    tempLevel[numBlock*8+4] = (fallPosX+i+1)*24;
                    tempLevel[numBlock*8+5] = (fallPosY-j+1)*24;
                    tempLevel[numBlock*8+6] = (fallPosX+i)*24;
                    tempLevel[numBlock*8+7] = (fallPosY-j+1)*24;
                    for(int k = 0; k < 8; k++) tempTex[numBlock*8+k] = coord[1][k];
                }
                else
                {
                    tempLevel[numBlock*8  ] = (fallPosX+i)*24;
                    tempLevel[numBlock*8+1] = (fallPosY-j)*24;
                    tempLevel[numBlock*8+2] = (fallPosX+i+2)*24;
                    tempLevel[numBlock*8+3] = (fallPosY-j)*24;
                    tempLevel[numBlock*8+4] = (fallPosX+i+2)*24;
                    tempLevel[numBlock*8+5] = (fallPosY-j+1)*24;
                    tempLevel[numBlock*8+6] = (fallPosX+i)*24;
                    tempLevel[numBlock*8+7] = (fallPosY-j+1)*24;
                    for(int k = 0; k < 8; k++) tempTex[numBlock*8+k] = coord[0][k];
                }
                numBlock++;
            }

    Нямка. В унитаз уже не помещается, вылью сюда

    pelmenka, 07 Декабря 2013

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

    +28

    1. 1
    QVector<double*>*** ElemBoundCond = tbc->getElementsBC();

    Abbath, 06 Декабря 2013

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

    +16

    1. 1
    2. 2
    3. 3
    function<future<int> (int)> f = [](int a){ cout << a << '\n'; return mreturn(a + 6); };
    int a = (mreturn(5) >>= f).get();
    cout << a;

    HaskellGovno, 06 Декабря 2013

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

    +13

    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
    void Fetch_image::fetch(  ...
    						 , bool& image_repo_available)
    {
    	///...
    	if( smth)
    	{
    		/// ...
    		image_repo_available = false;/// 1
    		throw Exception( ...);/// 2
    	}
    	else
    	{
    		/// ...
    		image_repo_available = true;
    	}
    }
    
    bool Fetch_image::process(... ,bool& image_repo_available)
    {
    	/// ...
    	bool image_repo_available = false;
    	try
    	{
    		/// ...
    		fetch(..., image_repo_available);
    	}
    	catch(Exception const & ex)/// 3
    	{
    		log(...);
    		return false; /// 4
    	}
            catch (...)
            {
                    return false; /// 5
            }
    	/// ...
    }

    Параметры по ссылке
    ///1 устанавливаем значение
    ///2 бросаем исключение
    ///3 в catch ожидаем, что значение сохранится
    ///4 возврат из ф-ии
    И дальше по стеку еще 5 или 6 функций, которые принимают ссылку...


    Нахер так жить, котаны?

    blackhearted, 06 Декабря 2013

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