aboutsummaryrefslogtreecommitdiff
path: root/src/visualizer
diff options
context:
space:
mode:
Diffstat (limited to 'src/visualizer')
-rw-r--r--src/visualizer/grid.c24
-rw-r--r--src/visualizer/grid.h18
-rw-r--r--src/visualizer/horizontal_cli.c74
-rw-r--r--src/visualizer/vertical_cli.c31
4 files changed, 75 insertions, 72 deletions
diff --git a/src/visualizer/grid.c b/src/visualizer/grid.c
index 5f95efc..32ade1b 100644
--- a/src/visualizer/grid.c
+++ b/src/visualizer/grid.c
@@ -18,7 +18,7 @@ static size_t glyph_bytes(unsigned char lead)
return 1;
}
-size_t psi_utf8_count(const char *s)
+size_t psi_utf8_count(const char* s)
{
size_t count = 0;
while (*s)
@@ -32,15 +32,14 @@ size_t psi_utf8_count(const char *s)
struct PsiStringBuilder psi_new_string_builder(void)
{
- return (struct PsiStringBuilder)
- {
+ return (struct PsiStringBuilder){
NULL,
0,
0,
};
}
-void psi_string_builder_append(struct PsiStringBuilder *sb, const char *s)
+void psi_string_builder_append(struct PsiStringBuilder* sb, const char* s)
{
size_t n = strlen(s);
if (sb->len + n + 1 > sb->cap)
@@ -58,7 +57,7 @@ void psi_string_builder_append(struct PsiStringBuilder *sb, const char *s)
sb->len += n;
}
-char *psi_string_builder_finish(struct PsiStringBuilder *sb)
+char* psi_string_builder_finish(struct PsiStringBuilder* sb)
{
if (sb->data == NULL)
psi_string_builder_append(sb, "");
@@ -74,21 +73,20 @@ struct PsiGlyphRow psi_new_glyph_row(size_t width)
for (size_t i = 0; i < width; i++)
memcpy(cells[i], " ", 2);
- return (struct PsiGlyphRow)
- {
+ return (struct PsiGlyphRow){
cells,
width,
};
}
-void psi_free_glyph_row(struct PsiGlyphRow *row)
+void psi_free_glyph_row(struct PsiGlyphRow* row)
{
free(row->cells);
row->cells = NULL;
row->width = 0;
}
-void psi_glyph_row_set(struct PsiGlyphRow *row, size_t index, const char *glyph)
+void psi_glyph_row_set(struct PsiGlyphRow* row, size_t index, const char* glyph)
{
if (index >= row->width)
return;
@@ -98,10 +96,10 @@ void psi_glyph_row_set(struct PsiGlyphRow *row, size_t index, const char *glyph)
row->cells[index][n] = '\0';
}
-size_t psi_glyph_row_place(struct PsiGlyphRow *row, size_t start, const char *utf8)
+size_t psi_glyph_row_place(struct PsiGlyphRow* row, size_t start, const char* utf8)
{
size_t count = 0;
- const char *p = utf8;
+ const char* p = utf8;
while (*p)
{
@@ -120,14 +118,14 @@ size_t psi_glyph_row_place(struct PsiGlyphRow *row, size_t start, const char *ut
return count;
}
-void psi_glyph_row_fill_space(struct PsiGlyphRow *row, size_t from, size_t to, const char *glyph)
+void psi_glyph_row_fill_space(struct PsiGlyphRow* row, size_t from, size_t to, const char* glyph)
{
for (size_t i = from; i < to && i < row->width; i++)
if (strcmp(row->cells[i], " ") == 0)
psi_glyph_row_set(row, i, glyph);
}
-void psi_glyph_row_render(struct PsiGlyphRow row, struct PsiStringBuilder *sb)
+void psi_glyph_row_render(struct PsiGlyphRow row, struct PsiStringBuilder* sb)
{
for (size_t i = 0; i < row.width; i++)
psi_string_builder_append(sb, row.cells[i]);
diff --git a/src/visualizer/grid.h b/src/visualizer/grid.h
index f327df8..9353433 100644
--- a/src/visualizer/grid.h
+++ b/src/visualizer/grid.h
@@ -4,14 +4,14 @@
struct PsiStringBuilder
{
- char *data;
+ char* data;
size_t len;
size_t cap;
};
struct PsiStringBuilder psi_new_string_builder(void);
-void psi_string_builder_append(struct PsiStringBuilder *sb, const char *s);
-char *psi_string_builder_finish(struct PsiStringBuilder *sb);
+void psi_string_builder_append(struct PsiStringBuilder* sb, const char* s);
+char* psi_string_builder_finish(struct PsiStringBuilder* sb);
struct PsiGlyphRow
{
@@ -20,10 +20,10 @@ struct PsiGlyphRow
};
struct PsiGlyphRow psi_new_glyph_row(size_t width);
-void psi_free_glyph_row(struct PsiGlyphRow *row);
-void psi_glyph_row_set(struct PsiGlyphRow *row, size_t index, const char *glyph);
-size_t psi_glyph_row_place(struct PsiGlyphRow *row, size_t start, const char *utf8);
-void psi_glyph_row_fill_space(struct PsiGlyphRow *row, size_t from, size_t to, const char *glyph);
-void psi_glyph_row_render(struct PsiGlyphRow row, struct PsiStringBuilder *sb);
+void psi_free_glyph_row(struct PsiGlyphRow* row);
+void psi_glyph_row_set(struct PsiGlyphRow* row, size_t index, const char* glyph);
+size_t psi_glyph_row_place(struct PsiGlyphRow* row, size_t start, const char* utf8);
+void psi_glyph_row_fill_space(struct PsiGlyphRow* row, size_t from, size_t to, const char* glyph);
+void psi_glyph_row_render(struct PsiGlyphRow row, struct PsiStringBuilder* sb);
-size_t psi_utf8_count(const char *s);
+size_t psi_utf8_count(const char* s);
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);
diff --git a/src/visualizer/vertical_cli.c b/src/visualizer/vertical_cli.c
index 09d4456..4f21e49 100644
--- a/src/visualizer/vertical_cli.c
+++ b/src/visualizer/vertical_cli.c
@@ -5,7 +5,7 @@
#include "visualizer/grid.h"
-static void gate_label(struct PsiGateOp op, char *out, size_t cap)
+static void gate_label(struct PsiGateOp op, char* out, size_t cap)
{
switch (op.kind)
{
@@ -40,7 +40,7 @@ static void gate_label(struct PsiGateOp op, char *out, size_t cap)
}
}
-static size_t calculate_col_width(const struct PsiQuantumCircuit *circuit)
+static size_t calculate_col_width(const struct PsiQuantumCircuit* circuit)
{
size_t max_label = 3;
@@ -80,10 +80,8 @@ 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;
}
}
@@ -94,14 +92,12 @@ 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_vertical(const struct PsiQuantumCircuit *circuit)
+char* psi_render_circuit_vertical(const struct PsiQuantumCircuit* circuit)
{
struct PsiStringBuilder sb = psi_new_string_builder();
@@ -154,7 +150,7 @@ char *psi_render_circuit_vertical(const struct PsiQuantumCircuit *circuit)
struct PsiGateOp op = circuit->operations[op_index];
size_t target_count;
- const size_t *targets = psi_gate_op_quantum_targets(&op, &target_count);
+ const size_t* targets = psi_gate_op_quantum_targets(&op, &target_count);
size_t min_q = targets[0];
size_t max_q = targets[0];
for (size_t i = 1; i < target_count; i++)
@@ -212,8 +208,8 @@ char *psi_render_circuit_vertical(const struct PsiQuantumCircuit *circuit)
else if (op.kind == PSI_GATE_CCNOT || op.kind == PSI_GATE_CSWAP)
{
bool is_cswap = op.kind == PSI_GATE_CSWAP;
- const char *sym_c = "●";
- const char *sym_t = is_cswap ? "╳" : "⊕";
+ const char* sym_c = "●";
+ const char* sym_t = is_cswap ? "╳" : "⊕";
size_t c1 = op.qubits[0];
size_t c2 = op.qubits[1];
size_t t = op.qubits[2];
@@ -267,7 +263,8 @@ char *psi_render_circuit_vertical(const struct PsiQuantumCircuit *circuit)
psi_glyph_row_set(&row, center, "□");
}
- psi_glyph_row_fill_space(&row, min_q * stride + half + 1, max_q * stride + half, "─");
+ psi_glyph_row_fill_space(&row, min_q * stride + half + 1, max_q * stride + half,
+ "─");
}
for (size_t i = 0; i < nc; i++)
@@ -275,8 +272,8 @@ char *psi_render_circuit_vertical(const struct PsiQuantumCircuit *circuit)
}
else
{
- const char *sym1 = "●";
- const char *sym2 = "⊕";
+ const char* sym1 = "●";
+ const char* sym2 = "⊕";
if (op.kind == PSI_GATE_CZ)
sym2 = "●";
else if (op.kind == PSI_GATE_SWAP)