#region Copyright & License Information /* * Copyright 2007-2011 The OpenRA Developers (see AUTHORS) * This file is part of OpenRA, which is free software. It is made * available to you under the terms of the GNU General Public License * as published by the Free Software Foundation. For more information, * see COPYING. */ #endregion using System; using System.Collections.Generic; using System.Drawing; using System.IO; using System.Linq; using System.Reflection; namespace OpenRA { public static class Exts { public static string F(this string fmt, params object[] args) { return string.Format(fmt, args); } public static void Do(this IEnumerable e, Action fn) { foreach (var ee in e) fn(ee); } public static IEnumerable GetNamespaces(this Assembly a) { return a.GetTypes().Select(t => t.Namespace).Distinct().Where(n => n != null); } public static string ReadAllText(this Stream s) { using (s) using (var sr = new StreamReader(s)) return sr.ReadToEnd(); } public static byte[] ReadAllBytes(this Stream s) { using (s) { var data = new byte[s.Length - s.Position]; s.Read(data, 0, data.Length); return data; } } public static void Write(this Stream s, byte[] data) { s.Write(data, 0, data.Length); } public static IEnumerable ReadAllLines(this Stream s) { using (var sr = new StreamReader(s)) for (; ; ) { var line = sr.ReadLine(); if (line == null) yield break; else yield return line; } } public static bool HasAttribute(this MemberInfo mi) { return mi.GetCustomAttributes(typeof(T), true).Length != 0; } public static T[] GetCustomAttributes(this MemberInfo mi, bool inherit) where T : class { return (T[])mi.GetCustomAttributes(typeof(T), inherit); } public static T[] GetCustomAttributes(this ParameterInfo mi) where T : class { return (T[])mi.GetCustomAttributes(typeof(T), true); } public static T Clamp(this T val, T min, T max) where T : IComparable { if (val.CompareTo(min) < 0) return min; else if (val.CompareTo(max) > 0) return max; else return val; } public static bool Contains(this Rectangle r, int2 p) { return r.Contains(p.ToPoint()); } public static bool Contains(this RectangleF r, int2 p) { return r.Contains(p.ToPointF()); } } }