summaryrefslogtreecommitdiff
path: root/lib/symmetric.c
diff options
context:
space:
mode:
Diffstat (limited to 'lib/symmetric.c')
-rw-r--r--lib/symmetric.c27
1 files changed, 27 insertions, 0 deletions
diff --git a/lib/symmetric.c b/lib/symmetric.c
new file mode 100644
index 0000000..729b38c
--- /dev/null
+++ b/lib/symmetric.c
@@ -0,0 +1,27 @@
+
+#include "symmetric.h"
+
+q_t *symmetric_compose(q_t q, const q_t *g1, const q_t *g2) {
+ q_t *g3 = (q_t *)malloc(q * sizeof(q_t));
+
+ for (q_t i = 0; i < q; i++) {
+ g3[i] = g1[g2[i]];
+ }
+
+ return g3;
+}
+
+q_t symmetric_act(const q_t *g, q_t s) {
+ return g[s];
+}
+
+q_t *symmetric_invert(q_t q, const q_t *g) {
+ q_t *g_inv = (q_t *)malloc(q * sizeof(q_t));
+
+ for (q_t i = 0; i < q; i++) {
+ g_inv[g[i]] = i;
+ }
+
+ return g_inv;
+}
+