Program Listing for File mt_vector.hpp

Return to documentation for file (rcppsw/multithread/mt_vector.hpp)

#pragma once

/*******************************************************************************
 * Includes
 ******************************************************************************/
#include <boost/thread.hpp>
#include <boost/thread/locks.hpp>
#include <vector>

#include "rcppsw/rcppsw.hpp"

/*******************************************************************************
 * Namespaces/Decls
 ******************************************************************************/
namespace rcppsw::multithread {

/*******************************************************************************
 * Class Definitions
 ******************************************************************************/
template <typename T>
class mt_vector {
 public:
  using const_iterator = typename std::vector<T>::const_iterator;

  mt_vector(void) = default;

  void push_back(const T& data) {
    boost::unique_lock<boost::mutex> lock(m_mtx);
    m_v.push_back(data);
  }

 private:
  /* clang-format off */
  std::vector<T> m_v;
  boost::mutex   m_mtx;
  /* clang-format on */

 public:
  RCPPSW_WRAP_DECLDEF(size, m_v, const);
  RCPPSW_WRAP_DECLDEF(operator[], m_v);
  RCPPSW_WRAP_DECLDEF(begin, m_v, const);
  RCPPSW_WRAP_DECLDEF(end, m_v, const);
};

} /* namespace rcppsw::multithread */