diff options
Diffstat (limited to 'libstdc++-v3/include/ext/pb_assoc/detail/value_type_adapter/value_type_adapter.hpp')
-rw-r--r-- | libstdc++-v3/include/ext/pb_assoc/detail/value_type_adapter/value_type_adapter.hpp | 601 |
1 files changed, 0 insertions, 601 deletions
diff --git a/libstdc++-v3/include/ext/pb_assoc/detail/value_type_adapter/value_type_adapter.hpp b/libstdc++-v3/include/ext/pb_assoc/detail/value_type_adapter/value_type_adapter.hpp deleted file mode 100644 index 9f2dfb2fb6a..00000000000 --- a/libstdc++-v3/include/ext/pb_assoc/detail/value_type_adapter/value_type_adapter.hpp +++ /dev/null @@ -1,601 +0,0 @@ -// -*- C++ -*- - -// Copyright (C) 2005, 2006 Free Software Foundation, Inc. -// -// This file is part of the GNU ISO C++ Library. This library is free -// software; you can redistribute it and/or modify it under the -// terms of the GNU General Public License as published by the -// Free Software Foundation; either version 2, or (at your option) -// any later version. - -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License along -// with this library; see the file COPYING. If not, write to the Free -// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, -// USA. - -// As a special exception, you may use this file as part of a free software -// library without restriction. Specifically, if other files instantiate -// templates or use macros or inline functions from this file, or you compile -// this file and link it with other files to produce an executable, this -// file does not by itself cause the resulting executable to be covered by -// the GNU General Public License. This exception does not however -// invalidate any other reasons why the executable file might be covered by -// the GNU General Public License. - -// Copyright (C) 2004 Ami Tavory and Vladimir Dreizin, IBM-HRL. - -// Permission to use, copy, modify, sell, and distribute this software -// is hereby granted without fee, provided that the above copyright -// notice appears in all copies, and that both that copyright notice and -// this permission notice appear in supporting documentation. None of -// the above authors, nor IBM Haifa Research Laboratories, make any -// representation about the suitability of this software for any -// purpose. It is provided "as is" without express or implied warranty. - -/** - * @file value_type_adapter.hpp - * Contains an adapter of mapping levels. - */ - -#ifndef VALUE_TYPE_ADAPTER_HPP -#define VALUE_TYPE_ADAPTER_HPP - -#include <ext/pb_assoc/detail/value_type_adapter/ref_pair.hpp> -#include <ext/pb_assoc/detail/assoc_cntnr_base.hpp> -#include <ext/pb_assoc/detail/value_type_adapter/invalidation_guarantee_selector.hpp> -#include <ext/pb_assoc/detail/type_utils.hpp> -#include <utility> -#include <algorithm> -#include <tr1/type_traits> // for aligned_storage/alignment_of - -namespace pb_assoc -{ - - namespace detail - { - -#define PB_ASSOC_STATIC_ASSERT(UNIQUE, E) \ - typedef \ - pb_assoc::detail::static_assert_dummy_class< \ - sizeof(pb_assoc::detail::static_assert<(bool)(E)>)> \ - UNIQUE##static_assert_type - -#define PB_ASSOC_CLASS_T_DEC \ - template< \ - typename Key, \ - typename Data, \ - class DS_Tag, \ - class Policy_Tl, \ - class Allocator, \ - int Mapping_Level> - -#define PB_ASSOC_CLASS_C_DEC \ - value_type_adapter< \ - Key, \ - Data, \ - DS_Tag, \ - Policy_Tl, \ - Allocator, \ - Mapping_Level> - -#define PB_ASSOC_BASE_C_DEC \ - cond_type< \ - Mapping_Level != 1, \ - value_type_adapter< \ - Key, \ - Data, \ - DS_Tag, \ - Policy_Tl, \ - Allocator, \ - Mapping_Level - 1>, \ - typename assoc_cntnr_base< \ - Key, \ - Data, \ - DS_Tag, \ - Policy_Tl, \ - Allocator>::type>::type - - template<typename Key, - typename Data, - class DS_Tag, - class Policy_Tl, - class Allocator, - int Mapping_Level> - struct value_type_adapter : public PB_ASSOC_BASE_C_DEC - { - - private: - typedef typename PB_ASSOC_BASE_C_DEC my_base; - - typedef typename my_base::data_type my_base_data_type; - - enum - { - same_alloc_type = - is_same_type< - typename my_base::allocator::template rebind< - char>::other, - typename my_base_data_type::allocator::template rebind< - char>::other>::value - }; - - PB_ASSOC_STATIC_ASSERT(wrong_level, Mapping_Level > 0); - - PB_ASSOC_STATIC_ASSERT(must_be_same_alloc, same_alloc_type); - -#include <ext/pb_assoc/detail/value_type_adapter/value_type_traits.hpp> -#include <ext/pb_assoc/detail/value_type_adapter/it_value_type_traits.hpp> - - typedef - it_value_type_traits_< - typename base_it_key_type< - my_base, - Mapping_Level == 1>::type, - typename my_base_data_type::const_key_reference, - typename cond_type< - is_same_type< - typename my_base_data_type::data_type, - null_data_type>::value, - null_data_type, - typename my_base_data_type::data_reference>::type, - typename my_base_data_type::reference, - typename my_base::allocator> - it_value_type_traits_t; - -#include <ext/pb_assoc/detail/value_type_adapter/iterator.hpp> - - typedef - value_type_traits_< - typename my_base::key_type, - typename my_base_data_type::key_type, - typename my_base_data_type::data_type, - typename my_base::allocator> - value_type_traits_t; - - enum - { - has_data = - !is_same_type< - typename my_base_data_type::data_type, - null_data_type>::value - }; - - public: - - typedef typename Allocator::size_type size_type; - - typedef typename Allocator::difference_type difference_type; - - typedef typename my_base::allocator allocator; - - typedef typename it_value_type_traits_t::key_type it_key_type; - - typedef - std::pair< - typename my_base::key_type, - typename my_base_data_type::key_type> - key_type; - - typedef - typename allocator::template rebind< - key_type>::other::reference - key_reference; - - typedef - typename allocator::template rebind< - key_type>::other::const_reference - const_key_reference; - - typedef - typename allocator::template rebind< - key_type>::other::pointer - key_pointer; - - typedef - typename allocator::template rebind< - key_type>::other::const_pointer - const_key_pointer; - - typedef typename my_base_data_type::data_type data_type; - - typedef - typename allocator::template rebind< - data_type>::other::reference - data_reference; - - typedef - typename allocator::template rebind< - data_type>::other::const_reference - const_data_reference; - - typedef - typename allocator::template rebind< - data_type>::other::pointer - data_pointer; - - typedef - typename allocator::template rebind< - data_type>::other::const_pointer - const_data_pointer; - - typedef typename value_type_traits_t::value_type value_type; - - typedef typename value_type_traits_t::reference reference; - - typedef typename value_type_traits_t::const_reference const_reference; - - typedef typename value_type_traits_t::pointer pointer; - - typedef typename value_type_traits_t::const_pointer const_pointer; - - typedef - it_< - typename my_base::const_find_iterator, - typename my_base_data_type::const_find_iterator, - has_data, - true> - const_find_iterator; - - typedef - it_< - typename my_base::find_iterator, - typename my_base_data_type::find_iterator, - has_data, - false> - find_iterator; - - typedef - it_< - typename my_base::const_iterator, - typename my_base_data_type::const_iterator, - has_data, - true> - const_iterator; - - typedef - it_< - typename my_base::iterator, - typename my_base_data_type::iterator, - has_data, - false> - iterator; - - enum - { - mapping_level = mapping_level_imp< - typename my_base::given_data_type>::value -1 - }; - - // Tmp Ami rebind - - typedef compound_ds_tag ds_category; - - typedef - typename cond_type< - mapping_level == 1, - typename cond_type< - has_data, - data_enabled_ms_tag, - basic_ms_tag>::type, - compound_data_enabled_ms_tag>::type - ms_category; - - typedef - typename cond_type< - Mapping_Level == 1, - DS_Tag, - compound_ds_tag>::type - effective_base_ds_tag; - - typedef ds_traits< my_base_data_type> base_data_ds_traits; - - enum - { - erase_can_throw = - base_data_ds_traits::erase_can_throw - }; - - enum - { - order_preserving = - order_preserving_imp< - my_base, - effective_base_ds_tag>::value&& - base_data_ds_traits::order_preserving - }; - - enum - { - erase_iterators = - base_data_ds_traits::erase_iterators - }; - - typedef - typename ig_sel< - typename invalidation_guarantee_imp< - my_base, - effective_base_ds_tag>::type, - typename ds_traits< - my_base_data_type>::invalidation_guarantee>::type - invalidation_guarantee; - - enum - { - reverse_iteration = - reverse_iteration_imp< - my_base, - effective_base_ds_tag>::value&& - base_data_ds_traits::reverse_iteration - }; - - enum - { - split_join = false - }; - - protected: - typedef typename my_base_data_type::data_pointer erase_imp_ret_t; - - private: - inline const_key_reference - extract_key_imp(const_reference r_val, int_to_type<true>) - { - return (r_val.first); - } - - inline const_key_reference - extract_key_imp(const_reference r_val, int_to_type<false>) - { - return (r_val); - } - - inline it_key_type - extract_key_imp(typename iterator::const_reference r_val, int_to_type<true>) - { - return (r_val.first); - } - - inline it_key_type - extract_key_imp(typename iterator::const_reference r_val, int_to_type<false>) - { - return (r_val); - } - - public: - - inline size_type - size() const - { - return (std::distance(begin(), end())); - } - - inline size_type - max_size() const - { - return (my_base::max_size()); - } - - inline bool - empty() const - { - return (size() == 0); - } - - inline static const_key_reference - extract_key(const_reference r_val) - { - return (extract_key_imp( - r_val, - int_to_type<has_data>())); - } - - inline it_key_type - extract_key(typename iterator::const_reference r_val) - { - return (extract_key_imp( - r_val, - int_to_type<has_data>())); - } - - inline std::pair< - find_iterator, - bool> - insert(const_reference r_val) - { - typedef std::pair< typename my_base::find_iterator, bool> base_ins_ret; - - // Tmp Ami - } - - inline data_reference - operator[](const_key_reference r_key) - { - return (subscript_imp(r_key)); - } - - inline const_find_iterator - find(const_key_reference r_key) const - { - typename my_base::const_find_iterator it = my_base::find(r_key.first); - - if (it == my_base::end()) - return (end()); - - typename my_base_data_type::const_find_iterator sec_it = - it->second.find(r_key.second); - - if (sec_it == it->second.end()) - return (end()); - - return (const_find_iterator(it, sec_it)); - } - - inline find_iterator - find(const_key_reference r_key) - { - typename my_base::find_iterator it = my_base::find(r_key.first); - - if (it == my_base::end()) - return (end()); - - typename my_base_data_type::find_iterator sec_it = - it->second.find(r_key.second); - - if (sec_it == it->second.end()) - return (end()); - - return (find_iterator(it, my_base::end(), sec_it)); - } - - inline const_data_reference - operator[](const_key_reference r_key) const - { - return (my_base::operator[](r_key.first).operator[](r_key.second)); - } - - inline size_type - erase(const_key_reference r_key) - { - typename my_base::find_iterator it = - my_base::find(r_key.first); - - if (it == my_base::end()) - return (0); - - if (it->second.find(r_key.second) == it->second.end()) - return (0); - - it->second.erase(r_key.second); - - return (1); - } - -#include <ext/pb_assoc/detail/value_type_adapter/erase_if_pred.hpp> - - template<class Pred> - inline size_type - erase_if(Pred prd) - { - typename my_base::iterator it = my_base::begin(); - - typename my_base::iterator end_it = my_base::end(); - - size_type ersd = 0; - - // Tmp Ami check erase can throw - - while (it != end_it) - { - if (it->second.empty() == false) - { - erase_if_pred<Pred> p(prd, it); - - ersd += it->second.erase_if(p); - } - - ++it; - } - - return (ersd); - } - - void - clear() - { - typename my_base::iterator it = my_base::begin(); - - typename my_base::iterator end_it = my_base::end(); - - while (it != end_it) - it->second.clear(); - } - - inline const_iterator - begin() const - { - typename my_base::const_iterator it = my_base::begin(); - - while (it != my_base::end()&& it->second.size() == 0) - ++it; - - if (it == my_base::end()) - return (end()); - - return (const_iterator(it, my_base::end(), it->second.begin())); - } - - inline iterator - begin() - { - typename my_base::iterator it = my_base::begin(); - - while (it != my_base::end()&& it->second.size() == 0) - ++it; - - if (it == my_base::end()) - return (end()); - - return (iterator(it, my_base::end(), it->second.begin())); - } - - inline const_iterator - end() const - { - return (const_iterator(my_base::end(), my_base::end())); - } - - inline iterator - end() - { - return (iterator(my_base::end(), my_base::end())); - } - - protected: - - virtual - ~value_type_adapter() - { } - -#define PB_ASSOC_CLASS_NAME value_type_adapter - -#define PB_ASSOC_DIRECT_BASE_C_DEC PB_ASSOC_BASE_C_DEC - -#define PB_ASSOC_DIRECT_BASE_CAST_C_DEC \ - typename PB_ASSOC_DIRECT_BASE_C_DEC - -#include <ext/pb_assoc/detail/constructors_destructor_fn_imps.hpp> - -#undef PB_ASSOC_CLASS_NAME - -#undef PB_ASSOC_DIRECT_BASE_C_DEC - -#undef PB_ASSOC_DIRECT_BASE_CAST_C_DEC - - data_reference - subscript_imp(const_key_reference r_key) - { - return (my_base::subscript_imp(r_key.first)[r_key.second]); - } - - private: - value_type_adapter& - operator=(const value_type_adapter& r_other); - }; - -#undef PB_ASSOC_CLASS_T_DEC - -#undef PB_ASSOC_CLASS_C_DEC - -#undef PB_ASSOC_BASE_C_DEC - - } // namespace detail - -} // namespace pb_assoc - -#endif // #ifndef VALUE_TYPE_ADAPTER_HPP - |