QkClassicalRegister
typedef struct QkClassicalRegister QkClassicalRegister一度に複数のビットをインスタンス化する一般的な方法は、レジスタを作成することである。 レジスタとは、名前の付いたビットの集まりである。 レジスタを作成することで、ビットの集まりに名前を付けることができ、回路内の特定のビットのメタデータとして使用できる。 この名前は、通常、回路を交換言語にエクスポートする際にも保持される。
例えば、 qk_classical_register_new() を呼び出すことで、レジスタを作成することができる:
#include <qiskit.h>
QkClassicalRegister *creg = qk_classical_register_new(5, "my_creg");これにより、 "my_creg" という新しい5ビットのレジスタが作成される。
そして、レジスタを回路に追加するには、 qk_circuit_add_classical_register() 関数を使う:
QkCircuit *qc = qk_circuit_new(0, 0);
qk_circuit_add_classical_register(qc, creg);
uint32_t num_qubits = qk_circuit_num_qubits(qc); // 5回路はレジスタを追跡するが、レジスタ自体は回路にほとんど動作の違いを与えない。
関数
qk_classical_register_new
QkClassicalRegister *qk_classical_register_new(uint32_t num_clbits, const char *name)
指定されたビット数と名前で新しい古典的レジスタを作成する
例
QkClassicalRegister *cr = qk_classical_register_new(5, "five_qubits");安全
name パラメーターは、文字列の末尾に有効なヌル・ターミネーターを含むメモリーへのポインターでなければならない。 また、ヌル・ターミネーターまでのバイト数のリードに対しても有効でなければならない。
パラメーター
- num_clbits - レジスタを作成するclbitsの数
- name - 作成されるレジスタの名前文字列。 名前は UTF-8 の有効な文字で構成されなければならない。
戻り値
作成されたレジスタへのポインタ
qk_classical_register_free
void qk_classical_register_free(QkClassicalRegister *reg)
クラシックのレジスターが無料。
例
QkClassicalRegister *cr = qk_classical_register_new(1024, "creg");
qk_classical_register_free(cr);安全
reg が NULL または QkClassicalRegister への有効なポインタでない場合、動作は未定義となる。
パラメーター
- reg - 解放するレジスタへのポインタ.
qk_classical_register_name
char *qk_classical_register_name(const QkClassicalRegister *creg)
古典レジスタの名前を取得します。
古典レジスタの名前を含む、新たに割り当てられた C 文字列を返します。
例
QkClassicalRegister *cr = qk_classical_register_new(3, "my_creg");
char *name = qk_classical_register_name(cr);
printf("Register name: %s\n", name);
qk_str_free(name);
qk_classical_register_free(cr);安全
QkClassicalRegisterが、への有効な(null ではない)ポインタでない場合 creg 、その挙動は未定義となる。
パラメーター
- creg – クラシック・レジスタへのポインタ。
戻り値
レジスタ名を含む、新たに割り当てられたヌル終端文字列へのポインタ。 qk_str_free呼び出し元は、この文字列を を使用して解放する必要があります。
qk_classical_register_num_bits
size_t qk_classical_register_num_bits(const QkClassicalRegister *creg)
古典レジスタに含まれる古典ビットの数を取得します。
古典レジスタのサイズ(古典ビット数)を返します。
例
QkClassicalRegister *cr = qk_classical_register_new(3, "my_creg");
size_t num_clbits = qk_classical_register_num_bits(cr);
printf("Number of clbits: %zu\n", num_clbits); // Prints: 3
qk_classical_register_free(cr);安全
QkClassicalRegisterが、への有効な(null ではない)ポインタでない場合 creg 、その挙動は未定義となる。
パラメーター
- creg – クラシック・レジスタへのポインタ。
戻り値
レジスタ内の古典ビットの数。
qk_classical_register_circuit_bits
void qk_classical_register_circuit_bits(const QkClassicalRegister *creg, const QkCircuit *circuit, uint32_t *out_bits)
古典レジスタ内のすべてのclbitについて、回路ビットインデックスを取得します。
古典レジスタ内の各 clbit から、回路の clbit リスト内の対応するインデックスへの対応関係を出力します。 UINT32_MAXレジスタのclbitが回路内に存在しない場合、マッピングにおけるそのインデックスは となります。
例
QkCircuit *qc = qk_circuit_new(0, 2);
QkClassicalRegister *cr = qk_classical_register_new(3, "my_creg");
qk_circuit_add_classical_register(qc, cr);
uint32_t bit_indices[3];
qk_classical_register_circuit_bits(cr, qc, bit_indices);
// bit_indices now contains [2, 3, 4] since all clbits are in the circuit
// and the circuit has 2 anonymous clbits
qk_classical_register_free(cr);
qk_circuit_free(qc);安全
以下の場合、挙動は未定義となります:
QkClassicalRegister``cregは、. への有効で null ではないポインタではありません。QkCircuit``circuitは、. への有効で null ではないポインタではありません。creg1つ以上のビットが設定されており、out_bitsかつ、少なくともqk_classical_register_num_bits(creg)個の要素を持つ配列への、アラインメントが取れており、NULLではないポインタではない。
パラメーター
- creg – マッピング対象のクラシックレジスタへのポインタ。
- circuit – clbits を含む回路へのポインタ。
- out_bits – マップされたインデックスが書き込まれる配列へのポインタ。
creg配列は、少なくともqk_classical_register_num_bits個の要素を持つように、事前に割り当てられていなければなりません。 各要素には、回路のビットインデックス、あるいはUINT32_MAXclbit がその回路に含まれていない場合は が格納されます。