protected Accessor GetObjectParameterHelper(ParameterKey parameterKey, bool createIfNew = true) { // Find existing first for (int i = 0; i < parameterKeyInfos.Count; ++i) { if (parameterKeyInfos.Items[i].Key == parameterKey) { return(parameterKeyInfos.Items[i].GetObjectAccessor()); } } if (!createIfNew) { return(new Accessor(-1, 0)); } if (parameterKey.Type == ParameterKeyType.Permutation) { PermutationCounter++; } LayoutCounter++; // Check layout if it exists if (layout != null) { foreach (var layoutParameterKeyInfo in layout.LayoutParameterKeyInfos) { if (layoutParameterKeyInfo.Key == parameterKey) { parameterKeyInfos.Add(layoutParameterKeyInfo); return(layoutParameterKeyInfo.GetObjectAccessor()); } } } // Create info entry var resourceValuesSize = ObjectValues?.Length ?? 0; Array.Resize(ref ObjectValues, resourceValuesSize + 1); parameterKeyInfos.Add(new ParameterKeyInfo(parameterKey, resourceValuesSize)); // Initialize default value if (parameterKey.DefaultValueMetadata != null) { ObjectValues[resourceValuesSize] = parameterKey.DefaultValueMetadata.GetDefaultValue(); } return(new Accessor(resourceValuesSize, 1)); }
public bool Remove(ParameterKey key) { for (int i = 0; i < parameterKeyInfos.Count; ++i) { if (parameterKeyInfos[i].Key == key) { parameterKeyInfos.SwapRemoveAt(i); LayoutCounter++; return(true); } } return(false); }
public object GetObject(ParameterKey key) { if (key.Type != ParameterKeyType.Permutation && key.Type != ParameterKeyType.Object) { throw new InvalidOperationException("GetObject can only be used for Permutation or Object keys"); } var accessor = GetObjectParameterHelper(key, false); if (accessor.Offset == -1) { return(null); } return(ObjectValues[accessor.Offset]); }
protected Accessor GetObjectParameterHelper(ParameterKey parameterKey, bool createIfNew = true) { // Find existing first for (int i = 0; i < parameterKeyInfos.Count; ++i) { if (parameterKeyInfos.Items[i].Key == parameterKey) { return(parameterKeyInfos.Items[i].GetObjectAccessor()); } } if (!createIfNew) { return(new Accessor(-1, 0)); } if (parameterKey.Type == ParameterKeyType.Permutation) PermutationCounter++; }
public void SetObject(ParameterKey key, object value) { if (key.Type != ParameterKeyType.Permutation && key.Type != ParameterKeyType.Object) { throw new InvalidOperationException("SetObject can only be used for Permutation or Object keys"); } var accessor = GetObjectParameterHelper(key); if (key.Type == ParameterKeyType.Permutation) { var oldValue = ObjectValues[accessor.Offset]; if ((oldValue != null && (value == null || !oldValue.Equals(value))) || // oldValue non null => check equality (oldValue == null && value != null)) // oldValue null => check if value too { PermutationCounter++; } } ObjectValues[accessor.Offset] = value; }
public EffectParameterEntry(ParameterKey key, object value) { Key = key; Value = value; }