Disposable.cs 838 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. //
  2. // Author:
  3. // Jb Evain (jbevain@gmail.com)
  4. //
  5. // Copyright (c) 2008 - 2015 Jb Evain
  6. // Copyright (c) 2008 - 2011 Novell, Inc.
  7. //
  8. // Licensed under the MIT/X11 license.
  9. //
  10. using System;
  11. namespace ILRuntime.Mono {
  12. static class Disposable {
  13. public static Disposable<T> Owned<T> (T value) where T : class, IDisposable
  14. {
  15. return new Disposable<T> (value, owned: true);
  16. }
  17. public static Disposable<T> NotOwned<T> (T value) where T : class, IDisposable
  18. {
  19. return new Disposable<T> (value, owned: false);
  20. }
  21. }
  22. struct Disposable<T> : IDisposable where T : class, IDisposable {
  23. internal readonly T value;
  24. readonly bool owned;
  25. public Disposable (T value, bool owned)
  26. {
  27. this.value = value;
  28. this.owned = owned;
  29. }
  30. public void Dispose ()
  31. {
  32. if (value != null && owned)
  33. value.Dispose ();
  34. }
  35. }
  36. }