#include "fiko/cekirdek/dunya.hpp" namespace fiko { Varlik Dunya::olustur() { const Varlik v = sonraki_++; if (v >= canli_.size()) canli_.resize(v + 1, 0); canli_[v] = static_cast(yasayan_.size()) + 1; yasayan_.push_back(v); return v; } Varlik Dunya::dirilt(Varlik v) { if (yasiyor(v)) return v; if (v >= canli_.size()) canli_.resize(v + 1, 0); canli_[v] = static_cast(yasayan_.size()) + 1; yasayan_.push_back(v); if (sonraki_ <= v) sonraki_ = v + 1; // gelecek olustur() cakismasin return v; } bool Dunya::yasiyor(Varlik v) const { return v != VARLIK_YOK && v < canli_.size() && canli_[v] != 0; } void Dunya::yokEt(Varlik v) { if (!yasiyor(v)) return; // Tum depolardan (tur-erased) sil for (auto& [tur, kayit] : depolar_) { if (kayit.sil) kayit.sil(v); } // yasayan_'dan swap-remove const u32 idx = canli_[v] - 1; const u32 son = static_cast(yasayan_.size()) - 1; if (idx != son) { yasayan_[idx] = yasayan_[son]; canli_[yasayan_[idx]] = idx + 1; } yasayan_.pop_back(); canli_[v] = 0; } } // namespace fiko