x) Refactor Resource.cs: Change class Ref to be abstract, update method signatures, and adjust class inheritance hierarchy.

x) Update LoadHolder to be an abstract class with an overridden load method.
x) Modify Mgr class initialization and loader handling in Resource.mgr.
This commit is contained in:
Marc Hernandez 2024-05-26 20:30:53 -07:00
parent 83e10dd444
commit 0619812089

View File

@ -24,7 +24,7 @@ public interface Res_old
}
[DebuggerDisplay("Path = {path}")]
public class Ref : lib.I_Serialize
abstract public class Ref : lib.I_Serialize
{
static public bool s_verboseLogging = false;
@ -47,13 +47,13 @@ public class Ref : lib.I_Serialize
_dbgLine = dbgLine;
}
virtual public object lookup(
abstract public object lookup(
string reason = "",
[CallerMemberName] string dbgName = "",
[CallerFilePath] string dbgPath = "",
[CallerLineNumber] int dbgLine = 0
) => default;
);
virtual public void OnChange()
@ -116,12 +116,13 @@ public class Ref<T> : Ref where T : class, new()
base( !string.IsNullOrWhiteSpace(filename) ? filename : $"{{{dbgName}_{log.whatFile(dbgPath)}}}" , reason, dbgName, dbgPath, dbgLine )
{
if( s_verboseLogging ) log.info( $"Ref {GetType().Name} {GetType().GenericTypeArguments[0]} path {Filename}" );
m_res = default;
}
override internal void load()
{
m_res = Mgr.load<T>( Filename, _reason, _dbgName, _dbgPath, _dbgLine, _dbgExp );
m_res = Mgr.load<T>( Filename, _reason, _dbgName, _dbgPath, _dbgLine );
if( s_verboseLogging ) log.info( $"Ref.load {GetType().Name} {GetType().GenericTypeArguments[0]} path {Filename}" );
}
@ -161,23 +162,20 @@ public class Ref<T> : Ref where T : class, new()
}
[NonSerialized]
protected T m_res;
protected T? m_res;
}
public class Resource
{
static public Mgr mgr;
static public Mgr mgr = new();
}
public delegate T Load<out T>( string filename );
class LoadHolder
abstract class LoadHolder
{
internal virtual object load()
{
return null;
}
public abstract object load();
}
@ -190,7 +188,7 @@ class LoadHolder<T> : LoadHolder
public Load<T> _fnLoad;
internal override object load()
public override object load()
{
return load();
}
@ -212,9 +210,9 @@ class ResCache<T> where T : class, new()
public class Mgr
{
static public void startup()
{
Resource.mgr = new Mgr();
}
static public void register<T>( Load<T> loader )
@ -266,7 +264,7 @@ public class Mgr
var lh = Activator.CreateInstance( lhType, loader ) as LoadHolder;
ImmutableInterlocked.TryAdd( ref Resource.mgr.m_loaders, t, lh );
ImmutableInterlocked.TryAdd( ref Resource.mgr.m_loaders!, t, lh );
}
}
return;
@ -319,13 +317,11 @@ public class Mgr
}
*/
static public T? load<T>( string filename,
static public T load<T>( string filename,
string reason = "",
[CallerMemberName] string dbgName = "",
[CallerFilePath] string dbgPath = "",
[CallerLineNumber] int dbgLine = 0,
[CallerArgumentExpression("fn")]
string dbgExp = default
[CallerLineNumber] int dbgLine = 0
) where T : class, new()
{
if( ResCache<T>.s_cache.TryGetValue( filename, out var holder ) )
@ -373,7 +369,7 @@ public class Mgr
{
var loader = loaderGen as LoadHolder<T>;
var v = loader._fnLoad( filename );
var v = loader!._fnLoad( filename );
var weak = new WeakReference<T>( v );
@ -408,7 +404,7 @@ public class Mgr
static ImmDefLoad s_deferredLoad = ImmDefLoad.Empty;
Mgr()
public Mgr()
{
log.info( $"Creating Res.Mgr" );