ALPS MPS Codes
Reference documentation.
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
Public Types | Public Member Functions | List of all members
MultiIndex< SymmGroup > Class Template Reference

#include <multi_index.h>

Public Types

typedef std::size_t size_t
 
typedef std::size_t index_id
 
typedef Index< SymmGroup > index_t
 
typedef index_t::charge charge
 
typedef std::size_t elem_id
 
typedef std::pair< charge,
elem_id
coord_t
 
typedef std::size_t set_id
 
typedef std::vector< coord_tkey_t
 
typedef index_product_iterator
< SymmGroup > 
const_iterator
 

Public Member Functions

 MultiIndex ()
 
index_id insert_index (index_t const &idx)
 
index_t const & index (index_id i) const
 
size_t size () const
 
set_id create_set (std::vector< std::pair< index_id, bool > > const &vec_left, std::vector< std::pair< index_id, bool > > const &vec_right)
 
void remove_set (set_id s)
 
void clear_sets ()
 
void clear ()
 
size_t left_size (set_id s, charge const &c) const
 
size_t right_size (set_id s, charge const &c) const
 
coord_t const & get_left_coord (set_id s, key_t const &key) const
 
coord_t const & get_right_coord (set_id s, key_t const &key) const
 
std::pair< coord_t, coord_tget_coords (set_id s, key_t const &key) const
 
key_t const & get_left_key (set_id s, coord_t const &ci) const
 
key_t const & get_right_key (set_id s, coord_t const &ci) const
 
std::pair< coord_t, coord_tconvert_coords (set_id set1, coord_t const &coord1_left, coord_t const &coord1_right, set_id set2) const
 
std::pair< coord_t, coord_tconvert_coords (set_id set1, std::pair< coord_t, coord_t > const &coords1, set_id set2) const
 
const_iterator begin () const
 
const_iterator end () const
 

Detailed Description

template<class SymmGroup>
class MultiIndex< SymmGroup >

Definition at line 140 of file multi_index.h.

Member Typedef Documentation

template<class SymmGroup>
typedef index_t::charge MultiIndex< SymmGroup >::charge

Definition at line 145 of file multi_index.h.

template<class SymmGroup>
typedef index_product_iterator<SymmGroup> MultiIndex< SymmGroup >::const_iterator

Definition at line 153 of file multi_index.h.

template<class SymmGroup>
typedef std::pair<charge, elem_id> MultiIndex< SymmGroup >::coord_t

Definition at line 148 of file multi_index.h.

template<class SymmGroup>
typedef std::size_t MultiIndex< SymmGroup >::elem_id

Definition at line 146 of file multi_index.h.

template<class SymmGroup>
typedef std::size_t MultiIndex< SymmGroup >::index_id

Definition at line 143 of file multi_index.h.

template<class SymmGroup>
typedef Index<SymmGroup> MultiIndex< SymmGroup >::index_t

Definition at line 144 of file multi_index.h.

template<class SymmGroup>
typedef std::vector<coord_t> MultiIndex< SymmGroup >::key_t

Definition at line 151 of file multi_index.h.

template<class SymmGroup>
typedef std::size_t MultiIndex< SymmGroup >::set_id

Definition at line 150 of file multi_index.h.

template<class SymmGroup>
typedef std::size_t MultiIndex< SymmGroup >::size_t

Definition at line 142 of file multi_index.h.

Constructor & Destructor Documentation

template<class SymmGroup>
MultiIndex< SymmGroup >::MultiIndex ( )
inline

Definition at line 155 of file multi_index.h.

155 { }

Member Function Documentation

template<class SymmGroup>
const_iterator MultiIndex< SymmGroup >::begin ( ) const
inline

Definition at line 276 of file multi_index.h.

277  { return const_iterator(idx_); }
index_product_iterator< SymmGroup > const_iterator
Definition: multi_index.h:153
template<class SymmGroup>
void MultiIndex< SymmGroup >::clear ( )
inline

Definition at line 194 of file multi_index.h.

195  {
196  clear_sets();
197  idx_.clear();
198  }
void clear_sets()
Definition: multi_index.h:182
template<class SymmGroup>
void MultiIndex< SymmGroup >::clear_sets ( )
inline

Definition at line 182 of file multi_index.h.

