Paradox Game Engine  v1.0.0 beta06
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Events Macros Pages
BuildParameterCollection.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 System.Collections.Generic;
5 using System.Linq;
6 using SiliconStudio.Core;
7 using SiliconStudio.Core.Serialization;
8 using SiliconStudio.Core.Serialization.Serializers;
9 
10 namespace SiliconStudio.BuildEngine
11 {
12  public class BuildConfiguration
13  {
14  public readonly string Name;
15  public readonly BuildParameterCollection Parameters = new BuildParameterCollection();
16 
17  BuildConfiguration(string name)
18  {
19  Name = name;
20  }
21  }
22 
23  [DataContract]
24  [DataSerializer(typeof(Serializer))]
25  public struct BuildParameter
26  {
27  public readonly string Name;
28  public readonly string Value;
29 
30  public BuildParameter(string name, string value)
31  {
32  Name = name;
33  Value = value;
34  }
35 
36  public bool Equals(BuildParameter other)
37  {
38  return string.Equals(Name, other.Name) && Equals(Value, other.Value);
39  }
40 
41  public override bool Equals(object obj)
42  {
43  if (ReferenceEquals(null, obj)) return false;
44  return obj is BuildParameter && Equals((BuildParameter)obj);
45  }
46 
47  public override int GetHashCode()
48  {
49  unchecked
50  {
51  return ((Name != null ? Name.GetHashCode() : 0) * 397) ^ (Value != null ? Value.GetHashCode() : 0);
52  }
53  }
54 
55  public static bool operator ==(BuildParameter left, BuildParameter right)
56  {
57  return left.Equals(right);
58  }
59 
60  public static bool operator !=(BuildParameter left, BuildParameter right)
61  {
62  return !left.Equals(right);
63  }
64 
65  internal class Serializer : DataSerializer<BuildParameter>
66  {
67  public override void Serialize(ref BuildParameter obj, ArchiveMode mode, SerializationStream stream)
68  {
69  if (mode == ArchiveMode.Serialize)
70  {
71  stream.Write(obj.Name);
72  stream.Write(obj.Value);
73  }
74  else
75  {
76  var name = stream.ReadString();
77  var value = stream.ReadString();
78  obj = new BuildParameter(name, value);
79  }
80  }
81  }
82  }
83 
84  [DataContract]
85  [DataSerializer(typeof(Serializer))]
86  [DataSerializerGlobal(null, typeof(List<BuildParameter>))]
87  public class BuildParameterCollection : IEnumerable<BuildParameter>
88  {
89  private readonly List<BuildParameter> parameterList = new List<BuildParameter>();
90 
91  public void Add(string name, string value)
92  {
93  Add(new BuildParameter(name, value));
94  }
95 
96  public void Add(string name, IEnumerable<string> values)
97  {
98  foreach (string value in values)
99  {
100  Add(new BuildParameter(name, value));
101  }
102  }
103 
104  public void Add(BuildParameter parameter)
105  {
106  parameterList.Add(parameter);
107  }
108 
109  public bool Contains(string name)
110  {
111  return parameterList.Any(x => x.Name == name);
112  }
113 
114  public bool ContainsMultiple(string name)
115  {
116  return parameterList.Count(x => x.Name == name) > 1;
117  }
118 
119  public bool ContainsSingle(string name)
120  {
121  return parameterList.Count(x => x.Name == name) == 1;
122  }
123 
124  public IEnumerable<string> GetRange(string name)
125  {
126  return parameterList.Where(x => x.Name == name).Select(x => x.Value);
127  }
128 
129  public string GetSingle(string name)
130  {
131  return parameterList.SingleOrDefault(x => x.Name == name).Value;
132  }
133 
134  public IEnumerator<BuildParameter> GetEnumerator()
135  {
136  return parameterList.GetEnumerator();
137  }
138 
139  System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator()
140  {
141  return parameterList.GetEnumerator();
142  }
143 
144  internal class Serializer : DataSerializer<BuildParameterCollection>
145  {
146  public override void Serialize(ref BuildParameterCollection obj, ArchiveMode mode, SerializationStream stream)
147  {
148  if (mode == ArchiveMode.Serialize)
149  {
150  stream.Write(obj.parameterList);
151  }
152  else
153  {
154  var parameterList = stream.Read<List<BuildParameter>>();
155  obj = new BuildParameterCollection();
156  obj.parameterList.AddRange(parameterList);
157  }
158  }
159  }
160  }
161 }
Base class for implementation of SerializationStream.
void Add(string name, IEnumerable< string > values)
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