1 //
2 // Copyright (c) 2010-2018 Antmicro
3 //
4 // This file is licensed under the MIT License.
5 // Full license text is available in 'licenses/MIT.txt'.
6 //
7 using System;
8 using System.IO;
9 using Antmicro.Migrant;
10 using Antmicro.Migrant.Customization;
11 
12 namespace Antmicro.Renode.PlatformDescription
13 {
14     public class SerializationProvider
15     {
16         public static SerializationProvider Instance { get; private set; }
17 
SerializationProvider()18         static SerializationProvider()
19         {
20             Instance = new SerializationProvider();
21         }
22 
SerializationProvider()23         private SerializationProvider()
24         {
25             var settings = new Settings(disableTypeStamping: true);
26             serializer = new Serializer(settings);
27             memoryStream = new MemoryStream();
28         }
29 
DeepClone(T obj)30         public T DeepClone<T>(T obj)
31         {
32             memoryStream.Seek(0, SeekOrigin.Begin);
33             serializer.Serialize(obj, memoryStream);
34             memoryStream.Seek(0, SeekOrigin.Begin);
35             return serializer.Deserialize<T>(memoryStream);
36         }
37 
38         private readonly Serializer serializer;
39         private readonly MemoryStream memoryStream;
40     }
41 }
42