8#ifndef DESIGNLAB_ASYNCABLE_DATA_H_
9#define DESIGNLAB_ASYNCABLE_DATA_H_
11#include <boost/thread.hpp>
47template <CopyAssignable T>
51 explicit AsyncableData(
const T& data) : data_(data), update_count_(0) {}
65 boost::shared_lock<boost::shared_mutex> read_lock(mtx_);
76 boost::upgrade_lock<boost::shared_mutex> upgrade_lock(mtx_);
79 boost::upgrade_to_unique_lock<boost::shared_mutex> write_lock(
95 boost::shared_lock<boost::shared_mutex> read_lock(mtx_);
100 mutable boost::shared_mutex mtx_;
118 : data_(data), update_count_(0) {}
136 boost::shared_lock<boost::shared_mutex> read_lock(mtx_);
147 boost::upgrade_lock<boost::shared_mutex> upgrade_lock(mtx_);
150 boost::upgrade_to_unique_lock<boost::shared_mutex> write_lock(
165 boost::upgrade_lock<boost::shared_mutex> upgrade_lock(mtx_);
168 boost::upgrade_to_unique_lock<boost::shared_mutex> write_lock(
171 data_.push_back(data);
182 boost::upgrade_lock<boost::shared_mutex> upgrade_lock(mtx_);
185 boost::upgrade_to_unique_lock<boost::shared_mutex> write_lock(
199 boost::shared_lock<boost::shared_mutex> read_lock(mtx_);
211 boost::shared_lock<boost::shared_mutex> read_lock(mtx_);
212 return update_count_;
216 mutable boost::shared_mutex mtx_;
218 std::vector<T> data_;
AsyncableData & operator=(const AsyncableData &)=delete
コピー代入は禁止.
void SetData(const std::vector< T > &data)
値を変更する. この時,write lockをかける. データの更新回数をインクリメントする.
AsyncableData(const AsyncableData &)=delete
コピーは禁止.
size_t GetSize() const
sizeを返す.要素の数を size_tで返す. この時,read lockをかける.
int GetUpdateCount() const
データの更新回数を返す. この時,read lockをかける. この値を調べて,データの更新回数が変わっているかを確認することで, データの更新が必要かを確認する.
void Clean()
値をすべて削除する. この時,write lockをかける. データの更新回数をインクリメントする.
std::vector< T > GetData() const
値をコピーして返す. この時,read lockをかける. 当然,データの更新回数はインクリメントされない.
AsyncableData(const std::vector< T > &data)
void PushBack(const T &data)
最後尾に値を追加する. この時,write lockをかける. データの更新回数をインクリメントする.
AsyncableData(AsyncableData &&)=delete
ムーブは禁止.
非同期処理を行う際に,データの更新回数とデータをまとめて扱うためのクラス.
AsyncableData(const T &data)
int GetUpdateCount() const
データの更新回数を返す. この時,read lockをかける. この値を調べて,データの更新回数が変わっているかを確認することで, データの更新が必要かを確認する.
void SetData(const T &data)
値を変更する. この時,write lockをかける. データの更新回数をインクリメントする.
T GetData() const
値をコピーして返す. この時,read lockをかける. 当然,データの更新回数はインクリメントされない.
AsyncableData(AsyncableData &&)=delete
ムーブは禁止
AsyncableData(const AsyncableData &)=delete
コピーは禁止
AsyncableData & operator=(const AsyncableData &)=delete
コピー代入は禁止