///////////////////////////////////////////////////////////////////////////////
//                                                                           //
//  Copyright (C) 1995-2002 by the Board of Trustees of Leland Stanford      //
//  Junior University.  See LICENSE for details.                             //
//                                                                           //
///////////////////////////////////////////////////////////////////////////////

#ifdef explicitly_instantiate_templates

#include <misc.h>
#include <chunklist.h>
#include <linklist.h>
#include <arraylist.h>
#include <queue.h>
#include <hash.h>
#include <dictionary.h>
#include <symbol.h>
#include <sortedlist.h>
#include <heap.h>
#include <ac.h>
#include <ineq.h>
#include <bitvec.h>
#include <range.h>
#include <store.h>
#include <splitter.h>
#include <pred.h>
#include <scoped_hash.h>

/**************************************************************************/
/*    libuseful                                                           */
/**************************************************************************/

template class Array_List<void (*)(void)>;


/**************************************************************************/
/*    libvc                                                               */
/**************************************************************************/

template class Hash_Entry<PExpr, PExpr>;
template class Hash_Entry<int, PExpr>;
template class Hash_Entry<int, int>;
template class Hash_Entry<Symbol, f_type>;
template class Hash_Entry<Symbol, int>;
template class Hash_Entry<Symbol, PCExpr_Type>;
template class Hash_Entry<PCExpr_Type, PCExpr_Type>;
template class Hash_Table<PExpr, PExpr>;
template class Hash_Table<int, PExpr>;
template class Hash_Table<int, int>;
template class Hash_Table<Symbol, f_type>;
template class Hash_Table<Symbol, int>;
template class Hash_Table<Symbol, PCExpr_Type>;
template class Hash_Table<PCExpr_Type, PCExpr_Type>;
template class Hash_Ptr<PExpr, PExpr>;
template class Hash_Ptr<int, int>;
template class Hash_Ptr<int, PExpr>;
template class Hash_Ptr<Symbol, f_type>;
template class Hash_Ptr<Symbol, int>;
template class Hash_Ptr<Symbol, PCExpr_Type>;
template class Hash_Ptr<PCExpr_Type, PCExpr_Type>;
template class Link<PExpr>;
template class Link_List<PExpr>;
template class Link_Ptr<PExpr>;
template class Array_List<PExpr>;
template class Array_List<PFunc_Expr>;
template class Chunk<PExpr>;
template class Chunk_List<PExpr>;
template class Chunk<Symbol>;
template class Chunk_List<Symbol>;
template class Hash_Entry<Symbol, PSplitter_Policy>;
template class Hash_Table<Symbol, PSplitter_Policy>;
template class Hash_Ptr<Symbol, PSplitter_Policy>;
template int max(int, int);
template int min(int, int);
template unsigned max(unsigned, unsigned);
template unsigned min(unsigned, unsigned);
template class Heap<Heap_Entry>;
template class Sorted_List<PExpr>;
template class Queue_Link<PExpr>;
template class Queue<PExpr>;
template class Scoped_Hash_Table<Symbol, PCExpr_Type>;
template class Hash_Entry<PCExpr_Type, PExpr (*)(int)>;
template class Hash_Table<PCExpr_Type, PExpr (*)(int)>;
template class Hash_Ptr<PCExpr_Type, PExpr (*)(int)>;
template class Hash_Entry<PCExpr_Type, PExpr (*)(unsigned,int)>;
template class Hash_Table<PCExpr_Type, PExpr (*)(unsigned,int)>;
template class Hash_Ptr<PCExpr_Type, PExpr (*)(unsigned,int)>;
IF_DEBUG(
  template class Array_List<Heap_Entry>;
)


/**************************************************************************/
/*    cmdtool                                                             */
/**************************************************************************/

template class Hash_Entry<Symbol, PExpr>;
template class Hash_Table<Symbol, PExpr>;
template class Hash_Ptr<Symbol, PExpr>;


/**************************************************************************/
/*    libstore                                                            */
/**************************************************************************/

template class Array_List<Write_Expr::Update_Type>;


/**************************************************************************/
/*    libbitvec                                                           */
/**************************************************************************/

template class Chunk<char>;
template class Chunk_List<char>;
template class Array_List<int>;
template class Array_List<PPred_Expr>;
template class Hash_Entry<PExpr, PBit_Part>;
template class Hash_Table<PExpr, PBit_Part>;
template class Hash_Ptr<PExpr, PBit_Part>;
template class Hash_Entry<PExpr, mpint>;
template class Hash_Table<PExpr, mpint>;
template class Hash_Ptr<PExpr, mpint>;

template void HashUpdateIntData(Hash_Table<PExpr, mpint>&, PExpr, mpint);

/**************************************************************************/
/*    libadd                                                              */
/**************************************************************************/

template class Hash_Entry<PExpr, rat>;
template class Hash_Table<PExpr, rat>;
template class Hash_Ptr<PExpr, rat>;
template class Dict<PExpr, rat>;
template class Dict_Entry<PExpr, rat>;
template class Dict_Ptr<PExpr, rat>;


/**************************************************************************/
/*    lineq                                                               */
/**************************************************************************/

template class Hash_Entry<PExpr, PII>;
template class Hash_Table<PExpr, PII>;
template class Hash_Ptr<PExpr, PII>;
template rat max(rat, rat);
template rat min(rat, rat);


/**************************************************************************/
/*    v2p                                                                 */
/**************************************************************************/

template class Hash_Entry<PExpr, int>;
template class Hash_Table<PExpr, int>;
template class Hash_Ptr<PExpr, int>;


#endif
