PackageBuffer.h 894 Bytes
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
#pragma once

#include "boost/lockfree/queue.hpp"
#include <functional>

namespace ROSBridge {
namespace Bridge {
namespace lf = ::boost::lockfree;
template <class T>
class PackageBuffer
{
public:
    PackageBuffer();

    void push(T t) {
        buffer.push(t);
        if (_pushCallback)
            _pushCallback();
    }

    T pop() {
        T temp = buffer.pop();
        if (_popCallback)
            _popCallback();
        return temp;
    }

    void setPushCallback(std::function<void(void)> pushCallback) {
        _pushCallback = pushCallback;
    }

    void setPopCallback(std::function<void(void)> popCallback) {
        _popCallback = popCallback;
    }

    bool empty() const { return buffer.empty();}
private:
    lf::queue<T> buffer;
    std::function<void(void)> _popCallback;
    std::function<void(void)> _pushCallback;
};

} // namespace Communicator

} // namespace