using System; using System.Collections.Generic; using System.IO; using System.Reflection; using System.Runtime.CompilerServices; using System.Text; using System.Threading; namespace SharpCifs.Util.Sharpen { public class Runtime { private static Runtime _instance; private List _shutdownHooks = new List(); internal void AddShutdownHook(IRunnable r) { ShutdownHook item = new ShutdownHook(); item.Runnable = r; _shutdownHooks.Add(item); } internal int AvailableProcessors() { return Environment.ProcessorCount; } public static long CurrentTimeMillis() { return DateTime.UtcNow.ToMillisecondsSinceEpoch(); } static Hashtable _properties; public static Hashtable GetProperties() { if (_properties == null) { _properties = new Hashtable(); _properties["jgit.fs.debug"] = "false"; _properties["file.encoding"] = "UTF-8"; if (Path.DirectorySeparatorChar != '\\') _properties["os.name"] = "Unix"; else _properties["os.name"] = "Windows"; } return _properties; } public static string GetProperty(string key) { if (GetProperties().Keys.Contains(key)) { return ((string)GetProperties()[key]); } return null; } public static void SetProperty(string key, string value) { GetProperties()[key] = value; } public static Runtime GetRuntime() { if (_instance == null) { _instance = new Runtime(); } return _instance; } public static int IdentityHashCode(object ob) { return RuntimeHelpers.GetHashCode(ob); } internal long MaxMemory() { return int.MaxValue; } private class ShutdownHook { public IRunnable Runnable; ~ShutdownHook() { Runnable.Run(); } } public static void DeleteCharAt(StringBuilder sb, int index) { sb.Remove(index, 1); } public static byte[] GetBytesForString(string str) { return Encoding.UTF8.GetBytes(str); } public static byte[] GetBytesForString(string str, string encoding) { return Encoding.GetEncoding(encoding).GetBytes(str); } public static FieldInfo[] GetDeclaredFields(Type t) { throw new NotImplementedException("Type.GetFields not found on .NetStandard"); //return t.GetFields (BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Instance); } public static void NotifyAll(object ob) { Monitor.PulseAll(ob); } public static void Notify(object obj) { Monitor.Pulse(obj); } public static void PrintStackTrace(Exception ex) { Console.WriteLine(ex); } public static void PrintStackTrace(Exception ex, TextWriter tw) { tw.WriteLine(ex); } public static string Substring(string str, int index) { return str.Substring(index); } public static string Substring(string str, int index, int endIndex) { return str.Substring(index, endIndex - index); } public static void Wait(object ob) { Monitor.Wait(ob); } public static bool Wait(object ob, long milis) { return Monitor.Wait(ob, (int)milis); } public static Type GetType(string name) { throw new NotImplementedException( "AppDomain.CurrentDomain.GetAssemblies not found on .NetStandard"); //foreach (Assembly a in AppDomain.CurrentDomain.GetAssemblies ()) { // Type t = a.GetType (name); // if (t != null) // return t; //} //never used //throw new InvalidOperationException ("Type not found: " + name); } public static void SetCharAt(StringBuilder sb, int index, char c) { sb[index] = c; } public static bool EqualsIgnoreCase(string s1, string s2) { return s1.Equals(s2, StringComparison.CurrentCultureIgnoreCase); } internal static long NanoTime() { return Environment.TickCount * 1000 * 1000; } internal static int CompareOrdinal(string s1, string s2) { return string.CompareOrdinal(s1, s2); } public static string GetStringForBytes(byte[] chars) { return Encoding.UTF8.GetString(chars, 0, chars.Length); } public static string GetStringForBytes(byte[] chars, string encoding) { return GetEncoding(encoding).GetString(chars, 0, chars.Length); } public static string GetStringForBytes(byte[] chars, int start, int len) { return Encoding.UTF8.GetString(chars, start, len); } public static string GetStringForBytes(byte[] chars, int start, int len, string encoding) { return GetEncoding(encoding).Decode(chars, start, len); } public static Encoding GetEncoding(string name) { Encoding e = Encoding.GetEncoding(name.Replace('_', '-')); if (e is UTF8Encoding) return new UTF8Encoding(false, true); return e; } } }