osu/osu.Game/Database/RealmExtensions.cs

52 lines
1.8 KiB
C#
Raw Normal View History

2021-01-11 09:58:56 +00:00
// Copyright (c) ppy Pty Ltd <contact@ppy.sh>. Licensed under the MIT Licence.
// See the LICENCE file in the repository root for full licence text.
using System.Collections.Generic;
2021-01-11 09:58:56 +00:00
using AutoMapper;
using osu.Game.Input.Bindings;
using Realms;
namespace osu.Game.Database
{
public static class RealmExtensions
{
private static readonly IMapper mapper = new MapperConfiguration(c =>
{
c.ShouldMapField = fi => false;
c.ShouldMapProperty = pi => pi.SetMethod != null && pi.SetMethod.IsPublic;
c.CreateMap<RealmKeyBinding, RealmKeyBinding>();
}).CreateMapper();
2021-01-12 06:48:26 +00:00
/// <summary>
/// Create a detached copy of the each item in the collection.
2021-01-12 06:48:26 +00:00
/// </summary>
/// <param name="items">A list of managed <see cref="RealmObject"/>s to detach.</param>
/// <typeparam name="T">The type of object.</typeparam>
/// <returns>A list containing non-managed copies of provided items.</returns>
public static List<T> Detach<T>(this IEnumerable<T> items) where T : RealmObject
{
var list = new List<T>();
foreach (var obj in items)
list.Add(obj.Detach());
return list;
}
2021-01-12 06:48:26 +00:00
/// <summary>
2021-01-13 09:38:30 +00:00
/// Create a detached copy of the item.
2021-01-12 06:48:26 +00:00
/// </summary>
/// <param name="item">The managed <see cref="RealmObject"/> to detach.</param>
/// <typeparam name="T">The type of object.</typeparam>
/// <returns>A non-managed copy of provided item. Will return the provided item if already detached.</returns>
public static T Detach<T>(this T item) where T : RealmObject
2021-01-11 09:58:56 +00:00
{
2021-01-12 06:48:26 +00:00
if (!item.IsManaged)
return item;
2021-01-11 09:58:56 +00:00
2021-01-12 06:48:26 +00:00
return mapper.Map<T>(item);
2021-01-11 09:58:56 +00:00
}
}
}