Paradox Game Engine  v1.0.0 beta06
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Events Macros Pages
AnimationKeyValuePairArraySerializer.cs
Go to the documentation of this file.
1 // Copyright (c) 2014 Silicon Studio Corp. (http://siliconstudio.co.jp)
2 // This file is distributed under GPL v3. See LICENSE.md for details.
3 using System;
4 using SiliconStudio.Core;
5 using SiliconStudio.Core.Mathematics;
6 using SiliconStudio.Core.Serialization;
7 using SiliconStudio.Core.Serialization.Serializers;
8 
9 namespace SiliconStudio.Paradox.DataModel
10 {
11  [DataSerializerGlobal(null, typeof(AnimationData<float>))]
12  [DataSerializerGlobal(null, typeof(AnimationData<Quaternion>))]
13  [DataSerializerGlobal(null, typeof(AnimationData<Vector3>))]
14  public class AnimationKeyValuePairArraySerializer<T> : DataSerializer<AnimationKeyValuePair<T>[]>, IDataSerializerInitializer where T : struct
15  {
16  private DataSerializer<AnimationKeyValuePair<T>> itemDataSerializer;
17 
18  /// <inheritdoc/>
19  public void Initialize(SerializerSelector serializerSelector)
20  {
21  itemDataSerializer = MemberSerializer<AnimationKeyValuePair<T>>.Create(serializerSelector);
22  }
23 
24  public override void PreSerialize(ref AnimationKeyValuePair<T>[] obj, ArchiveMode mode, SerializationStream stream)
25  {
26  if (mode == ArchiveMode.Serialize)
27  {
28  stream.Write(obj.Length);
29  }
30  else if (mode == ArchiveMode.Deserialize)
31  {
32  int length = stream.ReadInt32();
33  obj = new AnimationKeyValuePair<T>[length];
34  }
35  }
36 
37  public unsafe override void Serialize(ref AnimationKeyValuePair<T>[] obj, ArchiveMode mode, SerializationStream stream)
38  {
39 
40  if (mode == ArchiveMode.Deserialize)
41  {
42  int count = obj.Length;
43  var rawData = stream.ReadBytes(Utilities.SizeOf<AnimationKeyValuePair<T>>()*count);
44  fixed (void* rawDataPtr = rawData)
45  {
46  Utilities.Read((IntPtr) rawDataPtr, obj, 0, count);
47  }
48  }
49  else if (mode == ArchiveMode.Serialize)
50  {
51  int count = obj.Length;
52  for (int i = 0; i < count; ++i)
53  {
54  itemDataSerializer.Serialize(ref obj[i], mode, stream);
55  }
56  }
57  }
58  }
59 }
unsafe override void Serialize(ref AnimationKeyValuePair< T >[] obj, ArchiveMode mode, SerializationStream stream)
_In_ size_t count
Definition: DirectXTexP.h:174
Base class for implementation of SerializationStream.
Adds initialization feature to a DataSerializer.
Serializer context. It holds DataSerializer{T} objects and their factories.
void Initialize(SerializerSelector serializerSelector)
Initializes the specified serializer. The serializer.
override void PreSerialize(ref AnimationKeyValuePair< T >[] obj, ArchiveMode mode, SerializationStream stream)
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