From c18c106b72ffcc8558400b286d8f09e50e388079 Mon Sep 17 00:00:00 2001 From: Marc Hernandez Date: Sun, 28 Apr 2024 17:31:24 -0700 Subject: [PATCH] Formatting --- SharpLib.csproj | 5 +- cfg/Config.cs | 14 - res/Resource.cs | 740 ++++++++++++++++++++++--------------------- ser/XmlFormatter2.cs | 32 +- 4 files changed, 391 insertions(+), 400 deletions(-) diff --git a/SharpLib.csproj b/SharpLib.csproj index 8713be8..89c674e 100644 --- a/SharpLib.csproj +++ b/SharpLib.csproj @@ -11,9 +11,12 @@ true true preview - + + $(NoWarn);SYSLIB0050 + + diff --git a/cfg/Config.cs b/cfg/Config.cs index 01392b2..621ae1d 100644 --- a/cfg/Config.cs +++ b/cfg/Config.cs @@ -53,26 +53,12 @@ namespace lib #region SaveLoad - /* - static public res.Ref res_load( string filename ) - { - return new res.Ref( filename, load( filename ) ); - } - */ static public T res_load( string filename ) where T : Config { return load( filename ); } - /* - static public ResRefConfig res_load( string filename, Type t ) - { - return new ResRefConfig( filename, load( filename, t ) ); - } - */ - - static public Config load( string filename ) { return load( filename, null ); diff --git a/res/Resource.cs b/res/Resource.cs index 9f7ce2f..6e22a32 100644 --- a/res/Resource.cs +++ b/res/Resource.cs @@ -1,369 +1,371 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -//using System.Threading.Tasks; -using System.Diagnostics; -using System.Reflection; -using System.Collections.Immutable; -using System.Threading; - - -namespace res -{ - - - using ImmDefLoad = ImmutableQueue<(string name, Ref)>; - - public interface Res_old - { - - } - - [Serializable] - public class Ref : lib.I_Serialize - { - public string filename { get { return m_filename; } } - - //For construction - public Ref() - { - } - - public Ref( string filename ) - { - m_filename = filename; - } - - virtual public void OnSerialize() - { - } - - virtual public void OnDeserialize( object enclosing ) - { - } - - virtual public void OnChange() - { - } - - virtual internal void load() - { - - } - - protected string m_filename; - } - - [Serializable] - public class Ref : Ref where T : class - { - public T res => m_res != null ? m_res : (m_res = Mgr.load( filename )); - - //For serialization - public Ref() - : - base( "{unknown}" ) - { - } - - public Ref( string filename ) - : - base( filename ) - { - } - - /* - public Ref( string filename, T res ) : base( filename ) - { - m_res = res; - } - */ - - override internal void load() - { - m_res = Mgr.load( filename ); - } - - - [NonSerialized] - private T m_res; - - } - - - - - public class Resource - { - static public Mgr mgr; - - } - - - /* - public class Loader - { - static public T load( string filename ) - { - Debug.Assert( false, "Specialize Loader for your type for file" ); - return default(T); - } - } - */ - - public delegate T Load( string filename ); - - - class LoadHolder - { - internal virtual object load() - { - return null; - } - } - - - class LoadHolder : LoadHolder - { - public LoadHolder( Load fnLoad ) - { - m_fnLoad = fnLoad; - } - - - public Load m_fnLoad; - - internal override object load() - { - return load(); - } - } - - //generic classes make a new static per generic type - class ResCache where T : class - { - public static T s_default = default; - public static ImmutableDictionary> s_cache = ImmutableDictionary>.Empty; - - - - } - - - public class Mgr - { - - - static public void startup() - { - Resource.mgr = new Mgr(); - } - - static public void register( Load loader ) - { - Debug.Assert( !Resource.mgr.m_loaders.ContainsKey( typeof( T ) ) ); - - var lh = new LoadHolder( loader ); - - ImmutableInterlocked.TryAdd( ref Resource.mgr.m_loaders, typeof( T ), lh ); - } - - //Register all subclasses of a particular type - //???? Should we just always do this? - static public void registerSub( Type baseType ) - { - log.info( $"Registering loader for {baseType.Name}" ); - - Type[] typeParams = new Type[1]; - foreach( var mi in baseType.GetMethods() ) - { - if( mi.Name == "res_load" && mi.IsGenericMethod ) - { - foreach( var ass in AppDomain.CurrentDomain.GetAssemblies() ) - { - foreach( var t in ass.GetTypes() ) - { - if( !baseType.IsAssignableFrom( t ) ) continue; - - log.debug( $"Making a lodaer for {t.Name}" ); - - typeParams[0] = t; - var mi_ng = mi.MakeGenericMethod( typeParams ); - - var loadGenType = typeof(Load<>); - - var loadType = loadGenType.MakeGenericType( t ); - - var loader = Delegate.CreateDelegate( loadType, mi_ng ); - - var lhGenType = typeof(LoadHolder<>); - - var lhType = lhGenType.MakeGenericType( t ); - - var lh = Activator.CreateInstance( lhType, loader ) as LoadHolder; - - ImmutableInterlocked.TryAdd( ref Resource.mgr.m_loaders, t, lh ); - } - } - return; - } - } - } - - - static public Ref lookup( string filename ) where T : class - { - /* - LoadHolder loader_gen; - Resource.mgr.m_loaders.TryGetValue( typeof( T ), out loader_gen ); - - var loaderHolder = loader_gen as LoadHolder; - - if( loaderHolder != null ) - { - var rf_raw = loaderHolder.dlgtLoad( filename ); - Ref rf = rf_raw as Ref; - return rf; - } - */ - - return new Ref( filename ); - } - - //* - static public Ref lookup( string filename, Type t ) - { - /* - LoadHolder loader_gen; - Resource.mgr.m_loaders.TryGetValue( t, out loader_gen ); - - var lhGenType = typeof(LoadHolder<>); - - - if( loaderHolder != null ) - { - var rf_raw = loaderHolder.load( filename ); - return rf_raw; - } - */ - - return new Ref( filename ); - } - //*/ - - static public T load( string filename ) where T : class - { - if( ResCache.s_cache.TryGetValue( filename, out var wr ) ) - { - if( wr.TryGetTarget( out var v ) ) - return v; - - log.info( $"{filename} was in cache, but its been dropped, reloading." ); - } - - log.warn( $"Block Loading {filename}." ); - - var newV = actualLoad( filename ); - - return newV; - } - - static public T actualLoad( string filename ) where T : class - { - if( s_loading.TryGetValue( filename, out var evt ) ) - { - evt.WaitOne(); - - if( ResCache.s_cache.TryGetValue( filename, out var wr ) ) - { - if( wr.TryGetTarget( out var v ) ) - return v; - - log.error( $"{filename} was in cache, but its been dropped, reloading." ); - } - } - - var evtNew = new AutoResetEvent( false ); - - if( ImmutableInterlocked.TryAdd( ref s_loading, filename, evtNew ) ) - { - if( Resource.mgr.m_loaders.TryGetValue( typeof( T ), out var loaderGen ) ) - { - var loader = loaderGen as LoadHolder; - - var v = loader.m_fnLoad( filename ); - - var weak = new WeakReference( v ); - - var alreadyAdded = !ImmutableInterlocked.TryAdd( ref ResCache.s_cache, filename, weak ); - - evtNew.Set(); - - //Done loading - if( !ImmutableInterlocked.TryRemove( ref s_loading, filename, out var oldEvt ) ) - { - log.error( $"Error removing loading event for {filename}" ); - } - - if( alreadyAdded ) - { - log.error( $"Key {filename} already existed, though it shouldnt." ); - } - - return v; - } - else - { - log.error( $"Loader could not be found for type {typeof( T )}" ); - - return ResCache.s_default; - } - } - - return actualLoad( filename ); - } - - static object s_loadingLock = new object(); - - static ImmutableDictionary< string, AutoResetEvent > s_loading = ImmutableDictionary< string, AutoResetEvent >.Empty; - static ImmDefLoad s_deferredLoad = ImmDefLoad.Empty; - - - Mgr() - { - log.info( $"Creating Res.Mgr" ); - - var ts = new ThreadStart( deferredLoader ); - - m_deferredLoader = new Thread( ts ); - - m_deferredLoader.Start(); - } - - void deferredLoader() - { - while( true ) - { - Thread.Sleep( 1 ); - - if( ImmutableInterlocked.TryDequeue( ref s_deferredLoad, out var v ) ) - { - v.Item2.load(); - } - } - } - - - - ImmutableDictionary m_loaders = ImmutableDictionary.Empty; - - Thread m_deferredLoader; - - } - - - - - -} +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +//using System.Threading.Tasks; +using System.Diagnostics; +using System.Reflection; +using System.Collections.Immutable; +using System.Threading; + + +namespace res +{ + + + using ImmDefLoad = ImmutableQueue<(string name, Ref)>; + + public interface Res_old + { + + } + + [Serializable] + public class Ref : lib.I_Serialize + { + public string Filename =>_filename; + + //For construction + public Ref() + { + _filename = "{UNSET_CONS}"; + } + + public Ref( string filename ) + { + _filename = filename; + } + + virtual public void OnSerialize() + { + } + + virtual public void OnDeserialize( object enclosing ) + { + } + + virtual public void OnChange() + { + } + + virtual internal void load() + { + + } + + protected string _filename = "{UNSET_INLINE}"; + } + + [Serializable] + public class Ref : Ref where T : class + { + public T res => m_res != null ? m_res : ( m_res = Mgr.load( Filename ) ); + + //For serialization + public Ref() + : + base( "{unknown}" ) + { + } + + public Ref( string filename ) + : + base( filename ) + { + } + + /* + public Ref( string filename, T res ) : base( filename ) + { + m_res = res; + } + */ + + override internal void load() + { + m_res = Mgr.load( Filename ); + } + + + [NonSerialized] + private T m_res; + + } + + + + + public class Resource + { + static public Mgr mgr; + + } + + + /* + public class Loader + { + static public T load( string filename ) + { + Debug.Assert( false, "Specialize Loader for your type for file" ); + return default(T); + } + } + */ + + public delegate T Load( string filename ); + + + class LoadHolder + { + internal virtual object load() + { + return null; + } + } + + + class LoadHolder : LoadHolder + { + public LoadHolder( Load fnLoad ) + { + m_fnLoad = fnLoad; + } + + + public Load m_fnLoad; + + internal override object load() + { + return load(); + } + } + + //generic classes make a new static per generic type + class ResCache where T : class + { + public static T s_default = default; + public static ImmutableDictionary> s_cache = ImmutableDictionary>.Empty; + + + + } + + + public class Mgr + { + + + static public void startup() + { + Resource.mgr = new Mgr(); + } + + static public void register( Load loader ) + { + Debug.Assert( !Resource.mgr.m_loaders.ContainsKey( typeof( T ) ) ); + + var lh = new LoadHolder( loader ); + + ImmutableInterlocked.TryAdd( ref Resource.mgr.m_loaders, typeof( T ), lh ); + } + + //Register all subclasses of a particular type + //???? Should we just always do this? + static public void registerSub( Type baseType ) + { + log.info( $"Registering loader for {baseType.Name}" ); + + Type[] typeParams = new Type[1]; + foreach( var mi in baseType.GetMethods() ) + { + if( mi.Name == "res_load" && mi.IsGenericMethod ) + { + foreach( var ass in AppDomain.CurrentDomain.GetAssemblies() ) + { + foreach( var t in ass.GetTypes() ) + { + if( !baseType.IsAssignableFrom( t ) ) + continue; + + log.debug( $"Making a lodaer for {t.Name}" ); + + typeParams[0] = t; + var mi_ng = mi.MakeGenericMethod( typeParams ); + + var loadGenType = typeof( Load<> ); + + var loadType = loadGenType.MakeGenericType( t ); + + var loader = Delegate.CreateDelegate( loadType, mi_ng ); + + var lhGenType = typeof( LoadHolder<> ); + + var lhType = lhGenType.MakeGenericType( t ); + + var lh = Activator.CreateInstance( lhType, loader ) as LoadHolder; + + ImmutableInterlocked.TryAdd( ref Resource.mgr.m_loaders, t, lh ); + } + } + return; + } + } + } + + + static public Ref lookup( string filename ) where T : class + { + /* + LoadHolder loader_gen; + Resource.mgr.m_loaders.TryGetValue( typeof( T ), out loader_gen ); + + var loaderHolder = loader_gen as LoadHolder; + + if( loaderHolder != null ) + { + var rf_raw = loaderHolder.dlgtLoad( filename ); + Ref rf = rf_raw as Ref; + return rf; + } + */ + + return new Ref( filename ); + } + + //* + static public Ref lookup( string filename, Type t ) + { + /* + LoadHolder loader_gen; + Resource.mgr.m_loaders.TryGetValue( t, out loader_gen ); + + var lhGenType = typeof(LoadHolder<>); + + + if( loaderHolder != null ) + { + var rf_raw = loaderHolder.load( filename ); + return rf_raw; + } + */ + + return new Ref( filename ); + } + //*/ + + static public T load( string filename ) where T : class + { + if( ResCache.s_cache.TryGetValue( filename, out var wr ) ) + { + if( wr.TryGetTarget( out var v ) ) + return v; + + log.info( $"{filename} was in cache, but its been dropped, reloading." ); + } + + log.warn( $"Block Loading {filename}." ); + + var newV = actualLoad( filename ); + + return newV; + } + + static public T actualLoad( string filename ) where T : class + { + if( s_loading.TryGetValue( filename, out var evt ) ) + { + evt.WaitOne(); + + if( ResCache.s_cache.TryGetValue( filename, out var wr ) ) + { + if( wr.TryGetTarget( out var v ) ) + return v; + + log.error( $"{filename} was in cache, but its been dropped, reloading." ); + } + } + + var evtNew = new AutoResetEvent( false ); + + if( ImmutableInterlocked.TryAdd( ref s_loading, filename, evtNew ) ) + { + if( Resource.mgr.m_loaders.TryGetValue( typeof( T ), out var loaderGen ) ) + { + var loader = loaderGen as LoadHolder; + + var v = loader.m_fnLoad( filename ); + + var weak = new WeakReference( v ); + + var alreadyAdded = !ImmutableInterlocked.TryAdd( ref ResCache.s_cache, filename, weak ); + + evtNew.Set(); + + //Done loading + if( !ImmutableInterlocked.TryRemove( ref s_loading, filename, out var oldEvt ) ) + { + log.error( $"Error removing loading event for {filename}" ); + } + + if( alreadyAdded ) + { + log.error( $"Key {filename} already existed, though it shouldnt." ); + } + + return v; + } + else + { + log.error( $"Loader could not be found for type {typeof( T )}" ); + + return ResCache.s_default; + } + } + + return actualLoad( filename ); + } + + static object s_loadingLock = new object(); + + static ImmutableDictionary s_loading = ImmutableDictionary.Empty; + static ImmDefLoad s_deferredLoad = ImmDefLoad.Empty; + + + Mgr() + { + log.info( $"Creating Res.Mgr" ); + + var ts = new ThreadStart( deferredLoader ); + + m_deferredLoader = new Thread( ts ); + + m_deferredLoader.Start(); + } + + void deferredLoader() + { + while( true ) + { + Thread.Sleep( 1 ); + + if( ImmutableInterlocked.TryDequeue( ref s_deferredLoad, out var v ) ) + { + v.Item2.load(); + } + } + } + + + + ImmutableDictionary m_loaders = ImmutableDictionary.Empty; + + Thread m_deferredLoader; + + } + + + + + +} diff --git a/ser/XmlFormatter2.cs b/ser/XmlFormatter2.cs index d46f998..2c182cb 100644 --- a/ser/XmlFormatter2.cs +++ b/ser/XmlFormatter2.cs @@ -175,7 +175,7 @@ namespace lib } #region Deserialize - private static FormatterConverter s_conv = new FormatterConverter(); + private static FormatterConverter s_conv = new(); public object Deserialize( Stream stream ) @@ -188,7 +188,7 @@ namespace lib public object DeserializeKnownType( Stream stream, Type t ) { - XmlTextReader reader = new XmlTextReader( stream ); + XmlTextReader reader = new( stream ); object obj = Deserialize( reader, t ); @@ -262,7 +262,7 @@ namespace lib private object Deserialize( XmlElement elem, MemberInfo mi, Type type, object existing /*, object enclosing = null*/ ) { - string name = mi?.Name ?? "{NOT_FOUND}"; + var name = mi?.Name ?? "{NOT_FOUND}"; return Deserialize( elem, mi, type, name, existing ); } @@ -312,17 +312,17 @@ namespace lib return existing; } - Type[] mm_types = new Type[1]; private object GetDefault( Type t ) { - mm_types[0] = t; + var types = new Type[1]; + types[0] = t; - var fn = GetType().GetMethod( "GetDefaultGeneric" ).MakeGenericMethod( mm_types ); + var fn = GetType().GetMethod( "GetDefaultGeneric" ).MakeGenericMethod( types ); return fn.Invoke( this, null ); } - public T GetDefaultGeneric() + static public T GetDefaultGeneric() { return default( T ); } @@ -436,9 +436,9 @@ namespace lib { var node = objNode as XmlElement; - String name = node.Name; + string name = node.Name; - String childType = node.GetAttribute( "_.t" ); + string childType = node.GetAttribute( "_.t" ); name = refl.TypeToIdentifier( name ); @@ -455,7 +455,7 @@ namespace lib //object objUn = FormatterServices.GetSafeUninitializedObject( finalType ); - IDeserializationCallback objUnOnDeser = obj as IDeserializationCallback; + var objUnOnDeser = obj as IDeserializationCallback; mm_consType[0] = typeof( SerializationInfo ); mm_consType[1] = typeof( StreamingContext ); @@ -479,7 +479,7 @@ namespace lib foreach( var serMember in serInfo ) { - String name = serMember.Name; + string name = serMember.Name; name = refl.TypeToIdentifier( name ); @@ -512,7 +512,7 @@ namespace lib foreach( FieldInfo childFi in fields ) { - String name = childFi.Name; + string name = childFi.Name; var dontAtt = childFi.GetCustomAttributes(); @@ -581,7 +581,7 @@ namespace lib foreach( var childPi in props ) { - String name = childPi.Name; + string name = childPi.Name; var dontAtt = childPi.GetCustomAttributes(); if( dontAtt.Any() ) { @@ -1155,7 +1155,7 @@ namespace lib foreach( var serMember in serInfo ) { - String name = serMember.Name; + string name = serMember.Name; name = refl.TypeToIdentifier( name ); @@ -1206,7 +1206,7 @@ namespace lib foreach( var childFi in fields ) { - String name = childFi.Name; + string name = childFi.Name; var dontAtt = childFi.GetCustomAttributes(); string propName = ""; @@ -1255,7 +1255,7 @@ namespace lib foreach( var childPi in props ) { - String name = childPi.Name; + string name = childPi.Name; var dontAtt = childPi.GetCustomAttributes(); if( dontAtt.Any() )