1 // 2 // Copyright (c) 2010-2018 Antmicro 3 // Copyright (c) 2011-2015 Realtime Embedded 4 // 5 // This file is licensed under the MIT License. 6 // Full license text is available in 'licenses/MIT.txt'. 7 // 8 using System; 9 using Antmicro.Migrant; 10 using Antmicro.Migrant.Hooks; 11 12 namespace Antmicro.Renode.Utilities 13 { 14 public sealed class SerializableWeakReference<T> where T : class 15 { SerializableWeakReference(T target)16 public SerializableWeakReference(T target) 17 { 18 reference = new WeakReference(target); 19 } 20 21 public T Target 22 { 23 get 24 { 25 return (T)reference.Target; 26 } 27 } 28 29 public bool IsAlive 30 { 31 get 32 { 33 return Target == null; 34 } 35 } 36 37 [PreSerialization] BeforeSerialization()38 private void BeforeSerialization() 39 { 40 objectToSave = Target; 41 } 42 43 [PostSerialization] AfterSerialization()44 private void AfterSerialization() 45 { 46 objectToSave = null; 47 } 48 49 [PostDeserialization] AfterDeserialization()50 private void AfterDeserialization() 51 { 52 reference = new WeakReference(objectToSave); 53 } 54 55 [Transient] 56 private WeakReference reference; 57 58 private T objectToSave; 59 } 60 } 61 62