Quantum-Chess 0.5
Chargement...
Recherche...
Aucune correspondance
Qubit.hpp
Aller à la documentation de ce fichier.
1#ifndef QUBIT_HPP
2#define QUBIT_HPP
3
4#include <cstddef>
5#include <complex>
6#include <array>
7#include <CMatrix.hpp>
8#include <Constexpr.hpp>
9
15template <std::size_t N>
16class Qubit final
17{
18public:
19 // Constructeur
20 CONSTEXPR Qubit() = default;
21
28 CONSTEXPR Qubit(std::array<bool, N> const &data);
29 CONSTEXPR Qubit(std::array<std::complex<double>, _2POW(N)> &&init_list);
30
31 // Copie
32 CONSTEXPR Qubit(Qubit const &) = delete;
33 CONSTEXPR Qubit &operator=(Qubit const &) = delete;
34
35 // Mouvement
36 CONSTEXPR Qubit(Qubit &&) = delete;
38
39 // Destructeur
40 CONSTEXPR ~Qubit() = default;
41
42 template <std::size_t M>
44 CMatrix<_2POW(M)> const &lhs,
45 Qubit<M> const &rhs);
46
47 template <std::size_t M>
48 friend std::ostream &operator<<(
49 std::ostream &out,
50 Qubit<M> const &qubit);
51
52 template <std::size_t M>
53 friend CONSTEXPR std::array<
54 std::pair<
55 std::array<bool, M>,
56 std::complex<double>>,
57 2>
58 qubitToArray(Qubit<M> const &qubit);
59
60private:
61 std::array<std::complex<double>, _2POW(N)> m_data;
62};
63
78template <std::size_t N>
79CONSTEXPR std::array<std::pair<std::array<bool, N>, std::complex<double>>, 2>
80qubitToArray(Qubit<N> const &qubit);
81
90template <std::size_t N>
92 CMatrix<_2POW(N)> const &lhs,
93 Qubit<N> const &rhs);
94
104template <std::size_t N>
105std::ostream &operator<<(std::ostream &out, Qubit<N> const &qubit);
106
107#include "Qubit.tpp"
108
109#endif
Matrix< std::complex< double >, N > CMatrix
Objet représentant les matrices carrées complexe de dimension N.
Definition CMatrix.hpp:15
#define _2POW(n)
Réalise l'opération 2^n.
Definition CMatrix.hpp:38
#define CONSTEXPR
Utilisé pour utiliser ou non constexpr.
Definition Constexpr.hpp:7
CONSTEXPR std::array< std::pair< std::array< bool, N >, std::complex< double > >, 2 > qubitToArray(Qubit< N > const &qubit)
Transforme un qubit dans sa représentation sous forme de vecteur en sa représentation classique....
std::ostream & operator<<(std::ostream &out, Qubit< N > const &qubit)
Fonction d'affichage des qubit sous forme de liste de nombre complexe.
CONSTEXPR Qubit< N > operator*(CMatrix< _2POW(N)> const &lhs, Qubit< N > const &rhs)
Opérateur du produit entre un qubit et une matrice.
Représente un qubit.
Definition Qubit.hpp:17
CONSTEXPR Qubit()=default
friend std::ostream & operator<<(std::ostream &out, Qubit< M > const &qubit)
CONSTEXPR Qubit(Qubit const &)=delete
friend CONSTEXPR std::array< std::pair< std::array< bool, M >, std::complex< double > >, 2 > qubitToArray(Qubit< M > const &qubit)
CONSTEXPR Qubit & operator=(Qubit const &)=delete
CONSTEXPR Qubit(std::array< bool, N > const &data)
Construit un nouveau qubit à l'aide d'un tableau de booléen.
CONSTEXPR Qubit(Qubit &&)=delete
CONSTEXPR ~Qubit()=default
CONSTEXPR Qubit & operator=(Qubit &&)=delete
CONSTEXPR Qubit(std::array< std::complex< double >, _2POW(N)> &&init_list)
friend CONSTEXPR Qubit< M > operator*(CMatrix< _2POW(M)> const &lhs, Qubit< M > const &rhs)
std::array< std::complex< double >, _2POW(N)> m_data
Definition Qubit.hpp:61