From 870555f569bc63fecdc7c0b16e72e4e002f21c13 Mon Sep 17 00:00:00 2001 From: Jaron Kent-Dobias Date: Thu, 26 Jul 2018 13:06:54 -0400 Subject: all the R_t have been objectified --- lib/symmetric.h | 98 +++++++++++++++++++-------------------------------------- 1 file changed, 32 insertions(+), 66 deletions(-) (limited to 'lib/symmetric.h') diff --git a/lib/symmetric.h b/lib/symmetric.h index 41c8fb6..9e9b6e4 100644 --- a/lib/symmetric.h +++ b/lib/symmetric.h @@ -2,84 +2,50 @@ #pragma once #include +#include #include "types.h" #include "potts.h" template -class symmetric_t { +class symmetric_t : public std::array { public: - q_t *perm; -}; - -template -void init(symmetric_t *p) { - p->perm = (q_t *)malloc(q * sizeof(q_t)); - - for (q_t i = 0; i < q; i++) { - p->perm[i] = i; - } -} - -template -void free_spin(symmetric_t p) { - free(p.perm); -} -template -symmetric_t copy(symmetric_t x) { - symmetric_t x2; - x2.perm = (q_t *)malloc(q * sizeof(q_t)); - - for (q_t i = 0; i < q; i++) { - x2.perm[i] = x.perm[i]; - } - - return x2; -} - -template -potts_t act(symmetric_t r, potts_t s) { - potts_t s2; - s2.x = r.perm[s.x]; - return s2; -} - -template -symmetric_t act(symmetric_t r1, symmetric_t r2) { - symmetric_t r3; - r3.perm = (q_t *)malloc(q * sizeof(q_t)); - for (q_t i = 0; i < q; i++) { - r3.perm[i] = r1.perm[r2.perm[i]]; - } - - return r3; -} + symmetric_t() { + for (q_t i = 0; i < q; i++) { + (*this)[i] = i; + } + } -template -potts_t act_inverse(symmetric_t r, potts_t s) { - potts_t s2; + potts_t act(const potts_t &s) const { + return potts_t((*this)[s.x]); + } - q_t i; + symmetric_t act(const symmetric_t& r) const { + symmetric_t r_rot; + for (q_t i = 0; i < q; i++) { + r_rot[i] = (*this)[r[i]]; + } - for (i = 0; i < q; i++) { - if (r.perm[i] == s.x) { - break; + return r_rot; } - } - s2.x = i; + potts_t act_inverse(const potts_t& s) const { + for (q_t i = 0; i < q; i++) { + if ((*this)[i] == s.x) { + return potts_t(i); + } + } - return s2; -} + exit(EXIT_FAILURE); + } -template -symmetric_t act_inverse(symmetric_t r1, symmetric_t r2) { - symmetric_t r3; - r3.perm = (q_t *)malloc(q * sizeof(q_t)); - for (q_t i = 0; i < q; i++) { - r3.perm[r1.perm[i]] = r2.perm[i]; - } + symmetric_t act_inverse(const symmetric_t& r) const { + symmetric_t r_rot; + for (q_t i = 0; i < q; i++) { + r_rot[(*this)[i]] = r[i]; + } - return r3; -} + return r_rot; + } +}; -- cgit v1.2.3-70-g09d2