sharplib/imm/iu.cs
Marc Hernandez be02b6f91f Consolidate imports, wrap metadata in struct, update type constraints
x) Consolidate imports for Immutable collections
x) Wrap metadata into its own struct
x) Update type constraints for generic methods
2024-07-01 14:47:24 -07:00

57 lines
1.6 KiB
C#

// A spot for immutable helpers
// TODO
// TODO
// TODO
// x) Wrap metadata into its own struct
// x) Make metadata a struct vs a class
using System;
using System.Runtime.CompilerServices;
static public class iu
{
//This can handle both Timed and Recorded
static public T Process<T>( ref T obj, Func<T, T> fn,
string reason = "",
[CallerMemberName] string dbgName = "",
[CallerFilePath] string dbgPath = "",
[CallerLineNumber] int dbgLine = 0,
[CallerArgumentExpression("fn")]
string dbgExpression = default )
where T : imm.Recorded<T>, imm.Imm
{
obj = obj.Process( fn, reason, dbgName, dbgPath, dbgLine, dbgExpression );
return obj;
}
static public imm.Timed<T> Process<T>( ref imm.Timed<T> obj, Func<T, T> fn,
string reason = "",
[CallerMemberName] string dbgName = "",
[CallerFilePath] string dbgPath = "",
[CallerLineNumber] int dbgLine = 0,
[CallerArgumentExpression("fn")]
string dbgExpression = default )
where T : imm.Timed<T>, imm.Imm
{
obj = obj.Process( fn, reason, dbgName, dbgPath, dbgLine, dbgExpression );
return obj;
}
static public T LightProcess<T>( ref T obj, Func<T, T> fn,
string reason = "",
[CallerMemberName] string dbgName = "",
[CallerFilePath] string dbgPath = "",
[CallerLineNumber] int dbgLine = 0,
[CallerArgumentExpression("fn")]
string dbgExpression = default )
where T : imm.Versioned<T>, imm.Imm
{
obj = obj.Process( fn, reason );
return obj;
}
}