MonoGameDeviceContent.cs 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. using System;
  2. namespace SharpGLTF.Runtime
  3. {
  4. /// <summary>
  5. /// A wrapper that contains an object with disposable resources.
  6. /// </summary>
  7. /// <typeparam name="T"></typeparam>
  8. public class MonoGameDeviceContent<T> : IDisposable
  9. where T:class
  10. {
  11. #region lifecycle
  12. internal MonoGameDeviceContent(T instance, IDisposable[] disposables)
  13. {
  14. _Instance = instance;
  15. _Disposables = disposables;
  16. }
  17. public void Dispose()
  18. {
  19. _Instance = null;
  20. if (_Disposables == null) return;
  21. foreach (var d in _Disposables) d.Dispose();
  22. _Disposables = null;
  23. }
  24. ~MonoGameDeviceContent()
  25. {
  26. System.Diagnostics.Debug.Assert(_Disposables == null, "Not disposed correctly");
  27. }
  28. #endregion
  29. #region data
  30. /// <summary>
  31. /// The actual object.
  32. /// </summary>
  33. private T _Instance;
  34. /// <summary>
  35. /// The disposable resources associated with <see cref="_Instance"/>.
  36. /// </summary>
  37. private IDisposable[] _Disposables;
  38. #endregion
  39. #region properties
  40. public static implicit operator T(MonoGameDeviceContent<T> value) { return value?.Instance; }
  41. public T Instance => _Instance;
  42. #endregion
  43. }
  44. }