/*******************************************************************\

Module: STL Hash map / set

Author: Daniel Kroening, kroening@cs.cmu.edu

\*******************************************************************/

#ifndef CPROVER_HASH_CONT_H
#define CPROVER_HASH_CONT_H

// you need to pick one of the following three options

// #define NO_HASH_CONT
// #define STD_HASH_CONT
#define GNU_HASH_CONT

#ifdef NO_HASH_CONT

#include <map>
#include <set>

template<class T1, class T2, class T3>
typedef std::map<T1, T2> hash_map_cont;

template<class T1, class T2>
typedef std::set<T1> hash_set_cont;

template<class T1, class T2>
typedef std::multiset<T1> hash_multiset_cont;

#else
#include <ext/hash_map>
#include <ext/hash_set>

#ifdef STD_HASH_CONT

// for old g++ libraries

#define hash_map_cont std::hash_map
#define hash_set_cont std::hash_set
#define hash_multiset_cont std::hash_multiset

#else

#ifdef GNU_HASH_CONT

// for new g++ libraries >= 3.2

#define hash_map_cont __gnu_cxx::hash_map
#define hash_set_cont __gnu_cxx::hash_set
#define hash_multiset_cont __gnu_cxx::hash_multiset

#else

#error Please select hash container option

#endif

#endif
#endif

#endif
