Author: aconway
Date: Mon Apr 21 11:59:31 2008
New Revision: 650221

URL: http://svn.apache.org/viewvc?rev=650221&view=rev
Log:
Better workaround for boost::ptr_map incompatibility between boost 1.33 and 
1.34, based on public properties of ptr::map types rather than version numbers.

Modified:
    incubator/qpid/trunk/qpid/cpp/src/qpid/broker/Connection.cpp
    incubator/qpid/trunk/qpid/cpp/src/qpid/broker/DtxManager.cpp
    incubator/qpid/trunk/qpid/cpp/src/qpid/broker/PreviewConnection.cpp
    incubator/qpid/trunk/qpid/cpp/src/qpid/broker/SemanticState.cpp
    incubator/qpid/trunk/qpid/cpp/src/qpid/ptr_map.h
    incubator/qpid/trunk/qpid/cpp/src/tests/interop_runner.cpp

Modified: incubator/qpid/trunk/qpid/cpp/src/qpid/broker/Connection.cpp
URL: 
http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/cpp/src/qpid/broker/Connection.cpp?rev=650221&r1=650220&r2=650221&view=diff
==============================================================================
--- incubator/qpid/trunk/qpid/cpp/src/qpid/broker/Connection.cpp (original)
+++ incubator/qpid/trunk/qpid/cpp/src/qpid/broker/Connection.cpp Mon Apr 21 
11:59:31 2008
@@ -40,7 +40,7 @@
 using namespace qpid::sys;
 using namespace qpid::framing;
 using namespace qpid::sys;
-using namespace qpid::ptr_map;
+using qpid::ptr_map_ptr;
 using qpid::management::ManagementAgent;
 using qpid::management::ManagementObject;
 using qpid::management::Manageable;
@@ -143,7 +143,7 @@
 void Connection::closed(){ // Physically closed, suspend open sessions.
     try {
        for (ChannelMap::iterator i = channels.begin(); i != channels.end(); 
++i)
-           get_pointer(i)->localSuspend();
+           ptr_map_ptr(i)->localSuspend();
         while (!exclusiveQueues.empty()) {
             Queue::shared_ptr q(exclusiveQueues.front());
             q->releaseExclusiveOwnership();
@@ -186,7 +186,7 @@
     if (i == channels.end()) {
         i = channels.insert(id, new SessionHandler(*this, id)).first;
     }
-    return *get_pointer(i);
+    return *ptr_map_ptr(i);
 }
 
 ManagementObject::shared_ptr Connection::GetManagementObject (void) const

Modified: incubator/qpid/trunk/qpid/cpp/src/qpid/broker/DtxManager.cpp
URL: 
http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/cpp/src/qpid/broker/DtxManager.cpp?rev=650221&r1=650220&r2=650221&view=diff
==============================================================================
--- incubator/qpid/trunk/qpid/cpp/src/qpid/broker/DtxManager.cpp (original)
+++ incubator/qpid/trunk/qpid/cpp/src/qpid/broker/DtxManager.cpp Mon Apr 21 
11:59:31 2008
@@ -29,7 +29,7 @@
 
 using boost::intrusive_ptr;
 using qpid::sys::Mutex;
-using namespace qpid::ptr_map;
+using qpid::ptr_map_ptr;
 using namespace qpid::broker;
 using namespace qpid::framing;
 
@@ -95,7 +95,7 @@
     if (i == work.end()) {
         throw InvalidArgumentException(QPID_MSG("Unrecognised xid " << xid));
     }
-    return get_pointer(i);
+    return ptr_map_ptr(i);
 }
 
 void DtxManager::remove(const std::string& xid)
@@ -116,7 +116,7 @@
     if (i != work.end()) {
         throw CommandInvalidException(QPID_MSG("Xid " << xid << " is already 
known (use 'join' to add work to an existing xid)"));
     } else {
-      return get_pointer(work.insert(xid, new DtxWorkRecord(xid, 
store)).first);
+      return ptr_map_ptr(work.insert(xid, new DtxWorkRecord(xid, 
store)).first);
     }
 }
 
@@ -147,7 +147,7 @@
     if (i == work.end()) {
         QPID_LOG(warning, "Transaction timeout failed: no record for xid");
     } else {
-        get_pointer(i)->timedout();
+        ptr_map_ptr(i)->timedout();
         //TODO: do we want to have a timed task to cleanup, or can we rely on 
an explicit completion?
         //timer.add(intrusive_ptr<TimerTask>(new DtxCleanup(60*30/*30 mins*/, 
*this, xid)));
     }

