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}")]
|
[DebuggerDisplay("Path = {path}")]
|
||||||
public class Ref : lib.I_Serialize
|
abstract public class Ref : lib.I_Serialize
|
||||||
{
|
{
|
||||||
static public bool s_verboseLogging = false;
|
static public bool s_verboseLogging = false;
|
||||||
|
|
||||||
@ -47,13 +47,13 @@ public class Ref : lib.I_Serialize
|
|||||||
_dbgLine = dbgLine;
|
_dbgLine = dbgLine;
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual public object lookup(
|
abstract public object lookup(
|
||||||
string reason = "",
|
string reason = "",
|
||||||
[CallerMemberName] string dbgName = "",
|
[CallerMemberName] string dbgName = "",
|
||||||
[CallerFilePath] string dbgPath = "",
|
[CallerFilePath] string dbgPath = "",
|
||||||
[CallerLineNumber] int dbgLine = 0
|
[CallerLineNumber] int dbgLine = 0
|
||||||
|
|
||||||
) => default;
|
);
|
||||||
|
|
||||||
|
|
||||||
virtual public void OnChange()
|
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 )
|
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}" );
|
if( s_verboseLogging ) log.info( $"Ref {GetType().Name} {GetType().GenericTypeArguments[0]} path {Filename}" );
|
||||||
|
m_res = default;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
override internal void load()
|
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}" );
|
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]
|
[NonSerialized]
|
||||||
protected T m_res;
|
protected T? m_res;
|
||||||
}
|
}
|
||||||
|
|
||||||
public class Resource
|
public class Resource
|
||||||
{
|
{
|
||||||
static public Mgr mgr;
|
static public Mgr mgr = new();
|
||||||
}
|
}
|
||||||
|
|
||||||
public delegate T Load<out T>( string filename );
|
public delegate T Load<out T>( string filename );
|
||||||
|
|
||||||
|
|
||||||
class LoadHolder
|
abstract class LoadHolder
|
||||||
{
|
{
|
||||||
internal virtual object load()
|
public abstract object load();
|
||||||
{
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -190,7 +188,7 @@ class LoadHolder<T> : LoadHolder
|
|||||||
|
|
||||||
public Load<T> _fnLoad;
|
public Load<T> _fnLoad;
|
||||||
|
|
||||||
internal override object load()
|
public override object load()
|
||||||
{
|
{
|
||||||
return load();
|
return load();
|
||||||
}
|
}
|
||||||
@ -212,9 +210,9 @@ class ResCache<T> where T : class, new()
|
|||||||
|
|
||||||
public class Mgr
|
public class Mgr
|
||||||
{
|
{
|
||||||
|
|
||||||
static public void startup()
|
static public void startup()
|
||||||
{
|
{
|
||||||
Resource.mgr = new Mgr();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static public void register<T>( Load<T> loader )
|
static public void register<T>( Load<T> loader )
|
||||||
@ -266,7 +264,7 @@ public class Mgr
|
|||||||
|
|
||||||
var lh = Activator.CreateInstance( lhType, loader ) as LoadHolder;
|
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;
|
return;
|
||||||
@ -319,13 +317,11 @@ public class Mgr
|
|||||||
}
|
}
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static public T? load<T>( string filename,
|
static public T load<T>( string filename,
|
||||||
string reason = "",
|
string reason = "",
|
||||||
[CallerMemberName] string dbgName = "",
|
[CallerMemberName] string dbgName = "",
|
||||||
[CallerFilePath] string dbgPath = "",
|
[CallerFilePath] string dbgPath = "",
|
||||||
[CallerLineNumber] int dbgLine = 0,
|
[CallerLineNumber] int dbgLine = 0
|
||||||
[CallerArgumentExpression("fn")]
|
|
||||||
string dbgExp = default
|
|
||||||
) where T : class, new()
|
) where T : class, new()
|
||||||
{
|
{
|
||||||
if( ResCache<T>.s_cache.TryGetValue( filename, out var holder ) )
|
if( ResCache<T>.s_cache.TryGetValue( filename, out var holder ) )
|
||||||
@ -373,7 +369,7 @@ public class Mgr
|
|||||||
{
|
{
|
||||||
var loader = loaderGen as LoadHolder<T>;
|
var loader = loaderGen as LoadHolder<T>;
|
||||||
|
|
||||||
var v = loader._fnLoad( filename );
|
var v = loader!._fnLoad( filename );
|
||||||
|
|
||||||
var weak = new WeakReference<T>( v );
|
var weak = new WeakReference<T>( v );
|
||||||
|
|
||||||
@ -408,7 +404,7 @@ public class Mgr
|
|||||||
static ImmDefLoad s_deferredLoad = ImmDefLoad.Empty;
|
static ImmDefLoad s_deferredLoad = ImmDefLoad.Empty;
|
||||||
|
|
||||||
|
|
||||||
Mgr()
|
public Mgr()
|
||||||
{
|
{
|
||||||
log.info( $"Creating Res.Mgr" );
|
log.info( $"Creating Res.Mgr" );
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user