1// -*- C++ -*- 2 3// Copyright (C) 2005, 2006, 2009 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 terms 7// of the GNU General Public License as published by the Free Software 8// Foundation; either version 3, or (at your option) any later 9// version. 10 11// This library is distributed in the hope that it will be useful, but 12// WITHOUT ANY WARRANTY; without even the implied warranty of 13// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 14// General Public License for more details. 15 16// Under Section 7 of GPL version 3, you are granted additional 17// permissions described in the GCC Runtime Library Exception, version 18// 3.1, as published by the Free Software Foundation. 19 20// You should have received a copy of the GNU General Public License and 21// a copy of the GCC Runtime Library Exception along with this program; 22// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see 23// <http://www.gnu.org/licenses/>. 24 25// Copyright (C) 2004 Ami Tavory and Vladimir Dreizin, IBM-HRL. 26 27// Permission to use, copy, modify, sell, and distribute this software 28// is hereby granted without fee, provided that the above copyright 29// notice appears in all copies, and that both that copyright notice 30// and this permission notice appear in supporting documentation. None 31// of the above authors, nor IBM Haifa Research Laboratories, make any 32// representation about the suitability of this software for any 33// purpose. It is provided "as is" without express or implied 34// warranty. 35 36/** 37 * @file head.hpp 38 * Contains a leaf for a patricia tree. 39 */ 40 41#ifndef PB_DS_PAT_TRIE_IHEAD_HPP 42#define PB_DS_PAT_TRIE_IHEAD_HPP 43 44#include <ext/pb_ds/detail/pat_trie_/node_base.hpp> 45#include <debug/debug.h> 46 47namespace __gnu_pbds 48{ 49 namespace detail 50 { 51#define PB_DS_CLASS_T_DEC \ 52 template<typename Type_Traits, typename E_Access_Traits, \ 53 typename Metadata, typename Allocator> 54 55#define PB_DS_CLASS_C_DEC \ 56 pat_trie_head<Type_Traits, E_Access_Traits, Metadata, Allocator> 57 58#define PB_DS_BASE_C_DEC \ 59 pat_trie_node_base<Type_Traits, E_Access_Traits, Metadata, Allocator> 60 61 template<typename Type_Traits, 62 typename E_Access_Traits, 63 typename Metadata, 64 typename Allocator> 65 struct pat_trie_head : public PB_DS_BASE_C_DEC 66 { 67 private: 68 typedef E_Access_Traits e_access_traits; 69 70 typedef 71 typename Allocator::template rebind< 72 e_access_traits>::other::const_pointer 73 const_e_access_traits_pointer; 74 75 typedef 76 typename Allocator::template rebind< 77 PB_DS_BASE_C_DEC>::other::pointer 78 node_pointer; 79 80#ifdef _GLIBCXX_DEBUG 81 typedef 82 typename PB_DS_BASE_C_DEC::subtree_debug_info 83 subtree_debug_info; 84#endif 85 86 public: 87 pat_trie_head(); 88 89#ifdef _GLIBCXX_DEBUG 90 virtual subtree_debug_info 91 assert_valid_imp(const_e_access_traits_pointer p_traits) const; 92#endif 93 94 public: 95 node_pointer m_p_min; 96 97 node_pointer m_p_max; 98 }; 99 100 PB_DS_CLASS_T_DEC 101 PB_DS_CLASS_C_DEC:: 102 pat_trie_head() : PB_DS_BASE_C_DEC(pat_trie_head_node_type) 103 { } 104 105#ifdef _GLIBCXX_DEBUG 106 PB_DS_CLASS_T_DEC 107 typename PB_DS_CLASS_C_DEC::subtree_debug_info 108 PB_DS_CLASS_C_DEC:: 109 assert_valid_imp(const_e_access_traits_pointer /*p_traits*/) const 110 { 111 _GLIBCXX_DEBUG_ASSERT(false); 112 return subtree_debug_info(); 113 } 114#endif 115 116#undef PB_DS_CLASS_T_DEC 117#undef PB_DS_CLASS_C_DEC 118#undef PB_DS_BASE_C_DEC 119 120 } // namespace detail 121} // namespace __gnu_pbds 122 123#endif 124 125