11debfc3dSmrg /* Hash Table Helper for Trees 2*8feb0f0bSmrg Copyright (C) 2012-2020 Free Software Foundation, Inc. 31debfc3dSmrg Contributed by Lawrence Crowl <crowl@google.com> 41debfc3dSmrg 51debfc3dSmrg This file is part of GCC. 61debfc3dSmrg 71debfc3dSmrg GCC is free software; you can redistribute it and/or modify 81debfc3dSmrg it under the terms of the GNU General Public License as published by 91debfc3dSmrg the Free Software Foundation; either version 3, or (at your option) 101debfc3dSmrg any later version. 111debfc3dSmrg 121debfc3dSmrg GCC is distributed in the hope that it will be useful, 131debfc3dSmrg but WITHOUT ANY WARRANTY; without even the implied warranty of 141debfc3dSmrg MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 151debfc3dSmrg GNU General Public License for more details. 161debfc3dSmrg 171debfc3dSmrg You should have received a copy of the GNU General Public License 181debfc3dSmrg along with GCC; see the file COPYING3. If not see 191debfc3dSmrg <http://www.gnu.org/licenses/>. */ 201debfc3dSmrg 211debfc3dSmrg #ifndef GCC_TREE_HASHER_H 221debfc3dSmrg #define GCC_TREE_HASHER_H 1 231debfc3dSmrg 241debfc3dSmrg struct int_tree_map { 251debfc3dSmrg unsigned int uid; 261debfc3dSmrg tree to; 271debfc3dSmrg }; 281debfc3dSmrg 291debfc3dSmrg /* Hashtable helpers. */ 301debfc3dSmrg 311debfc3dSmrg struct int_tree_hasher 321debfc3dSmrg { 331debfc3dSmrg typedef int_tree_map value_type; 341debfc3dSmrg typedef int_tree_map compare_type; 351debfc3dSmrg static inline hashval_t hash (const value_type &); 361debfc3dSmrg static inline bool equal (const value_type &, const compare_type &); is_deletedint_tree_hasher371debfc3dSmrg static bool is_deleted (const value_type &v) 381debfc3dSmrg { 391debfc3dSmrg return v.to == reinterpret_cast<tree> (1); 401debfc3dSmrg } mark_deletedint_tree_hasher411debfc3dSmrg static void mark_deleted (value_type &v) { v.to = reinterpret_cast<tree> (0x1); } is_emptyint_tree_hasher421debfc3dSmrg static bool is_empty (const value_type &v) { return v.to == NULL; } 43*8feb0f0bSmrg static const bool empty_zero_p = true; mark_emptyint_tree_hasher441debfc3dSmrg static void mark_empty (value_type &v) { v.to = NULL; } removeint_tree_hasher451debfc3dSmrg static void remove (value_type &) {} 461debfc3dSmrg }; 471debfc3dSmrg 481debfc3dSmrg /* Hash a UID in a int_tree_map. */ 491debfc3dSmrg 501debfc3dSmrg inline hashval_t hash(const value_type & item)511debfc3dSmrgint_tree_hasher::hash (const value_type &item) 521debfc3dSmrg { 531debfc3dSmrg return item.uid; 541debfc3dSmrg } 551debfc3dSmrg 561debfc3dSmrg /* Return true if the uid in both int tree maps are equal. */ 571debfc3dSmrg 581debfc3dSmrg inline bool equal(const value_type & a,const compare_type & b)591debfc3dSmrgint_tree_hasher::equal (const value_type &a, const compare_type &b) 601debfc3dSmrg { 611debfc3dSmrg return (a.uid == b.uid); 621debfc3dSmrg } 631debfc3dSmrg 641debfc3dSmrg typedef hash_table <int_tree_hasher> int_tree_htab_type; 651debfc3dSmrg 661debfc3dSmrg #endif /* GCC_TREE_HASHER_H */ 67