GCC Middle and Back End API Reference
ordered_hash_map< KeyId, Value, Traits > Class Template Reference

#include <ordered-hash-map.h>

Inheritance diagram for ordered_hash_map< KeyId, Value, Traits >:
Collaboration diagram for ordered_hash_map< KeyId, Value, Traits >:

Data Structures

class  iterator
 

Public Member Functions

 ordered_hash_map ()
 
 ordered_hash_map (const ordered_hash_map &other)
 
bool put (const Key &k, const Value &v)
 
Value * get (const Key &k)
 
Value & get_or_insert (const Key &k, bool *existed=NULL)
 
void remove (const Key &k)
 
size_t elements () const
 
void empty ()
 
iterator begin () const
 
iterator end () const
 

Private Types

typedef Traits::key_type Key
 

Private Member Functions

void operator= (const ordered_hash_map &)
 

Private Attributes

hash_map< KeyId, Value, Traits > m_map
 
auto_vec< Keym_keys
 
hash_map< KeyId, int > m_key_index
 

Detailed Description

template<typename KeyId, typename Value, typename Traits>
class ordered_hash_map< KeyId, Value, Traits >
A type-safe hash map that retains the insertion order of keys.
   Copyright (C) 2019-2024 Free Software Foundation, Inc.

This file is part of GCC.

GCC is free software; you can redistribute it and/or modify it under
the terms of the GNU General Public License as published by the Free
Software Foundation; either version 3, or (at your option) any later
version.

GCC is distributed in the hope that it will be useful, but WITHOUT ANY
WARRANTY; without even the implied warranty of MERCHANTABILITY or
FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
for more details.

You should have received a copy of the GNU General Public License
along with GCC; see the file COPYING3.  If not see
<http://www.gnu.org/licenses/>.   
Notes:
- The keys must be PODs, since vec<> uses assignment to populate slots
  without properly initializing them.
- doesn't have GTY support.
- supports removal, but retains order of original insertion.
  (Removal might be better handled by using a doubly-linked list
  of nodes, holding the values).   
Two-argument form.   

Member Typedef Documentation

◆ Key

template<typename KeyId , typename Value , typename Traits >
Traits::key_type ordered_hash_map< KeyId, Value, Traits >::Key
private

Constructor & Destructor Documentation

◆ ordered_hash_map() [1/2]

template<typename KeyId , typename Value , typename Traits >
ordered_hash_map< KeyId, Value, Traits >::ordered_hash_map ( )
inline

◆ ordered_hash_map() [2/2]

template<typename KeyId , typename Value , typename Traits >
ordered_hash_map< KeyId, Value, Traits >::ordered_hash_map ( const ordered_hash_map< KeyId, Value, Traits > & other)
inline

Member Function Documentation

◆ begin()

template<typename KeyId , typename Value , typename Traits >
iterator ordered_hash_map< KeyId, Value, Traits >::begin ( ) const
inline

◆ elements()

template<typename KeyId , typename Value , typename Traits >
size_t ordered_hash_map< KeyId, Value, Traits >::elements ( ) const
inline

◆ empty()

template<typename KeyId , typename Value , typename Traits >
void ordered_hash_map< KeyId, Value, Traits >::empty ( )
inline

◆ end()

template<typename KeyId , typename Value , typename Traits >
iterator ordered_hash_map< KeyId, Value, Traits >::end ( ) const
inline

◆ get()

template<typename KeyId , typename Value , typename Traits >
Value * ordered_hash_map< KeyId, Value, Traits >::get ( const Key & k)
inline

◆ get_or_insert()

template<typename KeyId , typename Value , typename Traits >
Value & ordered_hash_map< KeyId, Value, Traits >::get_or_insert ( const Key & k,
bool * existed = NULL )
inline

◆ operator=()

template<typename KeyId , typename Value , typename Traits >
void ordered_hash_map< KeyId, Value, Traits >::operator= ( const ordered_hash_map< KeyId, Value, Traits > & )
private

◆ put()

◆ remove()

template<typename KeyId , typename Value , typename Traits >
void ordered_hash_map< KeyId, Value, Traits >::remove ( const Key & k)
inline

Field Documentation

◆ m_key_index

template<typename KeyId , typename Value , typename Traits >
hash_map<KeyId, int> ordered_hash_map< KeyId, Value, Traits >::m_key_index
private

◆ m_keys

◆ m_map


The documentation for this class was generated from the following file: