aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorhachem <im@hachem.wtf>2026-09-06 21:06:02 +0200
committerhachem <im@hachem.wtf>2026-09-06 21:06:02 +0200
commitbaecb524fb2b8162409d86d84cdddbd20b930c50 (patch)
tree88cbc334f2ce2c3b975d97c5ca584ad5beab0b29
parent081fc18575be18ddedf603638793152d5ddc83b6 (diff)
add: classical bits and registers
-rw-r--r--include/core/classical_components.h21
-rw-r--r--src/core/classical_components.c36
-rw-r--r--tester/main.c11
3 files changed, 68 insertions, 0 deletions
diff --git a/include/core/classical_components.h b/include/core/classical_components.h
new file mode 100644
index 0000000..48714b4
--- /dev/null
+++ b/include/core/classical_components.h
@@ -0,0 +1,21 @@
+#pragma once
+
+#include <stdbool.h>
+#include <stddef.h>
+
+struct PsiClassicalBit
+{
+ const char *name;
+ bool state;
+};
+
+struct PsiClassicalRegister
+{
+ const char *name;
+ struct PsiClassicalBit *bits;
+ size_t num_bits;
+};
+
+struct PsiClassicalBit psi_new_classical_bit(const char *name, bool state);
+struct PsiClassicalRegister psi_new_classical_register(const char *name, const char **names, size_t count);
+void psi_free_classical_register(struct PsiClassicalRegister *reg);
diff --git a/src/core/classical_components.c b/src/core/classical_components.c
new file mode 100644
index 0000000..836784c
--- /dev/null
+++ b/src/core/classical_components.c
@@ -0,0 +1,36 @@
+#include "core/classical_components.h"
+
+#include <assert.h>
+#include <stdlib.h>
+
+struct PsiClassicalBit psi_new_classical_bit(const char *name, bool state)
+{
+ return (struct PsiClassicalBit)
+ {
+ name,
+ state,
+ };
+}
+
+struct PsiClassicalRegister psi_new_classical_register(const char *name, const char **names, size_t count)
+{
+ struct PsiClassicalBit *bits = malloc(count * sizeof(struct PsiClassicalBit));
+ assert(bits != NULL || count == 0);
+
+ for (size_t i = 0; i < count; i++)
+ bits[i] = psi_new_classical_bit(names[i], false);
+
+ return (struct PsiClassicalRegister)
+ {
+ name,
+ bits,
+ count,
+ };
+}
+
+void psi_free_classical_register(struct PsiClassicalRegister *reg)
+{
+ free(reg->bits);
+ reg->bits = NULL;
+ reg->num_bits = 0;
+}
diff --git a/tester/main.c b/tester/main.c
index e401288..13c9257 100644
--- a/tester/main.c
+++ b/tester/main.c
@@ -1,5 +1,6 @@
#include <stdio.h>
+#include "core/classical_components.h"
#include "core/custom_gate.h"
#include "core/gates.h"
#include "core/quantum_components.h"
@@ -117,5 +118,15 @@ int main(void)
psi_free_quantum_gate(&bell_gate);
psi_free_quantum_register(&reg2);
+ const char *cnames[] = { "c0", "c1" };
+ struct PsiClassicalRegister creg = psi_new_classical_register("c", cnames, 2);
+ creg.bits[1].state = true;
+
+ printf("creg = %s=%d %s=%d\n",
+ creg.bits[0].name, creg.bits[0].state,
+ creg.bits[1].name, creg.bits[1].state);
+
+ psi_free_classical_register(&creg);
+
return 0;
}