aboutsummaryrefslogtreecommitdiff
path: root/src/core/classical_components.c
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 /src/core/classical_components.c
parent081fc18575be18ddedf603638793152d5ddc83b6 (diff)
add: classical bits and registers
Diffstat (limited to 'src/core/classical_components.c')
-rw-r--r--src/core/classical_components.c36
1 files changed, 36 insertions, 0 deletions
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;
+}