Safe.cs
190 lines
| 6.2 KiB
| text/x-csharp
|
CSharpLexer
|
|
r289 | using System; | ||
| using System.Collections.Generic; | ||||
| using System.Text.RegularExpressions; | ||||
| using System.Diagnostics; | ||||
| using System.Collections; | ||||
| using System.Runtime.CompilerServices; | ||||
| using System.Threading.Tasks; | ||||
| using System.Threading; | ||||
| #if NET_4_5 | ||||
| using System.Threading.Tasks; | ||||
| #endif | ||||
|
|
r295 | namespace Implab { | ||
|
|
r289 | public static class Safe | ||
| { | ||||
| [MethodImpl(MethodImplOptions.AggressiveInlining)] | ||||
| public static void ArgumentAssert(bool condition, string paramName) { | ||||
| if (!condition) | ||||
| throw new ArgumentException("The parameter is invalid", paramName); | ||||
| } | ||||
| [MethodImpl(MethodImplOptions.AggressiveInlining)] | ||||
| public static void ArgumentMatch(string value, string paramName, Regex rx) { | ||||
| if (rx == null) | ||||
| throw new ArgumentNullException("rx"); | ||||
| if (!rx.IsMatch(value)) | ||||
| throw new ArgumentException(String.Format("The prameter value must match {0}", rx), paramName); | ||||
| } | ||||
| [MethodImpl(MethodImplOptions.AggressiveInlining)] | ||||
| public static void ArgumentNotEmpty(string value, string paramName) { | ||||
| if (String.IsNullOrEmpty(value)) | ||||
| throw new ArgumentException("The parameter can't be empty", paramName); | ||||
| } | ||||
| [MethodImpl(MethodImplOptions.AggressiveInlining)] | ||||
| public static void ArgumentNotEmpty<T>(T[] value, string paramName) { | ||||
| if (value == null || value.Length == 0) | ||||
| throw new ArgumentException("The array must be not emty", paramName); | ||||
| } | ||||
| [MethodImpl(MethodImplOptions.AggressiveInlining)] | ||||
| public static void ArgumentNotNull(object value, string paramName) { | ||||
| if (value == null) | ||||
| throw new ArgumentNullException(paramName); | ||||
| } | ||||
| [MethodImpl(MethodImplOptions.AggressiveInlining)] | ||||
| internal static void ArgumentGreaterEqThan(int value, int min, string paramName) { | ||||
| if (value < min) | ||||
| throw new ArgumentOutOfRangeException(paramName); | ||||
| } | ||||
| public static object CreateDefaultValue(Type type) { | ||||
| if (type.IsValueType) | ||||
| return Activator.CreateInstance(type); | ||||
| return null; | ||||
| } | ||||
| [MethodImpl(MethodImplOptions.AggressiveInlining)] | ||||
| public static void ArgumentInRange(bool condition, string paramName) { | ||||
| if (!condition) | ||||
| throw new ArgumentOutOfRangeException(paramName); | ||||
| } | ||||
| [MethodImpl(MethodImplOptions.AggressiveInlining)] | ||||
| public static void ArgumentOfType(object value, Type type, string paramName) { | ||||
| if (!type.IsInstanceOfType(value)) | ||||
| throw new ArgumentException(String.Format("The parameter must be of type {0}", type), paramName); | ||||
| } | ||||
| public static void Dispose(params IDisposable[] objects) { | ||||
|
|
r292 | if (objects != null) | ||
| foreach (var d in objects) | ||||
| if (d != null) | ||||
| d.Dispose(); | ||||
|
|
r289 | } | ||
| public static void Dispose(params object[] objects) { | ||||
|
|
r292 | if (objects != null) | ||
| foreach (var obj in objects) { | ||||
| var d = obj as IDisposable; | ||||
| if (d != null) | ||||
| d.Dispose(); | ||||
| } | ||||
|
|
r289 | } | ||
| public static void DisposeCollection(IEnumerable<IDisposable> objects) { | ||||
|
|
r292 | if (objects != null) | ||
| foreach (var d in objects) | ||||
| Dispose(d); | ||||
|
|
r289 | } | ||
| public static void DisposeCollection(IEnumerable objects) { | ||||
|
|
r292 | if (objects != null) | ||
| foreach (var d in objects) | ||||
| Dispose(d); | ||||
|
|
r289 | } | ||
| public static void Dispose(object obj) { | ||||
| if (obj is IDisposable) | ||||
| Dispose((IDisposable)obj); | ||||
| } | ||||
| [DebuggerStepThrough] | ||||
| public static void DispatchEvent<T>(this EventHandler<T> handler, object sender, T args) { | ||||
| if (handler != null) | ||||
| handler(sender, args); | ||||
| } | ||||
| [DebuggerStepThrough] | ||||
| public static void DispatchEvent(this EventHandler handler, object sender, EventArgs args) { | ||||
| if (handler != null) | ||||
| handler(sender, args); | ||||
| } | ||||
| [DebuggerStepThrough] | ||||
| public static IPromise<T> Run<T>(Func<T> action) { | ||||
| ArgumentNotNull(action, "action"); | ||||
| try { | ||||
| return Promise.Resolve(action()); | ||||
| } catch (Exception err) { | ||||
| return Promise.Reject<T>(err); | ||||
| } | ||||
| } | ||||
| [DebuggerStepThrough] | ||||
| public static IPromise Run(Action action) { | ||||
| ArgumentNotNull(action, "action"); | ||||
| try { | ||||
| action(); | ||||
| return Promise.Resolve(); | ||||
| } catch (Exception err) { | ||||
| return Promise.Reject(err); | ||||
| } | ||||
| } | ||||
| [DebuggerStepThrough] | ||||
| public static IPromise Run(Func<IPromise> action) { | ||||
| ArgumentNotNull(action, "action"); | ||||
| try { | ||||
| return action() ?? Promise.Reject(new Exception("The action returned null")); | ||||
| } catch (Exception err) { | ||||
| return Promise.Reject(err); | ||||
| } | ||||
| } | ||||
| public static void NoWait(IPromise promise) { | ||||
| } | ||||
| public static void NoWait(Task promise) { | ||||
| } | ||||
| public static void NoWait<T>(Task<T> promise) { | ||||
| } | ||||
| public static void Noop() { | ||||
| } | ||||
| public static void Noop(CancellationToken ct) { | ||||
| ct.ThrowIfCancellationRequested(); | ||||
| } | ||||
| public static Task CreateTask() { | ||||
| return new Task(Noop); | ||||
| } | ||||
| public static Task CreateTask(CancellationToken ct) { | ||||
| return new Task(Noop, ct); | ||||
| } | ||||
| [DebuggerStepThrough] | ||||
| public static IPromise<T> Run<T>(Func<IPromise<T>> action) { | ||||
| ArgumentNotNull(action, "action"); | ||||
| try { | ||||
| return action() ?? Promise.Reject<T>(new Exception("The action returned null")); | ||||
| } catch (Exception err) { | ||||
| return Promise.Reject<T>(err); | ||||
| } | ||||
| } | ||||
| } | ||||
| } | ||||
