12#include "../../composer/composer/Network/SimpleFullyConnectedNetwork.h"
30 const std::vector<Types::qubit_t> qubits{
32 const std::vector<size_t> cbits{
static_cast<size_t>(nrQubits)};
35 auto network = std::make_shared<Network::SimpleNetwork<>>(qubits, cbits);
38 std::make_shared<Network::SimpleDisconnectedNetwork<>>(qubits, cbits);
42 std::lock_guard<std::mutex> lock(simpleSimulatorsMutex);
44 if (curHandle == std::numeric_limits<unsigned long int>::max()) {
48 const unsigned long int handle = ++curHandle;
50 simpleSimulators[handle] = network;
56 std::lock_guard<std::mutex> lock(simpleSimulatorsMutex);
58 simpleSimulators.erase(simHandle);
61 std::shared_ptr<Network::INetwork<>>
63 std::lock_guard<std::mutex> lock(simpleSimulatorsMutex);
64 auto it = simpleSimulators.find(simHandle);
65 if (it != simpleSimulators.end())
78 sim->RemoveAllOptimizationSimulatorsAndAdd(simType, simExecType);
89 sim->AddOptimizationSimulator(simType, simExecType);
100 std::lock_guard<std::mutex> lock(simulatorsMutex);
101 if (curSimulatorHandle == std::numeric_limits<unsigned long int>::max()) {
103 curSimulatorHandle = 0;
105 const unsigned long int handle = ++curSimulatorHandle;
107 simulators[handle] = simulator;
113 std::lock_guard<std::mutex> lock(simulatorsMutex);
114 auto it = simulators.find(simHandle);
115 if (it != simulators.end())
116 return it->second.get();
122 std::lock_guard<std::mutex> lock(simulatorsMutex);
123 simulators.erase(simHandle);
128 std::mutex simpleSimulatorsMutex;
129 std::mutex simulatorsMutex;
131 std::unordered_map<unsigned long int, std::shared_ptr<Network::INetwork<>>>
133 std::unordered_map<unsigned long int, std::shared_ptr<Simulators::ISimulator>>
136 unsigned long int curHandle = 0;
137 unsigned long int curSimulatorHandle = 0;
int RemoveAllOptimizationSimulatorsAndAdd(unsigned long int simHandle, Simulators::SimulatorType simType, Simulators::SimulationType simExecType)
unsigned long int CreateSimulator(Simulators::SimulatorType simType=Simulators::SimulatorType::kQCSim, Simulators::SimulationType simExecType=Simulators::SimulationType::kMatrixProductState)
void DestroySimulator(unsigned long int simHandle)
int AddOptimizationSimulator(unsigned long int simHandle, Simulators::SimulatorType simType, Simulators::SimulationType simExecType)
void DestroySimpleSimulator(unsigned long int simHandle)
std::shared_ptr< Network::INetwork<> > GetSimpleSimulator(unsigned long int simHandle)
unsigned long int CreateSimpleSimulator(int nrQubits)
void * GetSimulator(unsigned long int simHandle)
static std::shared_ptr< ISimulator > CreateSimulator(SimulatorType t=SimulatorType::kQCSim, SimulationType method=SimulationType::kMatrixProductState)
Create a quantum computing simulator.
SimulationType
The type of simulation.
@ kMatrixProductState
matrix product state simulation type
SimulatorType
The type of simulator.
@ kQCSim
qcsim simulator type
uint_fast64_t qubit_t
The type of a qubit.