// // Author: // Jb Evain (jbevain@gmail.com) // // Copyright (c) 2008 - 2015 Jb Evain // Copyright (c) 2008 - 2011 Novell, Inc. // // Licensed under the MIT/X11 license. // using System; namespace MonoFN { static class Disposable { public static Disposable Owned (T value) where T : class, IDisposable { return new Disposable (value, owned: true); } public static Disposable NotOwned (T value) where T : class, IDisposable { return new Disposable (value, owned: false); } } struct Disposable : IDisposable where T : class, IDisposable { internal readonly T value; readonly bool owned; public Disposable (T value, bool owned) { this.value = value; this.owned = owned; } public void Dispose () { if (value != null && owned) value.Dispose (); } } }