aboutsummaryrefslogtreecommitdiff
path: root/src/visualizer/horizontal_cli.c
diff options
context:
space:
mode:
authorhachem <im@hachem.wtf>2026-09-14 12:20:52 +0200
committerhachem <im@hachem.wtf>2026-09-14 12:20:52 +0200
commitee14ad272e68d9363202d7f668e0b20302827209 (patch)
tree88dd1012ad7f9d6ac7abeb7562dac2194794b823 /src/visualizer/horizontal_cli.c
parentae07aab1442a45bbddb79e066f15eaf252a4254a (diff)
feat: simd + testing + formatting
Diffstat (limited to 'src/visualizer/horizontal_cli.c')
-rw-r--r--src/visualizer/horizontal_cli.c74
1 files changed, 41 insertions, 33 deletions
diff --git a/src/visualizer/horizontal_cli.c b/src/visualizer/horizontal_cli.c
index e8d0570..56a2e00 100644
--- a/src/visualizer/horizontal_cli.c
+++ b/src/visualizer/horizontal_cli.c
@@ -8,7 +8,7 @@
#include "visualizer/grid.h"
-static void append_repeat(struct PsiStringBuilder *sb, const char *glyph, size_t n)
+static void append_repeat(struct PsiStringBuilder* sb, const char* glyph, size_t n)
{
for (size_t i = 0; i < n; i++)
psi_string_builder_append(sb, glyph);
@@ -34,14 +34,12 @@ static bool is_single_target(enum PsiGateKind kind)
case PSI_GATE_P:
case PSI_GATE_U1:
case PSI_GATE_U2:
- case PSI_GATE_U3:
- return true;
- default:
- return false;
+ case PSI_GATE_U3: return true;
+ default: return false;
}
}
-static void single_label(struct PsiGateOp op, char *out, size_t cap)
+static void single_label(struct PsiGateOp op, char* out, size_t cap)
{
switch (op.kind)
{
@@ -66,7 +64,7 @@ static void single_label(struct PsiGateOp op, char *out, size_t cap)
}
}
-static void controlled_label(struct PsiGateOp op, char *out, size_t cap)
+static void controlled_label(struct PsiGateOp op, char* out, size_t cap)
{
switch (op.kind)
{
@@ -85,20 +83,18 @@ static bool is_param_controlled(enum PsiGateKind kind)
case PSI_GATE_CRX:
case PSI_GATE_CRY:
case PSI_GATE_CRZ:
- case PSI_GATE_CP:
- return true;
- default:
- return false;
+ case PSI_GATE_CP: return true;
+ default: return false;
}
}
-char *psi_render_circuit_horizontal(const struct PsiQuantumCircuit *circuit)
+char* psi_render_circuit_horizontal(const struct PsiQuantumCircuit* circuit)
{
size_t nq = circuit->num_qubits;
size_t nc = circuit->num_classical;
- struct PsiStringBuilder *q = nq > 0 ? malloc(nq * sizeof(struct PsiStringBuilder)) : NULL;
- struct PsiStringBuilder *c = nc > 0 ? malloc(nc * sizeof(struct PsiStringBuilder)) : NULL;
+ struct PsiStringBuilder* q = nq > 0 ? malloc(nq * sizeof(struct PsiStringBuilder)) : NULL;
+ struct PsiStringBuilder* c = nc > 0 ? malloc(nc * sizeof(struct PsiStringBuilder)) : NULL;
assert(q != NULL || nq == 0);
assert(c != NULL || nc == 0);
@@ -152,7 +148,7 @@ char *psi_render_circuit_horizontal(const struct PsiQuantumCircuit *circuit)
struct PsiGateOp op = circuit->operations[oi];
size_t tc;
- const size_t *targets = psi_gate_op_quantum_targets(&op, &tc);
+ const size_t* targets = psi_gate_op_quantum_targets(&op, &tc);
size_t min_q = targets[0];
size_t max_q = targets[0];
for (size_t k = 1; k < tc; k++)
@@ -216,40 +212,52 @@ char *psi_render_circuit_horizontal(const struct PsiQuantumCircuit *circuit)
append_repeat(&c[i], "═", w + 2);
append_repeat(&gap, " ", w + 2);
}
- else if (op.kind == PSI_GATE_CNOT || op.kind == PSI_GATE_CZ || op.kind == PSI_GATE_SWAP
- || op.kind == PSI_GATE_CCNOT || op.kind == PSI_GATE_CSWAP)
+ else if (op.kind == PSI_GATE_CNOT || op.kind == PSI_GATE_CZ || op.kind == PSI_GATE_SWAP ||
+ op.kind == PSI_GATE_CCNOT || op.kind == PSI_GATE_CSWAP)
{
for (size_t i = 0; i < nq; i++)
{
- const char *seg = "─────";
+ const char* seg = "─────";
switch (op.kind)
{
case PSI_GATE_CNOT:
- if (i == op.qubits[0]) seg = "──●──";
- else if (i == op.qubits[1]) seg = "──⊕──";
- else if (i > min_q && i < max_q) seg = "──│──";
+ if (i == op.qubits[0])
+ seg = "──●──";
+ else if (i == op.qubits[1])
+ seg = "──⊕──";
+ else if (i > min_q && i < max_q)
+ seg = "──│──";
break;
case PSI_GATE_CZ:
- if (i == op.qubits[0] || i == op.qubits[1]) seg = "──●──";
- else if (i > min_q && i < max_q) seg = "──│──";
+ if (i == op.qubits[0] || i == op.qubits[1])
+ seg = "──●──";
+ else if (i > min_q && i < max_q)
+ seg = "──│──";
break;
case PSI_GATE_SWAP:
- if (i == op.qubits[0] || i == op.qubits[1]) seg = "──╳──";
- else if (i > min_q && i < max_q) seg = "──│──";
+ if (i == op.qubits[0] || i == op.qubits[1])
+ seg = "──╳──";
+ else if (i > min_q && i < max_q)
+ seg = "──│──";
break;
case PSI_GATE_CCNOT:
- if (i == op.qubits[0] || i == op.qubits[1]) seg = "──●──";
- else if (i == op.qubits[2]) seg = "──⊕──";
- else if (i > min_q && i < max_q) seg = "──│──";
+ if (i == op.qubits[0] || i == op.qubits[1])
+ seg = "──●──";
+ else if (i == op.qubits[2])
+ seg = "──⊕──";
+ else if (i > min_q && i < max_q)
+ seg = "──│──";
break;
case PSI_GATE_CSWAP:
- if (i == op.qubits[0]) seg = "──●──";
- else if (i == op.qubits[1] || i == op.qubits[2]) seg = "──╳──";
- else if (i > min_q && i < max_q) seg = "──│──";
- break;
- default:
+ if (i == op.qubits[0])
+ seg = "──●──";
+ else if (i == op.qubits[1] || i == op.qubits[2])
+ seg = "──╳──";
+ else if (i > min_q && i < max_q)
+ seg = "──│──";
break;
+ default: break;
}
psi_string_builder_append(&q[i], seg);