17#include "ns3/q2ns-types.h"
21#include <unordered_map>
22#include <unordered_set>
139 std::shared_ptr<QState>
MergeStates(
const std::vector<std::shared_ptr<Qubit>>& qs);
165 std::shared_ptr<QState>
GetState(
const std::shared_ptr<Qubit>& q)
const;
178 void Register(
const std::shared_ptr<Qubit>& q);
187 void Unregister(
const std::shared_ptr<Qubit>& q);
270 std::vector<std::shared_ptr<Qubit>>
GetLocalQubits(uint32_t nodeId)
const;
301 std::unordered_map<StateId, std::shared_ptr<QState>>
states_;
302 std::unordered_map<StateId, std::vector<std::shared_ptr<Qubit>>>
305 std::unordered_map<uint32_t, std::unordered_set<QubitId>>
307 std::unordered_map<QubitId, std::shared_ptr<Qubit>>
qubitById_;
Internal registry that owns backend states and tracks qubit membership and location.
QStateBackend GetDefaultBackend() const
Get the default backend used for newly created states.
void Unregister(const std::shared_ptr< Qubit > &q)
Unregister a qubit handle from its current state membership list.
void RemoveState(StateId id)
Remove a backend state and its membership tracking.
std::unordered_map< QubitId, std::shared_ptr< Qubit > > qubitById_
Qubit id to shared handle.
std::unordered_map< StateId, std::vector< std::shared_ptr< Qubit > > > members_
State id to shared member qubit handles.
StreamAssigner streamAssigner_
Callback used when a new state is registered.
QStateBackend defaultBackend_
Default backend for CreateState().
void Register(const std::shared_ptr< Qubit > &q)
Register a qubit handle as a member of its current state.
void SetLocation(const std::shared_ptr< Qubit > &q, Location loc)
Set the tracked location for a qubit handle.
void SetDefaultBackend(QStateBackend b)
Set the default backend used for newly created states.
std::vector< std::shared_ptr< QState > > GetStatesSortedById() const
Return all registered states sorted by state id.
QubitId nextQubitId_
Next qubit id to assign.
CreateStateResult CreateState(unsigned int n)
Create a new state with n qubits initialized in the |0...0> state.
std::shared_ptr< QState > GetState(StateId stateId) const
Get a backend state by state id.
std::vector< QubitId > GetQubitsAtNode(uint32_t nodeId) const
Return qubit ids currently located at a given node.
void UnregisterEverywhere(const std::shared_ptr< Qubit > &q)
Remove a qubit handle from membership lists across all states.
std::vector< std::shared_ptr< Qubit > > GetLocalQubits(uint32_t nodeId) const
Return qubit handles currently located at a given node.
CreateStateResult CreateStateFromExisting(const std::shared_ptr< QState > &state)
Register an already-constructed backend state object.
std::shared_ptr< Qubit > GetQubitHandle(QubitId id) const
Return a tracked qubit handle by qubit id.
StateId nextStateId_
Next state id to assign.
Location GetLocation(const std::shared_ptr< Qubit > &q) const
Get the tracked location for a qubit handle.
std::unordered_map< StateId, std::shared_ptr< QState > > states_
State id to backend state.
std::shared_ptr< QState > MergeStates(const std::vector< std::shared_ptr< Qubit > > &qs)
Ensure the provided qubits belong to a single backend state.
std::function< void(QState &)> StreamAssigner
Callback type used to assign RNG streams to newly registered states.
std::unordered_map< uint32_t, std::unordered_set< QubitId > > qubitsAtNode_
Node id to currently local qubit ids.
std::unordered_map< QubitId, Location > location_
Qubit id to current location.
std::vector< std::shared_ptr< Qubit > > QubitsOf(StateId stateId) const
Return qubit handles that currently belong to a given state.
void SetStreamAssigner(StreamAssigner fn)
Set the callback used to assign streams to newly created states.
Backend-agnostic interface for a quantum state object.
std::uint64_t QubitId
Stable identifier for a registered qubit handle.
std::uint64_t StateId
Stable identifier for a registered backend state.
QStateBackend BackendFromString(std::string_view s)
Convert a backend name string to a QStateBackend enum value.
QStateBackend
Backend family used when creating new quantum states.
@ Ket
State-vector backend.
Result of creating a new backend state.
StateId stateId
Assigned state id.
std::vector< unsigned int > indices
Initial in-state qubit indices.
Current tracked location of a qubit.