diff --git a/imm/Imm.cs b/imm/Imm.cs index 32e28f7..20e86ee 100644 --- a/imm/Imm.cs +++ b/imm/Imm.cs @@ -123,20 +123,24 @@ public record class Recorded : Versioned new public MetaData Meta => MetaStorage as MetaData; - virtual public T Record( string reason = "", + virtual public T Record( + string reason = "", [CallerMemberName] string dbgName = "", [CallerFilePath] string dbgPath = "", - [CallerLineNumber] int lineNumber = 0 ) + [CallerLineNumber] int lineNumber = 0 + ) { return Process( t => t, reason, dbgName, dbgPath, lineNumber ); } - virtual public T Process( T next, string reason = "", + virtual public T Process( T next, + string reason = "", [CallerMemberName] string dbgName = "", [CallerFilePath] string dbgPath = "", [CallerLineNumber] int lineNumber = 0, [CallerArgumentExpression("next")] - string dbgExp = default ) + string dbgExp = default + ) { return Process( ( old ) => next, reason, dbgName, dbgPath, lineNumber, dbgExp ); } @@ -198,26 +202,31 @@ public record class Timed : Recorded public TimeSpan Since => Meta.TouchedAt - Meta.Old?.Meta.TouchedAt ?? TimeSpan.MaxValue; - override public T Record( string reason = "", + override public T Record( + string reason = "", [CallerMemberName] string dbgName = "", [CallerFilePath] string dbgPath = "", - [CallerLineNumber] int lineNumber = 0 ) + [CallerLineNumber] int lineNumber = 0 + ) { return Process( t => t, reason, dbgName, dbgPath, lineNumber ); } - override public T Process( T next, string reason = "", + override public T Process( T next, + string reason = "", [CallerMemberName] string dbgName = "", [CallerFilePath] string dbgPath = "", [CallerLineNumber] int lineNumber = 0, [CallerArgumentExpression("next")] - string dbgExp = default ) + string dbgExp = default + ) { return Process( ( old ) => next, reason, dbgName, dbgPath, lineNumber, dbgExp ); } - override public T Process( Func fn, string reason = "", + override public T Process( Func fn, + string reason = "", [CallerMemberName] string dbgName = "", [CallerFilePath] string dbgPath = "", [CallerLineNumber] int dbgLine = 0, diff --git a/imm/iu.cs b/imm/iu.cs index 0bad376..0d8b0d0 100644 --- a/imm/iu.cs +++ b/imm/iu.cs @@ -27,6 +27,20 @@ static public class iu return obj; } + static public Recorded Process( ref Recorded obj, Func fn, + string reason = "", + [CallerMemberName] string memberName = "", + [CallerFilePath] string filePath = "", + [CallerLineNumber] int lineNumber = 0, + [CallerArgumentExpression("fn")] + string expression = default ) + where T : Recorded + { + obj = obj.Process( fn, reason, memberName, filePath, lineNumber, expression ); + return obj; + } + + static public T LightProcess( ref T obj, Func fn, string reason = "", [CallerMemberName] string memberName = "",