summaryrefslogtreecommitdiff
path: root/cpp/src/qpid/sys/CopyOnWriteArray.h
diff options
context:
space:
mode:
authorTed Ross <tross@apache.org>2010-02-01 16:10:33 +0000
committerTed Ross <tross@apache.org>2010-02-01 16:10:33 +0000
commit7f1cc4b0a660cbe837e0261bd576eb4dd51dffd6 (patch)
tree1ba62254b64dc384d6b431500d4f7b405b9feb79 /cpp/src/qpid/sys/CopyOnWriteArray.h
parenta8d83333c8050c18918e370d2f0bb9621b0038c7 (diff)
downloadqpid-python-7f1cc4b0a660cbe837e0261bd576eb4dd51dffd6.tar.gz
QPID-2348 - [C++] The HeadersExchange does not support federation
Applied patch from Sam Joyce git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk/qpid@905322 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'cpp/src/qpid/sys/CopyOnWriteArray.h')
-rw-r--r--cpp/src/qpid/sys/CopyOnWriteArray.h18
1 files changed, 18 insertions, 0 deletions
diff --git a/cpp/src/qpid/sys/CopyOnWriteArray.h b/cpp/src/qpid/sys/CopyOnWriteArray.h
index e4ae3a6094..45a231dfd8 100644
--- a/cpp/src/qpid/sys/CopyOnWriteArray.h
+++ b/cpp/src/qpid/sys/CopyOnWriteArray.h
@@ -103,6 +103,24 @@ public:
return false;
}
+ template <class TestFn, class ModifierFn>
+ bool modify_if(TestFn f, ModifierFn & m)
+ {
+ if (!array)
+ return false;
+ {
+ Mutex::ScopedLock l(lock);
+ if (std::find_if(array->begin(), array->end(), f) != array->end())
+ {
+ ArrayPtr copy(new std::vector<T>(*array));
+ m(*std::find_if(copy->begin(), copy->end(), f));
+ array = copy;
+ return true;
+ }
+ }
+ return false;
+ }
+
template <class F>
F for_each(F f)
{