183  {
184  left_keys.clear();
185  left_vals.clear();
186  left_sizes.clear();
187  set_left.clear();
188  right_keys.clear();
189  right_vals.clear();
190  right_sizes.clear();
191  set_right.clear();
192  }
template<class SymmGroup>
std::pair<coord_t, coord_t> MultiIndex< SymmGroup >::convert_coords ( set_id  set1,
coord_t const &  coord1_left,
coord_t const &  coord1_right,
set_id  set2 
) const
inline

Definition at line 245 of file multi_index.h.

249  {
250  key_t key1_left = get_left_key(set1, coord1_left);
251 // maquis::cout << "got left key" << std::endl;
252  key_t key1_right = get_right_key(set1, coord1_right);
253 // maquis::cout << "got right key" << std::endl;
254 
255  assert( key1_left.size() == set_left[set1].size() );
256  assert( key1_right.size() == set_right[set1].size() );
257 
258  key_t key(idx_.size());
259  for (int i=0; i<set_left[set1].size(); ++i) {
260 // maquis::cout << "key index = " << set_left[set1][i].first << std::endl;
261  key[ set_left[set1][i].first ] = key1_left[i];
262  }
263 // maquis::cout << "left key --> key" << std::endl;
264  for (int i=0; i<set_right[set1].size(); ++i)
265  key[ set_right[set1][i].first ] = key1_right[i];
266 // maquis::cout << "right key --> key" << std::endl;
267 
268  return get_coords(set2, key);
269 
270  }
key_t const & get_right_key(set_id s, coord_t const &ci) const
Definition: multi_index.h:239
std::pair< coord_t, coord_t > get_coords(set_id s, key_t const &key) const
Definition: multi_index.h:223
std::vector< coord_t > key_t
Definition: multi_index.h:151
key_t const & get_left_key(set_id s, coord_t const &ci) const
Definition: multi_index.h:235
template<class SymmGroup>
std::pair<coord_t, coord_t> MultiIndex< SymmGroup >::convert_coords ( set_id  set1,
std::pair< coord_t, coord_t > const &  coords1,
set_id  set2 
) const
inline

Definition at line 271 of file multi_index.h.

273  { return convert_coords(set1, coords1.first, coords1.second, set2); }
std::pair< coord_t, coord_t > convert_coords(set_id set1, coord_t const &coord1_left, coord_t const &coord1_right, set_id set2) const
Definition: multi_index.h:245
template<class SymmGroup >
MultiIndex< SymmGroup >::set_id MultiIndex< SymmGroup >::create_set ( std::vector< std::pair< index_id, bool > > const &  vec_left,
std::vector< std::pair< index_id, bool > > const &  vec_right 
)

Definition at line 314 of file multi_index.h.

316 {
317  {
318  std::vector<index_t> b;
319  for(int i=0; i<vec_left.size(); ++i)
320  b.push_back( idx_[vec_left[i].first] );
321 
322  std::map<charge, size_t> block_begins;
323  std::vector<key_t> keys_;
324  std::vector<coord_t> vals_;
325 
326  for (const_iterator it = const_iterator(b);
327  it != const_iterator();
328  it++)
329  {
330  charge c = SymmGroup::IdentityCharge;
331  for (int i=0; i<b.size(); ++i)
332  c = (vec_left[i].second) ? SymmGroup::fuse(c, (*it)[i].first) : SymmGroup::fuse(c, -(*it)[i].first);
333  keys_.push_back(*it);
334  vals_.push_back(std::make_pair(c, block_begins[c]));
335  block_begins[c]++;
336  }
337 
338  left_keys.push_back(keys_);
339  left_vals.push_back(vals_);
340  left_sizes.push_back(block_begins);
341  }
342 
343  {
344  std::vector<index_t> b;
345  for(int i=0; i<vec_right.size(); ++i)
346  b.push_back( idx_[vec_right[i].first] );
347 
348  std::map<charge, size_t> block_begins;
349  std::vector<key_t> keys_;
350  std::vector<coord_t> vals_;
351 
352  for (const_iterator it = const_iterator(b);
353  it != const_iterator();
354  it++)
355  {
356  charge c = SymmGroup::IdentityCharge;
357  for (int i=0; i<b.size(); ++i)
358  c = (vec_right[i].second) ? SymmGroup::fuse(c, (*it)[i].first) : SymmGroup::fuse(c, -(*it)[i].first);
359  keys_.push_back(*it);
360  vals_.push_back(std::make_pair(c, block_begins[c]));
361  block_begins[c]++;
362  }
363 
364  right_keys.push_back(keys_);
365  right_vals.push_back(vals_);
366  right_sizes.push_back(block_begins);
367  }
368 
369  set_left.push_back(vec_left);
370  set_right.push_back(vec_right);
371  return left_keys.size() - 1;
372 }
index_product_iterator< SymmGroup > const_iterator
Definition: multi_index.h:153
index_t::charge charge
Definition: multi_index.h:145
T fuse(const A &ind, T d)
Fuse indices n[i] into one p = n[i] d^i.
template<class SymmGroup>
const_iterator MultiIndex< SymmGroup >::end ( ) const
inline

