Renames
x) Renames
This commit is contained in:
parent
ad4bcf31a9
commit
ae4e3f75dc
69
imm/Imm.cs
69
imm/Imm.cs
@ -5,6 +5,7 @@ using System.Diagnostics;
|
|||||||
using System.Diagnostics.CodeAnalysis;
|
using System.Diagnostics.CodeAnalysis;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Runtime.CompilerServices;
|
using System.Runtime.CompilerServices;
|
||||||
|
using System.Runtime.Serialization;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
using System.Threading;
|
using System.Threading;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
@ -27,19 +28,19 @@ static public class Util
|
|||||||
static public T Process<T>( ref T obj, Func<T, T> fn, string reason = "",
|
static public T Process<T>( ref T obj, Func<T, T> fn, string reason = "",
|
||||||
[CallerMemberName] string dbgName = "",
|
[CallerMemberName] string dbgName = "",
|
||||||
[CallerFilePath] string dbgPath = "",
|
[CallerFilePath] string dbgPath = "",
|
||||||
[CallerLineNumber] int lineNumber = 0,
|
[CallerLineNumber] int dbgLine = 0,
|
||||||
[CallerArgumentExpression("fn")]
|
[CallerArgumentExpression("fn")]
|
||||||
string dbgExp = default )
|
string dbgExp = default )
|
||||||
where T : Recorded<T>
|
where T : Recorded<T>
|
||||||
{
|
{
|
||||||
obj = obj.Process( fn, reason, dbgName, dbgPath, lineNumber, dbgExp );
|
obj = obj.Process( fn, reason, dbgName, dbgPath, dbgLine, dbgExp );
|
||||||
return obj;
|
return obj;
|
||||||
}
|
}
|
||||||
|
|
||||||
static public T LightProcess<T>( ref T obj, Func<T, T> fn, string reason = "",
|
static public T LightProcess<T>( ref T obj, Func<T, T> fn, string reason = "",
|
||||||
[CallerMemberName] string dbgName = "",
|
[CallerMemberName] string dbgName = "",
|
||||||
[CallerFilePath] string dbgPath = "",
|
[CallerFilePath] string dbgPath = "",
|
||||||
[CallerLineNumber] int lineNumber = 0,
|
[CallerLineNumber] int dbgLine = 0,
|
||||||
[CallerArgumentExpression("fn")]
|
[CallerArgumentExpression("fn")]
|
||||||
string dbgExp = default )
|
string dbgExp = default )
|
||||||
where T : Versioned<T>
|
where T : Versioned<T>
|
||||||
@ -99,9 +100,36 @@ public record class Versioned<T> : Imm
|
|||||||
|
|
||||||
Meta Imm.Meta => MetaStorage;
|
Meta Imm.Meta => MetaStorage;
|
||||||
|
|
||||||
|
ObjectIDGenerator oIdGen = new();
|
||||||
|
|
||||||
|
|
||||||
[lib.Dont]
|
[lib.Dont]
|
||||||
[DebuggerBrowsable(DebuggerBrowsableState.Never)]
|
[DebuggerBrowsable(DebuggerBrowsableState.Never)]
|
||||||
public ChangeDelegate OnChange = (old, cur) => {};
|
internal ChangeDelegate OnChange = (old, cur) => {};
|
||||||
|
|
||||||
|
public void AddOnChange( ChangeDelegate fn,
|
||||||
|
string reason,
|
||||||
|
[CallerMemberName] string dbgName = "",
|
||||||
|
[CallerFilePath] string dbgPath = "",
|
||||||
|
[CallerLineNumber] int dbgLine = 0
|
||||||
|
)
|
||||||
|
{
|
||||||
|
var oid = oIdGen.GetId( fn, out var firstTime );
|
||||||
|
log.debug( $"ADD {oid}/{firstTime} {log.whatFile(dbgPath)}({dbgLine}): {dbgName} added OnChange bcs {reason}" );
|
||||||
|
OnChange += fn;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void RemOnChange( ChangeDelegate fn,
|
||||||
|
[CallerMemberName] string dbgName = "",
|
||||||
|
[CallerFilePath] string dbgPath = "",
|
||||||
|
[CallerLineNumber] int dbgLine = 0
|
||||||
|
)
|
||||||
|
{
|
||||||
|
var oid = oIdGen.GetId( fn, out var firstTime );
|
||||||
|
log.debug( $"REM {oid}/{firstTime}{log.whatFile(dbgPath)}({dbgLine}): {dbgName} removing OnChange" );
|
||||||
|
OnChange -= fn;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
public T Process( Func<T, T> fn, string reason = "" )
|
public T Process( Func<T, T> fn, string reason = "" )
|
||||||
{
|
{
|
||||||
@ -152,29 +180,29 @@ public record class Recorded<T> : Versioned<T>
|
|||||||
string reason = "",
|
string reason = "",
|
||||||
[CallerMemberName] string dbgName = "",
|
[CallerMemberName] string dbgName = "",
|
||||||
[CallerFilePath] string dbgPath = "",
|
[CallerFilePath] string dbgPath = "",
|
||||||
[CallerLineNumber] int lineNumber = 0
|
[CallerLineNumber] int dbgLine = 0
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
return Process( t => t, reason, dbgName, dbgPath, lineNumber );
|
return Process( t => t, reason, dbgName, dbgPath, dbgLine );
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual public T Process( T next,
|
virtual public T Process( T next,
|
||||||
string reason = "",
|
string reason = "",
|
||||||
[CallerMemberName] string dbgName = "",
|
[CallerMemberName] string dbgName = "",
|
||||||
[CallerFilePath] string dbgPath = "",
|
[CallerFilePath] string dbgPath = "",
|
||||||
[CallerLineNumber] int lineNumber = 0,
|
[CallerLineNumber] int dbgLine = 0,
|
||||||
[CallerArgumentExpression("next")]
|
[CallerArgumentExpression("next")]
|
||||||
string dbgExp = default
|
string dbgExp = default
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
return Process( ( old ) => next, reason, dbgName, dbgPath, lineNumber, dbgExp );
|
return Process( ( old ) => next, reason, dbgName, dbgPath, dbgLine, dbgExp );
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual public T Process( Func<T, T> fn,
|
virtual public T Process( Func<T, T> fn,
|
||||||
string reason = "",
|
string reason = "",
|
||||||
[CallerMemberName] string dbgName = "",
|
[CallerMemberName] string dbgName = "",
|
||||||
[CallerFilePath] string dbgPath = "",
|
[CallerFilePath] string dbgPath = "",
|
||||||
[CallerLineNumber] int lineNumber = 0,
|
[CallerLineNumber] int dbgLine = 0,
|
||||||
[CallerArgumentExpression("fn")]
|
[CallerArgumentExpression("fn")]
|
||||||
string dbgExp = default
|
string dbgExp = default
|
||||||
)
|
)
|
||||||
@ -183,6 +211,9 @@ public record class Recorded<T> : Versioned<T>
|
|||||||
|
|
||||||
var next = fn( orig );
|
var next = fn( orig );
|
||||||
|
|
||||||
|
if( object.ReferenceEquals( orig, next) )
|
||||||
|
return next;
|
||||||
|
|
||||||
var ret = next with
|
var ret = next with
|
||||||
{
|
{
|
||||||
//Do the Versioned code here
|
//Do the Versioned code here
|
||||||
@ -194,7 +225,7 @@ public record class Recorded<T> : Versioned<T>
|
|||||||
ZZOld = orig,
|
ZZOld = orig,
|
||||||
MemberName = dbgName,
|
MemberName = dbgName,
|
||||||
FilePath = dbgPath,
|
FilePath = dbgPath,
|
||||||
LineNumber = lineNumber,
|
LineNumber = dbgLine,
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -236,35 +267,35 @@ public record class Timed<T> : Recorded<T>
|
|||||||
string reason = "",
|
string reason = "",
|
||||||
[CallerMemberName] string dbgName = "",
|
[CallerMemberName] string dbgName = "",
|
||||||
[CallerFilePath] string dbgPath = "",
|
[CallerFilePath] string dbgPath = "",
|
||||||
[CallerLineNumber] int lineNumber = 0
|
[CallerLineNumber] int dbgLine = 0
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
return Process( t => t, reason, dbgName, dbgPath, lineNumber );
|
return Process( t => t with { MetaStorage = t.Meta with { Reason = $"Record {reason}" }}, reason, dbgName, dbgPath, dbgLine );
|
||||||
}
|
}
|
||||||
|
|
||||||
override public T Process( T next,
|
override public T Process( T next,
|
||||||
string reason = "",
|
string reason = "",
|
||||||
[CallerMemberName] string dbgName = "",
|
[CallerMemberName] string dbgName = "",
|
||||||
[CallerFilePath] string dbgPath = "",
|
[CallerFilePath] string dbgPath = "",
|
||||||
[CallerLineNumber] int lineNumber = 0,
|
[CallerLineNumber] int dbgLine = 0,
|
||||||
[CallerArgumentExpression("next")]
|
[CallerArgumentExpression("next")]
|
||||||
string dbgExp = default
|
string dbgExp = default
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
return Process( ( old ) => next, reason, dbgName, dbgPath, lineNumber, dbgExp );
|
return Process( ( old ) => next, reason, dbgName, dbgPath, dbgLine, dbgExp );
|
||||||
}
|
}
|
||||||
|
|
||||||
public U ProcessFn<U>( Func<U, U> fn,
|
public U ProcessFn<U>( Func<U, U> fn,
|
||||||
string reason = "",
|
string reason = "",
|
||||||
[CallerMemberName] string dbgName = "",
|
[CallerMemberName] string dbgName = "",
|
||||||
[CallerFilePath] string dbgPath = "",
|
[CallerFilePath] string dbgPath = "",
|
||||||
[CallerLineNumber] int lineNumber = 0,
|
[CallerLineNumber] int dbgLine = 0,
|
||||||
[CallerArgumentExpression("next")]
|
[CallerArgumentExpression("next")]
|
||||||
string dbgExp = default
|
string dbgExp = default
|
||||||
)
|
)
|
||||||
where U : T
|
where U : T
|
||||||
{
|
{
|
||||||
return (U)ProcessFn( fn, reason, dbgName, dbgPath, lineNumber, dbgExp );
|
return (U)ProcessFn( fn, reason, dbgName, dbgPath, dbgLine, dbgExp );
|
||||||
}
|
}
|
||||||
|
|
||||||
override public T Process( Func<T, T> fn,
|
override public T Process( Func<T, T> fn,
|
||||||
@ -290,6 +321,9 @@ public record class Timed<T> : Recorded<T>
|
|||||||
|
|
||||||
var next = fn( orig );
|
var next = fn( orig );
|
||||||
|
|
||||||
|
if( object.ReferenceEquals( orig, next) )
|
||||||
|
return next;
|
||||||
|
|
||||||
var ret = next with
|
var ret = next with
|
||||||
{
|
{
|
||||||
MetaStorage = Meta with
|
MetaStorage = Meta with
|
||||||
@ -310,7 +344,8 @@ public record class Timed<T> : Recorded<T>
|
|||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
if( OnChange != null) OnChange( orig, ret );
|
if( OnChange != null)
|
||||||
|
OnChange( orig, ret );
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|||||||
32
imm/iu.cs
32
imm/iu.cs
@ -16,38 +16,38 @@ static public class iu
|
|||||||
//This can handle both Timed and Recorded
|
//This can handle both Timed and Recorded
|
||||||
static public T Process<T>( ref T obj, Func<T, T> fn,
|
static public T Process<T>( ref T obj, Func<T, T> fn,
|
||||||
string reason = "",
|
string reason = "",
|
||||||
[CallerMemberName] string memberName = "",
|
[CallerMemberName] string dbgName = "",
|
||||||
[CallerFilePath] string filePath = "",
|
[CallerFilePath] string dbgPath = "",
|
||||||
[CallerLineNumber] int lineNumber = 0,
|
[CallerLineNumber] int dbgLine = 0,
|
||||||
[CallerArgumentExpression("fn")]
|
[CallerArgumentExpression("fn")]
|
||||||
string expression = default )
|
string dbgExpression = default )
|
||||||
where T : Recorded<T>, Imm
|
where T : Recorded<T>, Imm
|
||||||
{
|
{
|
||||||
obj = obj.Process( fn, reason, memberName, filePath, lineNumber, expression );
|
obj = obj.Process( fn, reason, dbgName, dbgPath, dbgLine, dbgExpression );
|
||||||
return obj;
|
return obj;
|
||||||
}
|
}
|
||||||
|
|
||||||
static public Recorded<T> Process<T>( ref Recorded<T> obj, Func<T, T> fn,
|
static public Timed<T> Process<T>( ref Timed<T> obj, Func<T, T> fn,
|
||||||
string reason = "",
|
string reason = "",
|
||||||
[CallerMemberName] string memberName = "",
|
[CallerMemberName] string dbgName = "",
|
||||||
[CallerFilePath] string filePath = "",
|
[CallerFilePath] string dbgPath = "",
|
||||||
[CallerLineNumber] int lineNumber = 0,
|
[CallerLineNumber] int dbgLine = 0,
|
||||||
[CallerArgumentExpression("fn")]
|
[CallerArgumentExpression("fn")]
|
||||||
string expression = default )
|
string dbgExpression = default )
|
||||||
where T : Recorded<T>, Imm
|
where T : Timed<T>, Imm
|
||||||
{
|
{
|
||||||
obj = obj.Process( fn, reason, memberName, filePath, lineNumber, expression );
|
obj = obj.Process( fn, reason, dbgName, dbgPath, dbgLine, dbgExpression );
|
||||||
return obj;
|
return obj;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static public T LightProcess<T>( ref T obj, Func<T, T> fn,
|
static public T LightProcess<T>( ref T obj, Func<T, T> fn,
|
||||||
string reason = "",
|
string reason = "",
|
||||||
[CallerMemberName] string memberName = "",
|
[CallerMemberName] string dbgName = "",
|
||||||
[CallerFilePath] string filePath = "",
|
[CallerFilePath] string dbgPath = "",
|
||||||
[CallerLineNumber] int lineNumber = 0,
|
[CallerLineNumber] int dbgLine = 0,
|
||||||
[CallerArgumentExpression("fn")]
|
[CallerArgumentExpression("fn")]
|
||||||
string expression = default )
|
string dbgExpression = default )
|
||||||
where T : Versioned<T>, Imm
|
where T : Versioned<T>, Imm
|
||||||
{
|
{
|
||||||
obj = obj.Process( fn, reason );
|
obj = obj.Process( fn, reason );
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user