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:
parent
83e10dd444
commit
0619812089
@ -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" );
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user