1// -*- C++ -*- 2 3// Copyright (C) 2005 Free Software Foundation, Inc. 4// 5// This file is part of the GNU ISO C++ Library. This library is free 6// software; you can redistribute it and/or modify it under the 7// terms of the GNU General Public License as published by the 8// Free Software Foundation; either version 2, or (at your option) 9// any later version. 10 11// This library is distributed in the hope that it will be useful, 12// but WITHOUT ANY WARRANTY; without even the implied warranty of 13// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14// GNU General Public License for more details. 15 16// You should have received a copy of the GNU General Public License along 17// with this library; see the file COPYING. If not, write to the Free 18// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, 19// USA. 20 21// As a special exception, you may use this file as part of a free software 22// library without restriction. Specifically, if other files instantiate 23// templates or use macros or inline functions from this file, or you compile 24// this file and link it with other files to produce an executable, this 25// file does not by itself cause the resulting executable to be covered by 26// the GNU General Public License. This exception does not however 27// invalidate any other reasons why the executable file might be covered by 28// the GNU General Public License. 29 30// Copyright (C) 2004 Ami Tavory and Vladimir Dreizin, IBM-HRL. 31 32// Permission to use, copy, modify, sell, and distribute this software 33// is hereby granted without fee, provided that the above copyright 34// notice appears in all copies, and that both that copyright notice and 35// this permission notice appear in supporting documentation. None of 36// the above authors, nor IBM Haifa Research Laboratories, make any 37// representation about the suitability of this software for any 38// purpose. It is provided "as is" without express or implied warranty. 39 40/** 41 * @file ds_trait.hpp 42 * Contains data-structure traits. 43 */ 44 45#ifndef DS_TRAIT_HPP 46#define DS_TRAIT_HPP 47 48#include <ext/pb_assoc/detail/type_utils.hpp> 49 50namespace pb_assoc 51{ 52 struct basic_invalidation_guarantee 53 { }; 54 55 struct find_invalidation_guarantee : public basic_invalidation_guarantee 56 { }; 57 58 struct range_invalidation_guarantee : public find_invalidation_guarantee 59 { }; 60 61 struct basic_ds_tag 62 { }; 63 64 struct basic_hash_ds_tag : public basic_ds_tag 65 { }; 66 67 struct cc_hash_ds_tag : public basic_hash_ds_tag 68 { }; 69 70 struct gp_hash_ds_tag : public basic_hash_ds_tag 71 { }; 72 73 struct basic_tree_ds_tag : public basic_ds_tag 74 { }; 75 76 struct rb_tree_ds_tag : public basic_tree_ds_tag 77 { }; 78 79 struct splay_tree_ds_tag : public basic_tree_ds_tag 80 { }; 81 82 struct ov_tree_ds_tag : public basic_tree_ds_tag 83 { }; 84 85 struct lu_ds_tag : public basic_ds_tag 86 { }; 87 88 struct compound_ds_tag : public basic_ds_tag 89 { }; 90 91#include <ext/pb_assoc/detail/ds_trait_imp.hpp> 92 93#define PB_ASSOC_BASE_C_DEC \ 94 detail::data_structure_traits<Cntnr, typename Cntnr::ds_category> 95 96 template<typename Cntnr> 97 struct ds_traits 98 : private detail::data_structure_traits<Cntnr, typename Cntnr::ds_category> 99 { 100 public: 101 enum 102 { 103 erase_can_throw = PB_ASSOC_BASE_C_DEC::erase_can_throw, 104 order_preserving = PB_ASSOC_BASE_C_DEC::order_preserving, 105 erase_iterators = PB_ASSOC_BASE_C_DEC::erase_iterators, 106 reverse_iteration = PB_ASSOC_BASE_C_DEC::reverse_iteration, 107 split_join = PB_ASSOC_BASE_C_DEC::split_join 108 }; 109 110 typedef typename PB_ASSOC_BASE_C_DEC::invalidation_guarantee 111 invalidation_guarantee; 112 113 /* 114 enum 115 { 116 split_join_can_throw = PB_ASSOC_BASE_C_DEC::split_join_can_throw 117 }; 118 */ 119 }; 120 121#undef PB_ASSOC_BASE_C_DEC 122 123} // namespace pb_assoc 124 125#endif // #ifndef DS_TRAIT_HPP 126