Paradox Game Engine  v1.0.0 beta06
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Events Macros Pages
KeyedSortedListSerializer.cs
Go to the documentation of this file.
1 using System;
2 using System.Collections.Generic;
3 using SiliconStudio.Core.Collections;
4 
5 namespace SiliconStudio.Core.Serialization.Serializers
6 {
7  public class KeyedSortedListSerializer<TKeyedList, TKey, T> : DataSerializer<TKeyedList>, IDataSerializerInitializer, IDataSerializerGenericInstantiation where TKeyedList : KeyedSortedList<TKey, T>
8  {
9  private DataSerializer<T> itemDataSerializer;
10 
11  public override void PreSerialize(ref TKeyedList obj, ArchiveMode mode, SerializationStream stream)
12  {
13  if (mode == ArchiveMode.Deserialize)
14  {
15  if (obj == null)
16  obj = Activator.CreateInstance<TKeyedList>();
17  else
18  obj.Clear();
19  }
20  }
21 
22  /// <inheritdoc/>
23  public void Initialize(SerializerSelector serializerSelector)
24  {
25  itemDataSerializer = MemberSerializer<T>.Create(serializerSelector);
26  }
27 
28  /// <inheritdoc/>
29  public override void Serialize(ref TKeyedList obj, ArchiveMode mode, SerializationStream stream)
30  {
31  if (mode == ArchiveMode.Deserialize)
32  {
33  // TODO: We could probably avoid using TrackingKeyedList.Add, and directly fill the items list (since items are supposed to be sorted already).
34  int count = stream.ReadInt32();
35  for (int i = 0; i < count; ++i)
36  {
37  T value = default(T);
38  itemDataSerializer.Serialize(ref value, mode, stream);
39  obj.Add(value);
40  }
41  }
42  else if (mode == ArchiveMode.Serialize)
43  {
44  stream.Write(obj.Count);
45  foreach (T item in obj)
46  {
47  itemDataSerializer.Serialize(item, stream);
48  }
49  }
50  }
51 
52  public void EnumerateGenericInstantiations(SerializerSelector serializerSelector, IList<Type> genericInstantiations)
53  {
54  genericInstantiations.Add(typeof(T));
55  }
56  }
57 }
_In_ size_t count
Definition: DirectXTexP.h:174
Base class for implementation of SerializationStream.
Adds initialization feature to a DataSerializer.
Helper for serializing members of a class.
override void Serialize(ref TKeyedList obj, ArchiveMode mode, SerializationStream stream)
Serializer context. It holds DataSerializer{T} objects and their factories.
void EnumerateGenericInstantiations(SerializerSelector serializerSelector, IList< Type > genericInstantiations)
Enumerates required DataSerializer required by this instance of DataSerializer. Null is authorized in...
Describes how to serialize and deserialize an object without knowing its type. Used as a common base ...
ArchiveMode
Enumerates the different mode of serialization (either serialization or deserialization).
Definition: ArchiveMode.cs:8
Describes how to serialize and deserialize an object of a given type.
override void PreSerialize(ref TKeyedList obj, ArchiveMode mode, SerializationStream stream)
void Initialize(SerializerSelector serializerSelector)
Initializes the specified serializer. The serializer.