diff options
| -rw-r--r-- | include/core/classical_components.h | 21 | ||||
| -rw-r--r-- | src/core/classical_components.c | 36 | ||||
| -rw-r--r-- | tester/main.c | 11 |
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(®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; } |
