using OpenTap.Addin; using OpenTap.Addin.Entity; using System; using System.Text.RegularExpressions; namespace AddInPlugin.Util { public class MethodUtil { public static readonly MethodUtil Instance = new MethodUtil(); private MethodUtil() { } public bool IsNullOrEmpty(object obj) { return string.IsNullOrEmpty(obj?.ToString()); } public string Str(object obj) { return obj?.ToString(); } public NumberData Abs(object obj) { if (NumberData.Support(obj)) { var nd = new NumberData(obj.ToString()); return new NumberData(Math.Abs(nd.value)); } throw new ArgumentException($"Unsupported Type {obj.GetType()}"); } public NumberData Sqrt(object obj) { if (NumberData.Support(obj)) { var nd = new NumberData(obj.ToString()); return new NumberData(Math.Sqrt(nd.value)); } throw new ArgumentException($"Unsupported Type {obj.GetType()}"); } public string[] Split(object data, object spliter) { return Regex.Split(data.ToString(), spliter.ToString()); } public double Seconds(bool useless = true) { return DateTimeOffset.UtcNow.ToUnixTimeMilliseconds() / 1000d; } public string DateStr(string pattern = "yyyy-MM-dd HH:mm:ss") { return DateTime.Now.ToString(pattern); } public dynamic Ref(dynamic obj) { return obj; } public delegate NumberData Val(object target, RuntimeVariable result = null); public static Val GetValImpl() { return (object target, RuntimeVariable result) => { try { if (!(result is null)) result.__data___ = true; return new NumberData(target.ToString()); } catch (Exception ex) { if (!(result is null)) result.__data___ = false; return new NumberData(0); } }; } public string Time(bool use24hours = false) { var now = DateTime.Now; return now.ToString(use24hours ? "HH:mm:ss" : "hh:mm:ss"); } public DateTime Now() { return DateTime.Now; } public bool CompareString(object str1, object str2, object ignoreCase = null) { bool ignore = false; if (ignoreCase is bool ig) { ignore = ig; } else if (ignoreCase is RuntimeVariable rv) { ignore = rv.__data___; } return string.Equals(str1.ToString(), str2.ToString(), ignore ? StringComparison.OrdinalIgnoreCase : StringComparison.Ordinal); } } }