#include "fiko/istakip/merkez.hpp" #include namespace fiko::istakip { IsMerkez::IsMerkez(DepoArayuz& depo) : depo_(depo) { sonSurum_ = depo_.sonSurum(); sonKimlik_ = depo_.sonKimlik(); } IsMerkez::YazSonuc IsMerkez::yaz(uint64_t istemciNo, uint64_t sira, const IsKayit& taslak, uint64_t beklenenSurum) { YazSonuc sonuc; if (sira == 0 || sira <= depo_.istemciSira(istemciNo)) return sonuc; // tekrar/geçersiz if (beklenenSurum != 0 && taslak.kimlik != 0) { IsKayit mevcut; if (!depo_.bul(taslak.kimlik, mevcut) || mevcut.surum != beklenenSurum) { sonuc.cakisma = true; // istek işlendi sayılır: sira ilerler, tekrar denenmez depo_.istemciSiraKaydet(istemciNo, sira); return sonuc; } } IsKayit k = taslak; if (k.kimlik == 0) k.kimlik = sonKimlik_ + 1; k.surum = sonSurum_ + 1; if (!depo_.kaydet(k) || !depo_.istemciSiraKaydet(istemciNo, sira)) { sonuc.depoHata = true; return sonuc; // sayaçlar İLERLEMEZ — depo düzelince aynı sira yeniden denenebilir } sonKimlik_ = std::max(sonKimlik_, k.kimlik); sonSurum_ = k.surum; sonuc.uygulandi = true; sonuc.kayit = std::move(k); return sonuc; } } // namespace fiko::istakip