Definition at line 279 of file multi_index.h.

280  { return const_iterator(); }
index_product_iterator< SymmGroup > const_iterator
Definition: multi_index.h:153
template<class SymmGroup>
std::pair<coord_t, coord_t> MultiIndex< SymmGroup >::get_coords ( set_id  s,
key_t const &  key 
) const
inline

Definition at line 223 of file multi_index.h.

224  {
225  key_t left_k, right_k;
226  for (int i=0; i<set_left[s].size(); ++i)
227  left_k.push_back(key[ set_left[s][i].first ]);
228  for (int i=0; i<set_right[s].size(); ++i)
229  right_k.push_back(key[ set_right[s][i].first ]);
230 
231  return std::make_pair( get_left_coord(s, left_k), get_right_coord(s, right_k) );
232  }
coord_t const & get_right_coord(set_id s, key_t const &key) const
Definition: multi_index.h:219
std::vector< coord_t > key_t
Definition: multi_index.h:151
coord_t const & get_left_coord(set_id s, key_t const &key) const
Definition: multi_index.h:215
template<class SymmGroup>
coord_t const& MultiIndex< SymmGroup >::get_left_coord ( set_id  s,
key_t const &  key 
) const
inline

Definition at line 215 of file multi_index.h.

216  {
217  return key_to_val(key, left_keys[s], left_vals[s]);
218  }
template<class SymmGroup>
key_t const& MultiIndex< SymmGroup >::get_left_key ( set_id  s,
coord_t const &  ci 
) const
inline

Definition at line 235 of file multi_index.h.

236  {
237  return val_to_key(ci, left_keys[s], left_vals[s]);
238  }
template<class SymmGroup>
coord_t const& MultiIndex< SymmGroup >::get_right_coord ( set_id  s,
key_t const &  key 
) const
inline

Definition at line 219 of file multi_index.h.

220  {
221  return key_to_val(key, right_keys[s], right_vals[s]);
222  }
template<class SymmGroup>
key_t const& MultiIndex< SymmGroup >::get_right_key ( set_id  s,
coord_t const &  ci 
) const
inline

Definition at line 239 of file multi_index.h.

240  {
241  return val_to_key(ci, right_keys[s], right_vals[s]);
242  }
template<class SymmGroup>
index_t const& MultiIndex< SymmGroup >::index ( index_id  i) const
inline

Definition at line 163 of file multi_index.h.

164  { return idx_[i]; }
template<class SymmGroup>
index_id MultiIndex< SymmGroup >::insert_index ( index_t const &  idx)
inline

Definition at line 157 of file multi_index.h.

158  {
159  idx_.push_back(idx);
160  return idx_.size()-1;
161  }
template<class SymmGroup>
size_t MultiIndex< SymmGroup >::left_size ( set_id  s,
charge const &  c 
) const
inline

Definition at line 201 of file multi_index.h.

202  {
203  assert( left_sizes[s].count(c) > 0 );
204  return left_sizes[s].find(c)->second;
205  }
template<class SymmGroup>
void MultiIndex< SymmGroup >::remove_set ( set_id  s)
inline

Definition at line 172 of file multi_index.h.

173  {
174  left_keys.erase(left_keys.begin() + s);
175  left_vals.erase(left_vals.begin() + s);
176  set_left.erase(set_left.begin() + s);
177  right_keys.erase(right_keys.begin() + s);
178  right_vals.erase(right_vals.begin() + s);
179  set_right.erase(set_right.begin() + s);
180  }
template<class SymmGroup>
size_t MultiIndex< SymmGroup >::right_size ( set_id  s,
charge const &  c 
) const
inline

Definition at line 206 of file multi_index.h.

207  {
208  assert( right_sizes[s].count(c) > 0 );
209  return right_sizes[s].find(c)->second;
210  }
template<class SymmGroup>
size_t MultiIndex< SymmGroup >::size ( ) const
inline

Definition at line 166 of file multi_index.h.

167  { return idx_.size(); }

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