18#ifndef VOTCA_CSG_PAIRLIST_H
19#define VOTCA_CSG_PAIRLIST_H
31template <
typename element_type,
typename pair_type>
40 using iterator =
typename std::vector<pair_type *>::iterator;
42 typedef typename std::map<element_type, pair_type *>
partners;
57 pair_type *
FindPair(element_type e1, element_type e2);
59 const pair_type *
FindPair(element_type e1, element_type e2)
const;
69 std::map<element_type, std::map<element_type, pair_type *>>
pair_map_;
73template <
typename element_type,
typename pair_type>
77 pair_map_[p->first()][p->second()] = p;
78 pair_map_[p->second()][p->first()] = p;
83template <
typename element_type,
typename pair_type>
85 for (
auto &pair : pairs_) {
92template <
typename element_type,
typename pair_type>
95 typename std::map<element_type, std::map<element_type, pair_type *>>::iterator
97 iter1 = pair_map_.find(e1);
98 if (iter1 == pair_map_.end()) {
102 typename partners::iterator iter2;
103 iter2 = iter1->second.find(e2);
104 if (iter2 == iter1->second.end()) {
108 return iter2->second;
111template <
typename element_type,
typename pair_type>
113 element_type e1, element_type e2)
const {
114 typename std::map<element_type,
115 std::map<element_type, pair_type *>>::const_iterator iter1;
116 iter1 = pair_map_.find(e1);
117 if (iter1 == pair_map_.end()) {
121 typename partners::const_iterator iter2;
122 iter2 = iter1->second.find(e2);
123 if (iter2 == iter1->second.end()) {
127 return iter2->second;
130template <
typename element_type,
typename pair_type>
133 typename std::map<element_type, std::map<element_type, pair_type *>>::iterator
135 if ((iter = pair_map_.find(e1)) == pair_map_.end()) {
138 return &(iter->second);
std::map< element_type, std::map< element_type, pair_type * > > pair_map_
std::vector< pair_type * > pairs_
typename std::vector< pair_type * >::const_iterator const_iterator
void AddPair(pair_type *p)
typename std::vector< pair_type * >::iterator iterator
const pair_type * FindPair(element_type e1, element_type e2) const
pair_type * FindPair(element_type e1, element_type e2)
const_iterator begin() const
const_iterator end() const
partners * FindPartners(element_type e1)
std::map< element_type, pair_type * > partners
base class for all analysis tools