summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorrandomdan <randomdan@localhost>2013-12-30 18:09:46 +0000
committerrandomdan <randomdan@localhost>2013-12-30 18:09:46 +0000
commit5bc4aed347b174b61ba37a5d05b7665ac0f4b11c (patch)
tree897e9f059c5246b2eb27dabdb9695dd53b44fcec
parentManage database connections on a per thread basis (diff)
downloadproject2-5bc4aed347b174b61ba37a5d05b7665ac0f4b11c.tar.bz2
project2-5bc4aed347b174b61ba37a5d05b7665ac0f4b11c.tar.xz
project2-5bc4aed347b174b61ba37a5d05b7665ac0f4b11c.zip
Allow instanceSet to catch or propergate exceptions with onAll*, exceptions in options setting functions propergate
-rw-r--r--project2/common/instanceStore.h26
-rw-r--r--project2/common/plugable.h2
2 files changed, 19 insertions, 9 deletions
diff --git a/project2/common/instanceStore.h b/project2/common/instanceStore.h
index c61ccfe..36f4e73 100644
--- a/project2/common/instanceStore.h
+++ b/project2/common/instanceStore.h
@@ -29,25 +29,35 @@ class InstanceStore {
prune();
}
- static void OnEach(const boost::function<void(typename StoreType::value_type &)> & func)
+ static void OnEach(const boost::function<void(typename StoreType::value_type &)> & func, bool ContinueOnError = false)
{
BOOST_FOREACH(const auto & l, GetAll()) {
- try {
- func(l.get());
+ if (ContinueOnError) {
+ try {
+ func(l.get());
+ }
+ catch (...) {
+ }
}
- catch (...) {
+ else {
+ func(l.get());
}
}
prune();
}
- static void OnAll(const boost::function<void(Type *)> & func)
+ static void OnAll(const boost::function<void(Type *)> & func, bool ContinueOnError = false)
{
BOOST_FOREACH(const auto & l, GetAll()) {
- try {
- func(l.get());
+ if (ContinueOnError) {
+ try {
+ func(l.get());
+ }
+ catch (...) {
+ }
}
- catch (...) {
+ else {
+ func(l.get());
}
}
prune();
diff --git a/project2/common/plugable.h b/project2/common/plugable.h
index 2a9c58c..af7f91f 100644
--- a/project2/common/plugable.h
+++ b/project2/common/plugable.h
@@ -10,7 +10,7 @@ class ComponentLoader;
class Plugable : public InstanceSet<ComponentLoader> {
public:
- static void onAllComponents(const boost::function<void(ComponentLoader *)> & func) { InstanceSet<ComponentLoader>::OnAll(func); }
+ static void onAllComponents(const boost::function<void(ComponentLoader *)> & func) { InstanceSet<ComponentLoader>::OnAll(func, true); }
};
/// All loaders, keyed by string, enum, int, etc