public Result Add(out ulong saveDataId, ref SaveDataAttribute key) { saveDataId = default; lock (Locker) { Result rc = Initialize(); if (rc.IsFailure()) { return(rc); } rc = EnsureKvDatabaseLoaded(false); if (rc.IsFailure()) { return(rc); } SaveDataIndexerValue value = default; rc = KvDatabase.Get(ref key, SpanHelpers.AsByteSpan(ref value)); if (rc.IsSuccess()) { return(ResultFs.SaveDataPathAlreadyExists.Log()); } LastPublishedId++; ulong newSaveDataId = LastPublishedId; value = new SaveDataIndexerValue { SaveDataId = newSaveDataId }; rc = KvDatabase.Set(ref key, SpanHelpers.AsByteSpan(ref value)); if (rc.IsFailure()) { LastPublishedId--; return(rc); } rc = AdjustOpenedInfoReaders(ref key); if (rc.IsFailure()) { return(rc); } saveDataId = newSaveDataId; return(Result.Success); } }
public Result AddSystemSaveData(ref SaveDataAttribute key) { lock (Locker) { Result rc = Initialize(); if (rc.IsFailure()) { return(rc); } rc = EnsureKvDatabaseLoaded(false); if (rc.IsFailure()) { return(rc); } foreach (KeyValuePair <SaveDataAttribute, byte[]> kvp in KvDatabase) { ref SaveDataIndexerValue value = ref Unsafe.As <byte, SaveDataIndexerValue>(ref kvp.Value[0]); if (key.SaveDataId == value.SaveDataId) { return(ResultFs.SaveDataPathAlreadyExists.Log()); } } var newValue = new SaveDataIndexerValue { SaveDataId = key.SaveDataId }; rc = KvDatabase.Set(ref key, SpanHelpers.AsByteSpan(ref newValue)); if (rc.IsFailure()) { return(rc); } rc = AdjustOpenedInfoReaders(ref key); if (rc.IsFailure()) { return(rc); } return(rc); }