namespace GMap.NET.Internals { using System; using System.Collections.Generic; using System.ComponentModel; using System.IO; using System.Reflection; /// /// etc functions... /// internal class Stuff { public static string EnumToString(Enum value) { FieldInfo fi = value.GetType().GetField(value.ToString()); DescriptionAttribute[] attributes = (DescriptionAttribute[])fi.GetCustomAttributes( typeof(DescriptionAttribute), false); return (attributes.Length > 0) ? attributes[0].Description : value.ToString(); } [System.Runtime.InteropServices.DllImportAttribute("user32.dll", EntryPoint = "SetCursorPos")] [return: System.Runtime.InteropServices.MarshalAsAttribute(System.Runtime.InteropServices.UnmanagedType.Bool)] public static extern bool SetCursorPos(int X, int Y); public static readonly Random random = new System.Random(); public static void Shuffle(List deck) { int N = deck.Count; for(int i = 0; i < N; ++i) { int r = i + (int)(random.Next(N - i)); T t = deck[r]; deck[r] = deck[i]; deck[i] = t; } } public static MemoryStream CopyStream(Stream inputStream, bool SeekOriginBegin) { const int readSize = 32 * 1024; byte[] buffer = new byte[readSize]; MemoryStream ms = new MemoryStream(); { int count = 0; while((count = inputStream.Read(buffer, 0, readSize)) > 0) { ms.Write(buffer, 0, count); } } buffer = null; if(SeekOriginBegin) { inputStream.Seek(0, SeekOrigin.Begin); } ms.Seek(0, SeekOrigin.Begin); return ms; } public static bool IsRunningOnVistaOrLater() { OperatingSystem os = Environment.OSVersion; if(os.Platform == PlatformID.Win32NT) { Version vs = os.Version; if(vs.Major >= 6 && vs.Minor >= 0) { return true; } } return false; } public static bool IsRunningOnWin7orLater() { OperatingSystem os = Environment.OSVersion; if(os.Platform == PlatformID.Win32NT) { Version vs = os.Version; if(vs.Major >= 6 && vs.Minor > 0) { return true; } } return false; } public static void RemoveInvalidPathSymbols(ref string url) { #if !PocketPC char[] ilg = Path.GetInvalidFileNameChars(); #else char[] ilg = new char[41]; for(int i = 0; i < 32; i++) ilg[i] = (char) i; ilg[32] = '"'; ilg[33] = '<'; ilg[34] = '>'; ilg[35] = '|'; ilg[36] = '?'; ilg[37] = ':'; ilg[38] = '/'; ilg[39] = '\\'; ilg[39] = '*'; #endif foreach(char c in ilg) { url = url.Replace(c, '_'); } } } #if PocketPC static class Monitor { static readonly OpenNETCF.Threading.Monitor2 wait = new OpenNETCF.Threading.Monitor2(); public static void Enter(Stack tileLoadQueue) { wait.Enter(); } public static void Exit(Stack tileLoadQueue) { wait.Exit(); } public static void Wait(Stack tileLoadQueue) { wait.Wait(); } public static bool Wait(Stack tileLoadQueue, int WaitForTileLoadThreadTimeout, bool p) { wait.Wait(); return true; } internal static void PulseAll(Stack tileLoadQueue) { wait.PulseAll(); } } #endif }