27 #ifndef MODELS_TERM_DESCRIPTOR_H
28 #define MODELS_TERM_DESCRIPTOR_H
30 #include <boost/tuple/tuple.hpp>
39 return (boost::get<0>(lhs) < boost::get<0>(rhs));
52 typedef std::vector<value_type>
base;
72 if (this->size() == 0)
return true;
73 if (rhs.size() == 0)
return false;
76 return this->size() >= rhs.size();
82 if (this->size() == rhs.size())
85 for (std::size_t p=0; p<this->size() && ret; ++p)
88 }
else if (this->size() == 2 && rhs.size() == 1)
90 else if (this->size() == 1 && rhs.size() == 2)
94 throw std::runtime_error(
"site_match not implemented for this type of operator." );
102 return !( (boost::get<0>(*this->rbegin()) < boost::get<0>(*rhs.begin())) || (boost::get<0>(*rhs.rbegin()) < boost::get<0>(*this->begin())) );
108 std::ostream & operator<< (std::ostream & os, term_descriptor<T>
const& term)
110 os <<
"coeff: " << term.coeff << std::endl;
112 for (
int i=0; i<term.size(); ++i)
113 os <<
" {" << term.position(i) <<
"," << term.operator_tag(i) <<
"}";
bool operator()(value_type const &lhs, value_type const &rhs)
boost::tuple< int, unsigned int > value_type
bool overlap(term_descriptor const &rhs) const
bool site_match(term_descriptor const &rhs) const
tag_type operator_tag(size_type i) const
base::const_iterator const_iterator
pos_type position(size_type i) const
void canonical_order()
utilities
std::vector< value_type > base
bool operator<(term_descriptor const &rhs) const
boost::tuple< pos_type, tag_type > value_type
base::size_type size_type