4 using System.Collections.Generic;
5 using SiliconStudio.Core;
6 using System.Reflection;
7 using SiliconStudio.Core.Serialization.Serializers;
8 using SiliconStudio.Core.Storage;
10 namespace SiliconStudio.
Paradox.Effects
25 : base(name, propertyType, null, parameterKeyMetadata)
32 DefaultMetadata = parameterKeyMetadata;
40 public int Length {
get;
private set; }
42 internal void SetName(
string name)
44 if (name == null)
throw new ArgumentNullException(
"name");
46 #if SILICONSTUDIO_PLATFORM_WINDOWS_RUNTIME
49 Name = string.Intern(name);
54 internal void SetOwnerType(Type ownerType)
56 OwnerType = ownerType;
66 public override bool Equals(
object obj)
69 if (ReferenceEquals(null, obj))
return false;
70 if (ReferenceEquals(
this, obj))
return true;
72 if (against == null)
return false;
73 return (Equals(against.Name, Name));
97 return Equals(left, right);
110 return !Equals(left, right);
117 throw new InvalidOperationException();
120 private unsafe
void UpdateName()
122 fixed (
char* bufferStart = Name)
125 objectIdBuilder.Write((byte*)bufferStart,
sizeof(
char) * Name.Length);
127 var objId = objectIdBuilder.ComputeHash();
128 var objIdData = (ulong*)&objId;
129 HashCode = objIdData[0] ^ objIdData[1];
142 if (!PropertyType.GetTypeInfo().IsValueType)
150 if (PropertyType == value.GetType())
155 if (PropertyType.GetTypeInfo().IsEnum)
157 value = Enum.Parse(PropertyType, value.ToString());
162 value = Convert.ChangeType(value, PropertyType);
176 private static bool isValueType = typeof(T).GetTypeInfo().IsValueType;
177 private static bool isValueArrayType = typeof(T).GetTypeInfo().IsArray && typeof(T).GetElementType().GetTypeInfo().IsValueType;
178 private static Type internalValueArrayType = isValueArrayType ? typeof(
ParameterCollection.InternalValueArray<>).MakeGenericType(typeof(T).GetElementType()) : null;
180 public override bool IsValueType
182 get {
return isValueType; }
191 : base(typeof(T), name, length, parameterKeyMetadata = parameterKeyMetadata ?? new
ParameterKeyMetadata<T>())
193 DefaultMetadataT = parameterKeyMetadata;
200 return string.Format(
"{0}", Name);
205 if (!typeof(T).IsArray)
206 throw new InvalidOperationException(
"Operation not valid on ParameterKey<T> if T is not an array type.");
207 var elementType = typeof(T).GetElementType();
216 if (isValueArrayType)
219 return (
ParameterCollection.InternalValue)Activator.CreateInstance(internalValueArrayType, Length);
222 return new ParameterCollection.InternalValueBase<T>();
225 internal override PropertyContainer.ValueHolder CreateValueHolder(
object value)
227 throw new NotImplementedException();
Key of an effect parameter.
virtual ParameterKey CloneLength(int length)
DataSerializerGenericMode
Defines what generic parameters to pass to the serializer.
override int GetHashCode()
Returns a hash code for this instance.
Key of an gereric effect parameter.
readonly ParameterKeyMetadata< T > DefaultMetadataT
override string ToString()
readonly ParameterKeyMetadata DefaultMetadata
ParameterKey(string name, int length=1, ParameterKeyMetadata< T > parameterKeyMetadata=null)
Initializes a new instance of the ParameterKey{T} class.
The type of the serialized type will be passed as a generic arguments of the serializer. Example: serializer of A becomes instantiated as Serializer{A}.
override ParameterKey CloneLength(int length)
override bool Equals(object obj)
Determines whether the specified System.Object is equal to this instance.
object ConvertValue(object value)
Converts the value passed by parameter to the expecting value of this parameter key (for example...
ParameterKey(Type propertyType, string name, int length, ParameterKeyMetadata parameterKeyMetadata)
Initializes a new instance of the ParameterKey class.
A class that represents a tag propety.
Holds a value inside ParameterCollection.
A container to handle a hierarchical collection of effect variables.