45 lines
1.8 KiB
C#
45 lines
1.8 KiB
C#
|
// Shared File Last Modified: 2022-12-05.
|
||
|
// Animancer // https://kybernetik.com.au/animancer // Copyright 2018-2023 Kybernetik //
|
||
|
// FlexiMotion // https://kybernetik.com.au/flexi-motion // Copyright 2018-2023 Kybernetik //
|
||
|
|
||
|
#define ANIMANCER
|
||
|
// #define FLEXI_MOTION
|
||
|
|
||
|
namespace Animancer
|
||
|
{
|
||
|
/// <summary>Interface for objects that can be copied.</summary>
|
||
|
/// https://kybernetik.com.au/animancer/api/Animancer/ICopyable_1
|
||
|
/// https://kybernetik.com.au/flexi-motion/api/FlexiMotion/ICopyable_1
|
||
|
///
|
||
|
public interface ICopyable<T>
|
||
|
{
|
||
|
/************************************************************************************************************************/
|
||
|
|
||
|
/// <summary>Copies the contents of `copyFrom` into this object, replacing its previous contents.</summary>
|
||
|
/// <remarks><see cref="AnimancerUtilities.Clone{T}(T)"/> uses this method internally.</remarks>
|
||
|
void CopyFrom(T copyFrom);
|
||
|
|
||
|
/************************************************************************************************************************/
|
||
|
}
|
||
|
|
||
|
/// https://kybernetik.com.au/animancer/api/Animancer/AnimancerUtilities
|
||
|
public static partial class AnimancerUtilities
|
||
|
{
|
||
|
/************************************************************************************************************************/
|
||
|
|
||
|
/// <summary>Creates a new <typeparamref name="T"/> and calls <see cref="ICopyable{T}.CopyFrom(T)"/> on it.</summary>
|
||
|
public static T Clone<T>(this T original) where T : class, ICopyable<T>, new()
|
||
|
{
|
||
|
if (original == null)
|
||
|
return null;
|
||
|
|
||
|
var clone = new T();
|
||
|
clone.CopyFrom(original);
|
||
|
return clone;
|
||
|
}
|
||
|
|
||
|
/************************************************************************************************************************/
|
||
|
}
|
||
|
}
|
||
|
|