class Edge

#include <TensorNode.h>

class Edge
{
public:
    // construction

    Edge(
        qsize_t qubit_count,
        ComplexTensor& tensor,
        std::vector<std::pair<qsize_t, qsize_t>>& contect_vertice
        );

    // methods

    void earseContectVertice(
        qsize_t qubit,
        size_t num
        );

    qsize_t getQubitCount() const;
    bool mergeEdge(Edge& edge);

    void dimDecrementbyValue(
        qsize_t qubit,
        qsize_t num,
        int value
        );

    void dimDecrement(
        qsize_t qubit,
        qsize_t num
        );

    void dimIncrementByEdge(Edge& edge);

    void getEdgeMap(
        Edge& edge,
        size_t* mask
        );

    void mul(
        Edge& edge,
        size_t* mask_array
        );

    int getRank() const;
    ComplexTensor getComplexTensor() const;
    qcomplex_data_t getElem(VerticeMatrix& vertice);
    void setComplexTensor(ComplexTensor& tensor);
    void getContectVertice(std::vector<std::pair<qsize_t, qsize_t>>& connect_vertice) const;
    void setContectVerticeVector(const qubit_vector_t& contect_vertice);

    void setContectVertice(
        qsize_t qubit,
        qsize_t src_num,
        qsize_t des_num
        );
};