12#include "../../composer/composer/Network/SimpleFullyConnectedNetwork.h"
14#include "../Network/SimpleDisconnectedNetwork.h"
17#include "../Simulators/Factory.h"
27 if (nrQubits <= 0)
return 0;
29 const std::vector<Types::qubit_t> qubits{
30 static_cast<Types::qubit_t
>(nrQubits)};
31 const std::vector<size_t> cbits{
static_cast<size_t>(nrQubits)};
34 auto network = std::make_shared<Network::SimpleNetwork<>>(qubits, cbits);
37 std::make_shared<Network::SimpleDisconnectedNetwork<>>(qubits, cbits);
41 std::lock_guard<std::mutex> lock(simpleSimulatorsMutex);
43 if (curHandle == std::numeric_limits<unsigned long int>::max()) {
47 const unsigned long int handle = ++curHandle;
49 simpleSimulators[handle] = network;
55 std::lock_guard<std::mutex> lock(simpleSimulatorsMutex);
57 simpleSimulators.erase(simHandle);
61 unsigned long int simHandle) {
62 std::lock_guard<std::mutex> lock(simpleSimulatorsMutex);
63 auto it = simpleSimulators.find(simHandle);
64 if (it != simpleSimulators.end())
return it->second;
75 sim->RemoveAllOptimizationSimulatorsAndAdd(simType, simExecType);
85 sim->AddOptimizationSimulator(simType, simExecType);
96 std::lock_guard<std::mutex> lock(simulatorsMutex);
97 if (curSimulatorHandle == std::numeric_limits<unsigned long int>::max()) {
99 curSimulatorHandle = 0;
101 const unsigned long int handle = ++curSimulatorHandle;
103 simulators[handle] = simulator;
109 std::lock_guard<std::mutex> lock(simulatorsMutex);
110 auto it = simulators.find(simHandle);
111 if (it != simulators.end())
return it->second.get();
117 std::lock_guard<std::mutex> lock(simulatorsMutex);
118 simulators.erase(simHandle);
123 std::mutex simpleSimulatorsMutex;
124 std::mutex simulatorsMutex;
126 std::unordered_map<unsigned long int, std::shared_ptr<Network::INetwork<>>>
128 std::unordered_map<unsigned long int, std::shared_ptr<Simulators::ISimulator>>
131 unsigned long int curHandle = 0;
132 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