Subversion Repositories HomeAutomation

Rev

Rev 1318 | Details | Compare with Previous | Last modification | View Log | SVN | RSS feed

Rev Author Line No. Line
1309 runge 1
/*
1318 runge 2
 * Queue.hpp
1309 runge 3
 *
4
 *  Created on: Apr 27, 2009
5
 *      Author: Mattias Runge
6
 */
7
 
1318 runge 8
#ifndef QUEUE_HPP_
9
#define QUEUE_HPP_
1309 runge 10
 
11
#include <queue>
12
#include <boost/thread.hpp>
13
#include <boost/thread/mutex.hpp>
14
#include <boost/thread/locks.hpp>
15
 
1318 runge 16
/* Note on templates
17
 * Can not have h/cpp structure because we will get linker problems
18
 * Read more here: http://www.parashift.com/c++-faq-lite/templates.html#faq-35.13
19
*/
20
 
1309 runge 21
namespace atom {
1317 runge 22
namespace thread {
1309 runge 23
 
1317 runge 24
template<typename T>
25
class Queue
1309 runge 26
{
27
public:
1403 runge 28
    Queue() { }
29
    ~Queue() { }
1309 runge 30
 
1403 runge 31
    void Push(T item)
1318 runge 32
    {
1403 runge 33
        boost::mutex::scoped_lock guard(this->guard_mutex_);
1309 runge 34
 
1403 runge 35
        this->queue_.push(item);
1318 runge 36
    }
37
 
38
    T pop()
39
    {
1403 runge 40
        boost::mutex::scoped_lock guard(this->guard_mutex_);
41
 
42
        T item = this->queue_.front();
43
        this->queue_.pop();
1318 runge 44
        return item;
45
    }
46
 
47
    unsigned int size()
48
    {
1403 runge 49
        boost::mutex::scoped_lock guard(this->guard_mutex_);
50
 
51
        return this->queue_.size();
1318 runge 52
    }
53
 
1309 runge 54
private:
1403 runge 55
    std::queue<T> queue_;
56
    boost::mutex guard_mutex_;
1309 runge 57
};
58
 
1403 runge 59
} // namespace thread
60
} // namespace atom
1309 runge 61
 
1403 runge 62
#endif /* QUEUE_HPP_ */
1309 runge 63