From baecb524fb2b8162409d86d84cdddbd20b930c50 Mon Sep 17 00:00:00 2001 From: hachem Date: Sun, 6 Sep 2026 21:06:02 +0200 Subject: add: classical bits and registers --- include/core/classical_components.h | 21 +++++++++++++++++++++ src/core/classical_components.c | 36 ++++++++++++++++++++++++++++++++++++ tester/main.c | 11 +++++++++++ 3 files changed, 68 insertions(+) create mode 100644 include/core/classical_components.h create mode 100644 src/core/classical_components.c 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 +#include + +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 +#include + +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 +#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(®2); + 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; } -- cgit v1.3