Maestro 0.3.11
Unified interface for quantum circuit simulation
Loading...
Searching...
No Matches
FactoryQuest.cpp
Go to the documentation of this file.
1
10
11#define _CRT_SECURE_NO_WARNINGS 1
12
13#include "FactoryBackends.h"
14
15#define INCLUDED_BY_FACTORY
17
18namespace Simulators
19{
20
21std::shared_ptr<QuestLibSim> SimulatorsFactory::questLibrary = nullptr;
22std::atomic_bool SimulatorsFactory::firstTimeQuest = true;
23
25{
26 if (!questLibrary)
27 {
28 questLibrary = std::make_shared<QuestLibSim>();
29 if (!firstTimeQuest.exchange(false))
30 questLibrary->SetMute(true);
31 if (questLibrary->Init(
32#ifdef _WIN32
33 "maestroquest.dll"
34#elif defined(__APPLE__)
35 "libmaestroquest.dylib"
36#else
37 "libmaestroquest.so"
38#endif
39 ))
40 return true;
41 else
42 questLibrary = nullptr;
43 }
44 return false;
45}
46
48{
49 return questLibrary && questLibrary->IsValid();
50}
51
52std::shared_ptr<QuestLibSim> SimulatorsFactory::GetQuestLibrary()
53{
54 if (!questLibrary || !questLibrary->IsValid())
55 return nullptr;
56 return questLibrary;
57}
58
60{
61 if (!questLibrary)
62 {
63 questLibrary = std::make_shared<QuestLibSim>();
64 firstTimeQuest = false;
65 questLibrary->SetMute(true);
66 if (questLibrary->Init(
67#ifdef _WIN32
68 "maestroquest.dll"
69#elif defined(__APPLE__)
70 "libmaestroquest.dylib"
71#else
72 "libmaestroquest.so"
73#endif
74 ))
75 return true;
76 else
77 questLibrary = nullptr;
78 }
79 return false;
80}
81
82namespace FactoryBackends
83{
84
85std::unique_ptr<ISimulator> CreateQuestSimulator()
86{
87 return std::make_unique<Private::QuestSimulator>();
88}
89
90} // namespace FactoryBackends
91} // namespace Simulators
static MAESTRO_FACTORY_EXPORT std::shared_ptr< QuestLibSim > GetQuestLibrary()
static MAESTRO_FACTORY_EXPORT bool InitQuestLibrary()
static MAESTRO_FACTORY_EXPORT bool InitQuestLibraryWithMute()
static MAESTRO_FACTORY_EXPORT bool IsQuestLibraryAvailable()
std::unique_ptr< ISimulator > CreateQuestSimulator()
Bounded online routing based on current physical bond dimensions.