xref: /netbsd-src/external/gpl3/gcc.old/dist/gcc/tree-hasher.h (revision 8feb0f0b7eaff0608f8350bbfa3098827b4bb91b)
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)511debfc3dSmrg int_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)591debfc3dSmrg int_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