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