SharedInstance.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_FRAMEWORK_SHAREDINSTANCE_H
#define SURGSIM_FRAMEWORK_SHAREDINSTANCE_H
#include <memory>
#include <functional>
#include <boost/thread/mutex.hpp>
#include <boost/thread/locks.hpp>
#include "SurgSim/Framework/Assert.h"
namespace SurgSim
{
namespace Framework
{
template <typename T>
class SharedInstance
{
public:
typedef std::function<std::shared_ptr<T>()> InstanceCreator;
SharedInstance();
explicit SharedInstance(const InstanceCreator& instanceCreator);
~SharedInstance();
std::shared_ptr<T> get();
private:
SharedInstance(const SharedInstance&);
SharedInstance& operator=(const SharedInstance&);
std::shared_ptr<T> createInstance();
static InstanceCreator defaultInstanceCreator();
InstanceCreator m_instanceCreator;
std::weak_ptr<T> m_weakInstance;
boost::mutex m_mutex;
};
}; // namespace Framework
}; // namespace SurgSim
#include "SurgSim/Framework/SharedInstance-inl.h"
#endif // SURGSIM_FRAMEWORK_SHAREDINSTANCE_H
SurgSim::Framework::SharedInstance::operator=
SharedInstance & operator=(const SharedInstance &)
Prevent assignment.
SurgSim
Definition: CompoundShapeToGraphics.cpp:29
SharedInstance-inl.h
SurgSim::Framework::SharedInstance::m_weakInstance
std::weak_ptr< T > m_weakInstance
A weak reference to the shared instance, if any.
Definition: SharedInstance.h:155
SurgSim::Framework::SharedInstance::~SharedInstance
~SharedInstance()
Destroy the container and the data it contains.
Definition: SharedInstance-inl.h:46
SurgSim::Framework::SharedInstance::m_mutex
boost::mutex m_mutex
Mutex for synchronization of object creation.
Definition: SharedInstance.h:158
SurgSim::Framework::SharedInstance::defaultInstanceCreator
static InstanceCreator defaultInstanceCreator()
Creates a function that can create an instance using std::make_shared<T>().
Definition: SharedInstance-inl.h:72
SurgSim::Framework::SharedInstance::SharedInstance
SharedInstance()
Create the SharedInstance object used to manage the shared instance.
Definition: SharedInstance-inl.h:34
SurgSim::Framework::SharedInstance::m_instanceCreator
InstanceCreator m_instanceCreator
A creator function used to construct the shared instance.
Definition: SharedInstance.h:152
Assert.h
The header that provides the assertion API.
SurgSim::Framework::SharedInstance::InstanceCreator
std::function< std::shared_ptr< T >)> InstanceCreator
A type that can hold a function object or lambda that takes no arguments and returns std::shared_ptr<...
Definition: SharedInstance.h:109
SurgSim::Framework::SharedInstance
A utility class to manage a shared instance of an object.
Definition: SharedInstance.h:105
SurgSim::Framework::SharedInstance::createInstance
std::shared_ptr< T > createInstance()
Creates an object instance.
Definition: SharedInstance-inl.h:64