using System; using System.Globalization; using System.IO; using System.Text; #if PORTABLE using System.Collections.Generic; #else using System.Collections; #endif namespace Org.BouncyCastle.Utilities { internal abstract class Platform { private static readonly CompareInfo InvariantCompareInfo = CultureInfo.InvariantCulture.CompareInfo; internal static bool EqualsIgnoreCase(string a, string b) { #if PORTABLE return String.Equals(a, b, StringComparison.OrdinalIgnoreCase); #else return ToUpperInvariant(a) == ToUpperInvariant(b); #endif } #if PORTABLE && !DOTNET internal static string GetEnvironmentVariable( string variable) { return null; } #else internal static string GetEnvironmentVariable( string variable) { try { return Environment.GetEnvironmentVariable(variable); } catch (System.Security.SecurityException) { // We don't have the required permission to read this environment variable, // which is fine, just act as if it's not set return null; } } #endif internal static Exception CreateNotImplementedException( string message) { return new NotImplementedException(message); } #if PORTABLE internal static System.Collections.IList CreateArrayList() { return new List(); } internal static System.Collections.IList CreateArrayList(int capacity) { return new List(capacity); } internal static System.Collections.IList CreateArrayList(System.Collections.ICollection collection) { System.Collections.IList result = new List(collection.Count); foreach (object o in collection) { result.Add(o); } return result; } internal static System.Collections.IList CreateArrayList(System.Collections.IEnumerable collection) { System.Collections.IList result = new List(); foreach (object o in collection) { result.Add(o); } return result; } internal static System.Collections.IDictionary CreateHashtable() { return new Dictionary(); } internal static System.Collections.IDictionary CreateHashtable(int capacity) { return new Dictionary(capacity); } internal static System.Collections.IDictionary CreateHashtable(System.Collections.IDictionary dictionary) { System.Collections.IDictionary result = new Dictionary(dictionary.Count); foreach (System.Collections.DictionaryEntry entry in dictionary) { result.Add(entry.Key, entry.Value); } return result; } #else internal static System.Collections.IList CreateArrayList() { return new ArrayList(); } internal static System.Collections.IList CreateArrayList(int capacity) { return new ArrayList(capacity); } internal static System.Collections.IList CreateArrayList(System.Collections.ICollection collection) { return new ArrayList(collection); } internal static System.Collections.IList CreateArrayList(System.Collections.IEnumerable collection) { ArrayList result = new ArrayList(); foreach (object o in collection) { result.Add(o); } return result; } internal static System.Collections.IDictionary CreateHashtable() { return new Hashtable(); } internal static System.Collections.IDictionary CreateHashtable(int capacity) { return new Hashtable(capacity); } internal static System.Collections.IDictionary CreateHashtable(System.Collections.IDictionary dictionary) { return new Hashtable(dictionary); } #endif internal static int GetHashCode(object obj) { return null == obj ? 0 : obj.GetHashCode(); } internal static string ToLowerInvariant(string s) { #if PORTABLE return s.ToLowerInvariant(); #else return s.ToLower(CultureInfo.InvariantCulture); #endif } internal static string ToUpperInvariant(string s) { #if PORTABLE return s.ToUpperInvariant(); #else return s.ToUpper(CultureInfo.InvariantCulture); #endif } internal static readonly string NewLine = Environment.NewLine; #if PORTABLE internal static void Dispose(IDisposable d) { d.Dispose(); } #else internal static void Dispose(Stream s) { s.Close(); } internal static void Dispose(TextWriter t) { t.Close(); } #endif internal static int IndexOf(string source, string value) { return InvariantCompareInfo.IndexOf(source, value, CompareOptions.Ordinal); } internal static int LastIndexOf(string source, string value) { return InvariantCompareInfo.LastIndexOf(source, value, CompareOptions.Ordinal); } internal static bool StartsWith(string source, string prefix) { return InvariantCompareInfo.IsPrefix(source, prefix, CompareOptions.Ordinal); } internal static bool EndsWith(string source, string suffix) { return InvariantCompareInfo.IsSuffix(source, suffix, CompareOptions.Ordinal); } internal static string GetTypeName(object obj) { return obj.GetType().FullName; } } }