앞서 만든 static queue가 잘 동작하는지 몇 가지 테스트를 해 보았다. 먼저, 아래와 같이 queue에 저장할 간단한 데이터 구조를 만들었다.
1 2 3 4 5 6 7 8 9 10 11 12 13 | struct DataItem { DataItem( int key = 0, double value = 0) : m_key(key), m_value(value) {}; void print() const { std::cout << "key=" << m_key << ", value=" << m_value << std::endl; } private : int m_key; double m_value; }; typedef StaticQueue<DataItem> StaticDataQueue; |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | // StaticDataQueue dataQue(10); for ( size_t i = 0; i < 100; ++i) { #if __cplusplus >= 201103L dataQue.enqueue(DataItem(i, 0.1 * i)); // call move semantics(-std=c++11) #else dataQue.enqueue(DataItem(i, 10 * i)); // call copy semantics //dataQue.enqueue(new DataItem(i, 10 * i)); // OK~! #endif if (i >= dataQue.capacity() - 1 && !dataQue.isEmpty()) { DataItem dq_item = dataQue.dequeue(); std::cout << "Dequeue: " ; dq_item.print(); } } dataQue.print(); |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | // dataQue[3] = DataItem(3, 333); StaticDataQueue qtmp1(dataQue), qtmp2(100); std::cout << "\n<< qtmp1 >>\n" ; qtmp1.print(); std::cout << "\n<< qtmp2 >>\n" ; qtmp2.print(); qtmp2 = qtmp1; std::cout << "\n<< qtmp2 >>\n" ; qtmp2.print(); #if __cplusplus >= 201103L StaticDataQueue qtmp3(std::move(qtmp2)); std::cout << "\n<< qtmp2 >>\n" ; qtmp2.print(); std::cout << "\n<< qtmp3 >>\n" ; qtmp3.print(); #endif |
댓글 없음:
댓글 쓰기