35 #include <boost/noncopyable.hpp> 36 #include <boost/shared_ptr.hpp> 37 #include <boost/static_assert.hpp> 38 #include <boost/thread/recursive_mutex.hpp> 40 #include "rsc/config.h" 41 #include "rsc/rscexports.h" 43 #include "../misc/langutils.h" 62 class DEPRECATED_CLASS("If possible, use
rsc::patterns::Factory instead") Registry:
public boost::noncopyable {
80 DEPRECATED_MSG(
void addRegistree(R* r,
const std::string& errorDescription =
""),
81 "If possible, use rsc::patterns::Factory instead") {
83 boost::recursive_mutex::scoped_lock lock(mutex);
85 if (registreesByName.count(r->getRegistryKey())) {
86 throw std::invalid_argument(
87 "There already is a registree with key '" 88 + r->getRegistryKey() +
"'. " + errorDescription);
91 registreesByName[r->getRegistryKey()] = boost::shared_ptr<R>(r);
102 DEPRECATED_MSG(boost::shared_ptr<R> getRegistree(
const std::string& key),
103 "If possible, use rsc::patterns::Factory instead") {
105 boost::recursive_mutex::scoped_lock lock(mutex);
107 typename std::map<std::string, boost::shared_ptr<R> >::const_iterator it =
108 registreesByName.find(key);
109 if (it == registreesByName.end()) {
110 throw std::invalid_argument(
111 "There is no registree with key '" + key +
"'.");
124 "If possible, use rsc::patterns::Factory instead") {
126 boost::recursive_mutex::scoped_lock lock(mutex);
128 std::set<std::string> keys;
129 typename std::map<std::string, boost::shared_ptr<R> >::const_iterator it;
130 for (it = registreesByName.begin(); it != registreesByName.end();
132 keys.insert(it->first);
146 "If possible, use rsc::patterns::Factory instead") {
147 boost::recursive_mutex::scoped_lock lock(mutex);
148 return registreesByName.erase(name) != 0;
158 "If possible, use rsc::patterns::Factory instead") {
164 boost::recursive_mutex mutex;
165 std::map<std::string, boost::shared_ptr<R> > registreesByName;
182 #define CREATE_GLOBAL_REGISTREE(registry, registree, uniqueName) \ 183 class Starter##uniqueName { \ 185 Starter##uniqueName() { \ 186 (registry)->addRegistree(registree); \ 189 Starter##uniqueName uniqueName##Starter; 205 #define CREATE_GLOBAL_REGISTREE_MSG(registry, registree, uniqueName, msg) \ 206 class Starter##uniqueName { \ 208 Starter##uniqueName() { \ 209 (registry)->addRegistree(registree, msg); \ 212 Starter##uniqueName uniqueName##Starter; #define DEPRECATED_CLASS(msg)
This macro allows you to mark a class as being deprecated.
#define DEPRECATED_MSG(func, msg)
This macro allows you to mark a function as being deprecated including a message explaining the depre...