Modified: incubator/qpid/trunk/qpid/cpp/src/qpid/broker/PreviewConnection.cpp
URL: 
http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/cpp/src/qpid/broker/PreviewConnection.cpp?rev=650221&r1=650220&r2=650221&view=diff
==============================================================================
--- incubator/qpid/trunk/qpid/cpp/src/qpid/broker/PreviewConnection.cpp 
(original)
+++ incubator/qpid/trunk/qpid/cpp/src/qpid/broker/PreviewConnection.cpp Mon Apr 
21 11:59:31 2008
@@ -40,7 +40,7 @@
 using namespace qpid::sys;
 using namespace qpid::framing;
 using namespace qpid::sys;
-using namespace qpid::ptr_map;
+using qpid::ptr_map_ptr;
 using qpid::management::ManagementAgent;
 using qpid::management::ManagementObject;
 using qpid::management::Manageable;
@@ -139,7 +139,7 @@
 void PreviewConnection::closed(){ // Physically closed, suspend open sessions.
     try {
        for (ChannelMap::iterator i = channels.begin(); i != channels.end(); 
++i)
-           get_pointer(i)->localSuspend();
+           ptr_map_ptr(i)->localSuspend();
         while (!exclusiveQueues.empty()) {
             Queue::shared_ptr q(exclusiveQueues.front());
             q->releaseExclusiveOwnership();
@@ -183,7 +183,7 @@
     if (i == channels.end()) {
         i = channels.insert(id, new PreviewSessionHandler(*this, id)).first;
     }
-    return *get_pointer(i);
+    return *ptr_map_ptr(i);
 }
 
 ManagementObject::shared_ptr PreviewConnection::GetManagementObject (void) 
const

Modified: incubator/qpid/trunk/qpid/cpp/src/qpid/broker/SemanticState.cpp
URL: 
http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/cpp/src/qpid/broker/SemanticState.cpp?rev=650221&r1=650220&r2=650221&view=diff
==============================================================================
--- incubator/qpid/trunk/qpid/cpp/src/qpid/broker/SemanticState.cpp (original)
+++ incubator/qpid/trunk/qpid/cpp/src/qpid/broker/SemanticState.cpp Mon Apr 21 
11:59:31 2008
@@ -58,7 +58,7 @@
 using namespace qpid::broker;
 using namespace qpid::framing;
 using namespace qpid::sys;
-using namespace qpid::ptr_map;
+using qpid::ptr_map_ptr;
 
 SemanticState::SemanticState(DeliveryAdapter& da, SessionContext& ss)
     : session(ss),
@@ -77,7 +77,7 @@
 SemanticState::~SemanticState() {
     //cancel all consumers
     for (ConsumerImplMap::iterator i = consumers.begin(); i != 
consumers.end(); i++) {
-        cancel(*get_pointer(i));
+        cancel(*ptr_map_ptr(i));
     }
 
     if (dtxBuffer.get()) {
@@ -105,7 +105,7 @@
 void SemanticState::cancel(const string& tag){
     ConsumerImplMap::iterator i = consumers.find(tag);
     if (i != consumers.end()) {
-        cancel(*get_pointer(i));
+        cancel(*ptr_map_ptr(i));
         consumers.erase(i); 
         //should cancel all unacked messages for this consumer so that
         //they are not redelivered on recovery
@@ -429,7 +429,7 @@
 void SemanticState::requestDispatch()
 {    
     for (ConsumerImplMap::iterator i = consumers.begin(); i != 
consumers.end(); i++) {
-        requestDispatch(*get_pointer(i));
+        requestDispatch(*ptr_map_ptr(i));
     }
 }
 
@@ -445,7 +445,7 @@
     delivery.subtractFrom(outstanding);
     ConsumerImplMap::iterator i = consumers.find(delivery.getTag());
     if (i != consumers.end()) {
-        get_pointer(i)->complete(delivery);
+        ptr_map_ptr(i)->complete(delivery);
     }
 }
 
@@ -514,7 +514,7 @@
     if (i == consumers.end()) {
         throw NotFoundException(QPID_MSG("Unknown destination " << 
destination));
     } else {
-        return *get_pointer(i);
+        return *ptr_map_ptr(i);
     }
 }
 

Modified: incubator/qpid/trunk/qpid/cpp/src/qpid/ptr_map.h
URL: 
http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/cpp/src/qpid/ptr_map.h?rev=650221&r1=650220&r2=650221&view=diff
==============================================================================
--- incubator/qpid/trunk/qpid/cpp/src/qpid/ptr_map.h (original)
+++ incubator/qpid/trunk/qpid/cpp/src/qpid/ptr_map.h Mon Apr 21 11:59:31 2008
@@ -23,98 +23,35 @@
  */
 
 #include <boost/ptr_container/ptr_map.hpp>
-#include <boost/version.hpp>
+#include <boost/utility/enable_if.hpp>
+#include <boost/type_traits/is_same.hpp>
 
 namespace qpid {
-namespace ptr_map {
 
 /** @file
  * Workaround for API change between boost 1.33 and 1.34.
  *
  * To be portable across these versions, code using boost::ptr_map
- * iterators should use get_pointer(i) to get the pointer from
- * a boost::ptr_map iterator.
+ * iterators should use ptr_map_ptr(i) to get the pointer from
+ * boost::ptr_map::iterator i.
  *
  * Can be removed when we no longer support platforms on 1.33.
  *
  * @see 
http://www.boost.org/libs/ptr_container/doc/ptr_container.html#upgrading-from-boost-v-1-33
  */
 
-#include <boost/type_traits/remove_const.hpp>
 
-#if (BOOST_VERSION < 103400)
+typedef boost::is_same<boost::ptr_map<int, int>::iterator::value_type,
+                       int> IsOldPtrMap;
 
-template <class PtrMapIter>
-typename PtrMapIter::pointer get_pointer(const PtrMapIter& i)
-{ return &*i; }
+template <class Iter>
+typename boost::enable_if<IsOldPtrMap, typename Iter::value_type*>::type
+ptr_map_ptr(const Iter& i) { return &*i; }
+
+template <class Iter>
+typename boost::disable_if<IsOldPtrMap, typename 
Iter::value_type::second_type>::type
+ptr_map_ptr(const Iter& i) { return i->second; }
 
-#else
-
-template <class PtrMapIter>
-typename boost::remove_const<typename 
PtrMapIter::value_type::second_type>::type
-get_pointer(const PtrMapIter& i)
-{ return i->second; }
-
-#endif
-
-}} // namespace qpid::ptr_map
-
-#endif  /*!QPID_PTR_MAP*/
-#ifndef QPID_PTR_MAP
-#define QPID_PTR_MAP
-
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you 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.
- *
- */
-
-#include <boost/ptr_container/ptr_map.hpp>
-#include <boost/version.hpp>
-
-namespace qpid {
-namespace ptr_map {
-
-/** @file
- * Workaround for API change between boost 1.33 and 1.34.
- *
- * To be portable across these versions, code using boost::ptr_map
- * iterators should use get_pointer(i) to get the pointer from
- * a boost::ptr_map iterator.
- *
- * Can be removed when we no longer support platforms on 1.33.
- *
- * @see 
http://www.boost.org/libs/ptr_container/doc/ptr_container.html#upgrading-from-boost-v-1-33
- */
-#if (BOOST_VERSION < 103400)
-
-template <class PtrMapIter>
-typename PtrMapIter::pointer get_pointer(const PtrMapIter& i)
-{ return &*i; }
-
-#else
-
-template <class PtrMapIter>
-typename PtrMapIter::value_type::second_type get_pointer(const PtrMapIter& i)
-{ return i->second; }
-
-#endif
-
-}} // namespace qpid::ptr_map
+} // namespace qpid
 
 #endif  /*!QPID_PTR_MAP*/

Modified: incubator/qpid/trunk/qpid/cpp/src/tests/interop_runner.cpp
URL: 
http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/cpp/src/tests/interop_runner.cpp?rev=650221&r1=650220&r2=650221&view=diff
==============================================================================
--- incubator/qpid/trunk/qpid/cpp/src/tests/interop_runner.cpp (original)
+++ incubator/qpid/trunk/qpid/cpp/src/tests/interop_runner.cpp Mon Apr 21 
11:59:31 2008
@@ -203,7 +203,7 @@
 bool Listener::invite(const string& name)
 {
     TestMap::iterator i = tests.find(name);
-    test = (i != tests.end()) ? qpid::ptr_map::get_pointer(i) : 0;
+    test = (i != tests.end()) ? qpid::ptr_map_ptr(i) : 0;
     return test;
 }
 


Reply via email to