Esempio n. 1
0
        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));
        }
Esempio n. 2
0
        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);
        }
Esempio n. 3
0
        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]);
        }
Esempio n. 4
0
        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++; }
Esempio n. 5
0
        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;
        }
Esempio n. 6
0
 public EffectParameterEntry(ParameterKey key, object value)
 {
     Key   = key;
     Value = value;
 }