Program Listing for File qubit_table.hpp

Return to documentation for file (/home/docs/checkouts/readthedocs.org/user_builds/qulacs-rtd-ja/checkouts/latest/src/cppsim/qubit_table.hpp)

#pragma once

#include <unordered_set>

#include "type.hpp"

class QuantumCircuit;
class QuantumGateBase;

class QubitTable {
private:
    UINT _qubit_count;
    std::vector<UINT> _p2l_table;
    std::vector<UINT> _l2p_table;
    QubitTable& operator=(const QubitTable&) = delete;

public:
    const std::vector<UINT>&
        p2l;
    const std::vector<UINT>&
        l2p;
    explicit QubitTable(UINT qubit_count);

    QubitTable(const QubitTable& qt);

    friend std::ostream& operator<<(std::ostream& os, const QubitTable& qt) {
        os << "qc:" << qt._qubit_count;
        os << ", p2l:[";
        for (UINT i : qt._p2l_table) {
            os << i << ",";
        }
        os << "], l2p[";
        for (UINT i : qt._l2p_table) {
            os << i << ",";
        }
        os << "]";
        return os;
    }

    void rewrite_gate_qubit_indexes(QuantumGateBase* g) const;

    UINT add_swap_gate(
        QuantumCircuit* circuit, UINT idx0, UINT idx1, UINT width);

    UINT add_swap_gate(QuantumCircuit* circuit, UINT idx0, UINT idx1,
        UINT width, UINT gate_pos);
};