// Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence. // See the LICENCE file in the repository root for full licence text. using System; using Realms; namespace osu.Game.Database { public static class RealmExtensions { /// /// Perform a write operation against the provided realm instance. /// /// /// This will automatically start a transaction if not already in one. /// /// The realm to operate on. /// The write operation to run. public static void Write(this Realm realm, Action function) { Transaction? transaction = null; try { if (!realm.IsInTransaction) transaction = realm.BeginWrite(); function(realm); transaction?.Commit(); } finally { transaction?.Dispose(); } } /// /// Perform a write operation against the provided realm instance. /// /// /// This will automatically start a transaction if not already in one. /// /// The realm to operate on. /// The write operation to run. public static T Write(this Realm realm, Func function) { Transaction? transaction = null; try { if (!realm.IsInTransaction) transaction = realm.BeginWrite(); var result = function(realm); transaction?.Commit(); return result; } finally { transaction?.Dispose(); } } /// /// Whether the provided change set has changes to the top level collection. /// /// /// Realm subscriptions fire on both collection and property changes (including *all* nested properties). /// Quite often we only care about changes at a collection level. This can be used to guard and early-return when no such changes are in a callback. /// public static bool HasCollectionChanges(this ChangeSet changes) => changes.InsertedIndices.Length > 0 || changes.DeletedIndices.Length > 0 || changes.Moves.Length > 0; } }