(root)/
gcc-13.2.0/
gcc/
tree-hasher.h
       1  /* Hash Table Helper for Trees
       2     Copyright (C) 2012-2023 Free Software Foundation, Inc.
       3     Contributed by Lawrence Crowl <crowl@google.com>
       4  
       5  This file is part of GCC.
       6  
       7  GCC is free software; you can redistribute it and/or modify
       8  it under the terms of the GNU General Public License as published by
       9  the Free Software Foundation; either version 3, or (at your option)
      10  any later version.
      11  
      12  GCC is distributed in the hope that it will be useful,
      13  but WITHOUT ANY WARRANTY; without even the implied warranty of
      14  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
      15  GNU General Public License for more details.
      16  
      17  You should have received a copy of the GNU General Public License
      18  along with GCC; see the file COPYING3.  If not see
      19  <http://www.gnu.org/licenses/>.  */
      20  
      21  #ifndef GCC_TREE_HASHER_H
      22  #define GCC_TREE_HASHER_H 1
      23  
      24  struct int_tree_map {
      25    unsigned int uid;
      26    tree to;
      27  };
      28  
      29  /* Hashtable helpers.  */
      30  
      31  struct int_tree_hasher
      32  {
      33    typedef int_tree_map value_type;
      34    typedef int_tree_map compare_type;
      35    static inline hashval_t hash (const value_type &);
      36    static inline bool equal (const value_type &, const compare_type &);
      37    static bool is_deleted (const value_type &v)
      38      {
      39        return v.to == reinterpret_cast<tree> (1);
      40      }
      41    static void mark_deleted (value_type &v) { v.to = reinterpret_cast<tree> (0x1); }
      42    static bool is_empty (const value_type &v) { return v.to == NULL; }
      43    static const bool empty_zero_p = true;
      44    static void mark_empty (value_type &v) { v.to = NULL; }
      45    static void remove (value_type &) {}
      46  };
      47  
      48  /* Hash a UID in a int_tree_map.  */
      49  
      50  inline hashval_t
      51  int_tree_hasher::hash (const value_type &item)
      52  {
      53    return item.uid;
      54  }
      55  
      56  /* Return true if the uid in both int tree maps are equal.  */
      57  
      58  inline bool
      59  int_tree_hasher::equal (const value_type &a, const compare_type &b)
      60  {
      61    return (a.uid == b.uid);
      62  }
      63  
      64  typedef hash_table <int_tree_hasher> int_tree_htab_type;
      65  
      66  #endif /* GCC_TREE_HASHER_H  */