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;
68 this->g_anonymousGates.push_back(&gate);
71 this->g_gates.push_back(&gate);
85 this->g_anonymousGates.push_back(&gate);
88 this->g_gates.push_back(&gate);
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);
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;