diff options
| author | hachem <im@hachem.wtf> | 2026-09-14 12:20:52 +0200 |
|---|---|---|
| committer | hachem <im@hachem.wtf> | 2026-09-14 12:20:52 +0200 |
| commit | ee14ad272e68d9363202d7f668e0b20302827209 (patch) | |
| tree | 88dd1012ad7f9d6ac7abeb7562dac2194794b823 /src/visualizer/horizontal_cli.c | |
| parent | ae07aab1442a45bbddb79e066f15eaf252a4254a (diff) | |
feat: simd + testing + formatting
Diffstat (limited to 'src/visualizer/horizontal_cli.c')
| -rw-r--r-- | src/visualizer/horizontal_cli.c | 74 |
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); |
