41#ifndef EPETRAEXT_DIRECTORY_H 
   42#define EPETRAEXT_DIRECTORY_H 
   44#if defined(EpetraExt_SHOW_DEPRECATED_WARNINGS) 
   46#warning "The EpetraExt package is deprecated" 
   57#include <Teuchos_RCP.hpp> 
   59#include <EpetraExt_Functors.h> 
   66template <
typename KT, 
typename DT, 
class DH, 
class AC, 
class MG>
 
   72  typedef typename std::map< KT, Teuchos::RCP<DT> > 
DataMap;
 
   76  typedef typename std::multimap< KT, Teuchos::RCP<DT> > 
DataRecvMap;
 
  110  bool operator==( 
const Directory & ) 
const;
 
  111  bool operator!=( 
const Directory & ) 
const;
 
 
  148  int operator()( 
const T & in ) { assert(0); 
return 0; }
 
 
  159  : size_( static_cast<double>(size) )
 
 
  164    int slen = in.length();
 
  166    for( 
int i = 0; i < slen; ++i )
 
  167      sum += 
static_cast<int>( in[i] );
 
  169    return static_cast<int>( fmod( 
static_cast<float>( sum ), size_ ) );
 
 
 
  176template < 
typename T, 
typename U >
 
  179  typedef typename std::multimap< typename T::value_type, typename U::value_type> UTMultiMap;
 
  183  typename T::iterator iterT = firstContainer.begin();
 
  184  typename T::iterator endT = firstContainer.end();
 
  185  typename U::iterator iterU = secondContainer.begin();
 
  186  typename U::iterator endU = secondContainer.end();
 
  188  for( ; (iterT!=endT)||(iterU!=endU) ; ++iterT, ++iterU )
 
  189    SortMap.insert( 
typename UTMultiMap::value_type( *iterT, *iterU ) );
 
  191  firstContainer.clear();
 
  192  secondContainer.clear();
 
  194  typename UTMultiMap::iterator iterUTM = SortMap.begin();
 
  195  typename UTMultiMap::iterator endUTM = SortMap.end();
 
  197  for( ; iterUTM != endUTM; ++iterUTM )
 
  199    firstContainer.push_back( iterUTM->first );
 
  200    secondContainer.push_back( iterUTM->second );
 
 
  207template < 
typename T >
 
  210  if( container.size() < 2 ) 
return true;
 
  212  typename T::iterator iterT = container.begin();
 
  213  typename T::iterator endT = container.end();
 
  214  typename T::iterator iterTPlus = iterT;
 
  217  for( ; iterTPlus != endT; ++iterT, ++iterTPlus )
 
  218    if( !(*iterT<*iterTPlus) ) 
return false;
 
 
  223template <
typename KT, 
typename DT, 
class DH, 
class AC, 
class MG>
 
  232  pushData_( entries, newEntries, procs );
 
  244  for( ; citDM != cendDM; ++citDM )
 
  245      container_.insert( *citDM );
 
 
  248template <
typename KT, 
typename DT, 
class DH, 
class AC, 
class MG>
 
  257  pushKeys_( keys, newKeys, procs );
 
  269  for( ; citKL != cendKL; ++citKL )
 
  270    container_.erase( *citKL );
 
 
  273template <
typename KT, 
typename DT, 
class DH, 
class AC, 
class MG>
 
  284  pushKeys_( keys, newKeys, procs );
 
  291  for( ; citKL != cendKL; ++citKL )
 
  293    if( !container_.count( *citKL ) )
 
  294      throw "Data not in directory: " + *citKL + 
"\n";
 
  296    newEntries[*citKL] = (container_.lower_bound( *citKL ))->second;
 
  299  migrate_.rvs( procs, newKeys, newEntries, entries );
 
  305  for( ; citKL != cendKL; ++citKL )
 
  307    if( !container_.count( *citKL ) )
 
  308      throw "Data not in directory: " + *citKL + 
"\n";
 
  310    entries[*citKL] = (container_.lower_bound( *citKL ))->second;
 
 
  318template <
typename KT, 
typename DT, 
class DH, 
class AC, 
class MG>
 
  329  for( ; itKL != endKL; ++itKL )
 
  330    procs.push_back( distHash_(*itKL) );
 
  334  migrate_( procs, sKeys, rKeys );
 
 
  337template <
typename KT, 
typename DT, 
class DH, 
class AC, 
class MG>
 
  348  for( ; itDM != endDM; ++itDM )
 
  349    procs.push_back( distHash_(itDM->first) );
 
  351  migrate_( procs, sData, rData );
 
 
Distributed Directory Tool.
 
void addEntries(DataMap const &entries)
 
KeyList::const_iterator KeyListCIter
 
std::pair< int, KT > ProcKeyPair
 
void pushKeys_(KeyList &, KeyList &, ProcList &)
 
std::multimap< KT, Teuchos::RCP< DT > > DataRecvMap
 
AC::const_iterator ContainerCIter
 
DataMap::const_iterator DataMapCIter
 
void pushData_(DataMap const &, DataRecvMap &, ProcList &)
 
ProcKeyList::iterator ProcKeyListIter
 
ProcList::iterator ProcListIter
 
std::vector< KT > KeyList
 
DataRecvMap::const_iterator DataRecvMapCIter
 
void deleteEntries(KeyList &keys)
 
std::vector< ProcKeyPair > ProcKeyList
 
Directory(MG migrate, DH distHash)
 
std::map< KT, Teuchos::RCP< DT > > DataMap
 
DataRecvMap::iterator DataRecvMapIter
 
std::vector< int > ProcList
 
KeyList::iterator KeyListIter
 
void getEntries(KeyList &keys, DataMap &entries)
 
DataMap::iterator DataMapIter
 
AC::iterator ContainerIter
 
int operator()(const std::string &in)
 
EpetraExt::BlockCrsMatrix: A class for constructing a distributed block matrix.
 
bool IsSorted(T &container)
Checks if data in a container is sorted.
 
void SortContainer2(T &firstContainer, U &secondContainer)
Sorts a given container: deal with a problem with some STL impl.