BufferedValue.h
Go to the documentation of this file.
// This file is a part of the OpenSurgSim project.
// Copyright 2013, SimQuest Solutions Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
#ifndef SURGSIM_DATASTRUCTURES_BUFFEREDVALUE_H
#define SURGSIM_DATASTRUCTURES_BUFFEREDVALUE_H
#include <memory>
#include <utility>
#include <boost/thread.hpp>
#include "SurgSim/Framework/Assert.h"
namespace SurgSim
{
namespace DataStructures
{
template <class T>
class BufferedValue
{
public:
// Default Constructor
BufferedValue();
// Constructor
explicit BufferedValue(const T& value);
~BufferedValue();
void publish();
T& unsafeGet();
std::shared_ptr<const T> safeGet() const;
private:
typedef boost::shared_lock<boost::shared_mutex> SharedLock;
typedef boost::unique_lock<boost::shared_mutex> UniqueLock;
T m_value;
std::shared_ptr<const T> m_safeValue;
mutable boost::shared_mutex m_mutex;
};
} // DataStructures
} // SurgSim
#include "SurgSim/DataStructures/BufferedValue-inl.h"
#endif
SurgSim
Definition: CompoundShapeToGraphics.cpp:29
SurgSim::DataStructures::BufferedValue::m_safeValue
std::shared_ptr< const T > m_safeValue
The buffered value.
Definition: BufferedValue.h:66
SurgSim::DataStructures::BufferedValue::~BufferedValue
~BufferedValue()
Destructor.
Definition: BufferedValue-inl.h:38
SurgSim::DataStructures::BufferedValue
BufferedValue is a class to enable a representation of two values for one variable, where both values need to be accessible at the same time, one in a thread safe, single threaded context, the other in a thread unsafe context.
Definition: BufferedValue.h:33
SurgSim::DataStructures::BufferedValue::unsafeGet
T & unsafeGet()
Get the value.
Definition: BufferedValue-inl.h:53
BufferedValue-inl.h
SurgSim::DataStructures::BufferedValue::UniqueLock
boost::unique_lock< boost::shared_mutex > UniqueLock
Definition: BufferedValue.h:60
SurgSim::DataStructures::BufferedValue::BufferedValue
BufferedValue()
Definition: BufferedValue-inl.h:25
SurgSim::DataStructures::BufferedValue::SharedLock
boost::shared_lock< boost::shared_mutex > SharedLock
Definition: BufferedValue.h:59
SurgSim::DataStructures::BufferedValue::m_mutex
boost::shared_mutex m_mutex
The mutex used to lock for reading and writing.
Definition: BufferedValue.h:69
Assert.h
The header that provides the assertion API.
SurgSim::DataStructures::BufferedValue::publish
void publish()
Make the current value the one returned by calls to safeGet.
Definition: BufferedValue-inl.h:43
SurgSim::DataStructures::BufferedValue::m_value
T m_value
The raw value.
Definition: BufferedValue.h:63
SurgSim::DataStructures::BufferedValue::safeGet
std::shared_ptr< const T > safeGet() const
Get the buffered value.
Definition: BufferedValue-inl.h:59