diff options
| author | Alan Conway <aconway@apache.org> | 2008-04-21 18:59:31 +0000 |
|---|---|---|
| committer | Alan Conway <aconway@apache.org> | 2008-04-21 18:59:31 +0000 |
| commit | 3097509ae43d93c1832638f80ba2ad5810fbef44 (patch) | |
| tree | 96a6a73a5ab8a54aa49983f0f20881964d7418b8 /cpp/src/qpid/ptr_map.h | |
| parent | 69a3af237753a91e9cf8dbb98e890131d53e3ee3 (diff) | |
| download | qpid-python-3097509ae43d93c1832638f80ba2ad5810fbef44.tar.gz | |
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.
git-svn-id: https://svn.apache.org/repos/asf/incubator/qpid/trunk/qpid@650221 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'cpp/src/qpid/ptr_map.h')
| -rw-r--r-- | cpp/src/qpid/ptr_map.h | 89 |
1 files changed, 13 insertions, 76 deletions
diff --git a/cpp/src/qpid/ptr_map.h b/cpp/src/qpid/ptr_map.h index e9a1d507a6..92da79a2e5 100644 --- a/cpp/src/qpid/ptr_map.h +++ b/cpp/src/qpid/ptr_map.h @@ -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; } -#else +template <class Iter> +typename boost::disable_if<IsOldPtrMap, typename Iter::value_type::second_type>::type +ptr_map_ptr(const Iter& i) { return i->second; } -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*/ |
