#ifndef WOLFF_MODELS_DIHEDRAL_INF_H #define WOLFF_MODELS_DIHEDRAL_INF_H #include #include "height.hpp" namespace wolff { #include "../types.h" template class dihedral_inf_t { public: bool is_reflection; T x; dihedral_inf_t() : is_reflection(false), x(0) {} dihedral_inf_t(bool x, T y) : is_reflection(x), x(y) {} height_t act(const height_t& h) const { if (this->is_reflection) { return height_t(this->x - h.x); } else { return height_t(this->x + h.x); } } dihedral_inf_t act(const dihedral_inf_t& r) const { if (this->is_reflection) { return dihedral_inf_t(!r.is_reflection, this->x - r.x); } else { return dihedral_inf_t(r.is_reflection, this->x + r.x); } } height_t act_inverse(const height_t& h) const { if (this->is_reflection) { return this->act(h); } else { return height_t(h.x - this->x); } } dihedral_inf_t act_inverse(const dihedral_inf_t& r) const { if (this->is_reflection) { return this->act(r); } else { return dihedral_inf_t(r.is_reflection, r.x - this->x); } } }; } #endif