23 g_gates(std::move(r.g_gates)),
24 g_anonymousGates(std::move(r.g_anonymousGates))
26 for (std::size_t i = 0; i < this->g_gates.size(); ++i)
28 this->g_gates[i]->g_tunnel =
this;
30 for (std::size_t i = 0; i < this->g_anonymousGates.size(); ++i)
32 this->g_anonymousGates[i]->g_tunnel =
this;
44 this->g_gates = std::move(r.g_gates);
45 this->g_anonymousGates = std::move(r.g_anonymousGates);
47 for (std::size_t i = 0; i < this->g_gates.size(); ++i)
49 this->g_gates[i]->g_tunnel =
this;
51 for (std::size_t i = 0; i < this->g_anonymousGates.size(); ++i)
53 this->g_anonymousGates[i]->g_tunnel =
this;
58bool Tunnel<T>::knock(fge::TunnelGate<T>& gate,
bool anonymous)
60 if ((!gate.isLocked()) || gate.status())
68 this->g_anonymousGates.push_back(&gate);
71 this->g_gates.push_back(&gate);
75bool Tunnel<T>::addGate(fge::TunnelGate<T>& gate,
bool anonymous)
85 this->g_anonymousGates.push_back(&gate);
88 this->g_gates.push_back(&gate);
93bool Tunnel<T>::isAnonymous(fge::TunnelGate<T>
const& gate)
const
95 for (std::size_t i = 0; i < this->g_anonymousGates.size(); ++i)
97 if (this->g_anonymousGates[i] == &gate)
106void Tunnel<T>::closeGate(std::size_t index)
108 if (index >= this->g_gates.size())
112 this->g_gates[index]->g_tunnel =
nullptr;
113 this->g_gates.erase(this->g_gates.begin() + index);
116void Tunnel<T>::closeAnonymousGate(std::size_t index)
118 if (index >= this->g_anonymousGates.size())
122 this->g_anonymousGates[index]->g_tunnel =
nullptr;
123 this->g_anonymousGates.erase(this->g_anonymousGates.begin() + index);
126void Tunnel<T>::closeGate(fge::TunnelGate<T>& gate)
128 for (std::size_t i = 0; i < this->g_anonymousGates.size(); ++i)
130 if (this->g_anonymousGates[i] == &gate)
132 this->g_anonymousGates[i]->g_tunnel =
nullptr;
133 this->g_anonymousGates.erase(this->g_anonymousGates.begin() + i);
137 for (std::size_t i = 0; i < this->g_gates.size(); ++i)
139 if (this->g_gates[i] == &gate)
141 this->g_gates[i]->g_tunnel =
nullptr;
142 this->g_gates.erase(this->g_gates.begin() + i);
148void Tunnel<T>::closeAll()
150 for (std::size_t i = 0; i < this->g_anonymousGates.size(); ++i)
152 this->g_anonymousGates[i]->g_tunnel =
nullptr;
154 for (std::size_t i = 0; i < this->g_gates.size(); ++i)
156 this->g_gates[i]->g_tunnel =
nullptr;
158 this->g_anonymousGates.clear();
159 this->g_gates.clear();
163T* Tunnel<T>::get(std::size_t index)
const
165 if (index >= this->g_gates.size())
169 return this->g_gates[index]->g_data;
172T* Tunnel<T>::getAnonymous(std::size_t index)
const
174 if (index >= this->g_anonymousGates.size())
178 return this->g_anonymousGates[index]->g_data;
181std::size_t Tunnel<T>::getGatesSize()
const
183 return this->g_gates.size();
186std::size_t Tunnel<T>::getAnonymousGatesSize()
const
188 return this->g_anonymousGates.size();
192T* Tunnel<T>::operator[](std::size_t index)
const
194 if (index >= this->g_gates.size())
198 return this->g_gates[index]->g_data;
213 g_locked(gate.g_locked)
217 gate.g_tunnel->addGate(*this, gate.g_tunnel->isAnonymous(gate));
224 g_locked(gate.g_locked)
228 gate.g_tunnel->addGate(*
this, gate.g_tunnel->isAnonymous(gate));
229 gate.g_tunnel->closeGate(gate);
239TunnelGate<T>::~TunnelGate()
245fge::TunnelGate<T>& TunnelGate<T>::operator=(fge::TunnelGate<T>
const& gate)
247 this->g_data =
nullptr;
248 this->g_tunnel =
nullptr;
249 this->g_locked = gate.g_locked;
253 gate.g_tunnel->addGate(*
this, gate.g_tunnel->isAnonymous(gate));
258fge::TunnelGate<T>& TunnelGate<T>::operator=(fge::TunnelGate<T>&& gate)
noexcept
260 this->g_data =
nullptr;
261 this->g_tunnel =
nullptr;
262 this->g_locked = gate.g_locked;
266 gate.g_tunnel->addGate(*
this, gate.g_tunnel->isAnonymous(gate));
267 gate.g_tunnel->closeGate(gate);
273bool TunnelGate<T>::openTo(fge::Tunnel<T>& tunnel,
bool anonymous)
275 return tunnel.addGate(*
this, anonymous);
278void TunnelGate<T>::close()
282 this->g_tunnel->closeGate(*
this);
286bool TunnelGate<T>::isOpen()
const
288 return this->g_tunnel !=
nullptr;
292void TunnelGate<T>::setData(T* val)
297T
const* TunnelGate<T>::getData()
const
302T* TunnelGate<T>::getData()
308void TunnelGate<T>::setLock(
bool val)
310 this->g_locked = val;
313bool TunnelGate<T>::isLocked()
const
315 return this->g_locked;
319fge::Tunnel<T>* TunnelGate<T>::getTunnel()
const
321 return this->g_tunnel;
Definition C_tunnel.hpp:64
TunnelGate()
TunnelGate.
Definition C_tunnel.inl:204
Definition C_tunnel.hpp:30