コード例 #1
0
        /// <summary>
        /// Append <see cref="StringLocalizerParameter"/>.
        /// </summary>
        /// <param name="appender"></param>
        /// <param name="previous"></param>
        /// <param name="parameterName"></param>
        /// <param name="parameterValue"></param>
        /// <param name="result"></param>
        /// <returns></returns>
        public virtual bool TryCreate(ILineFactory appender, ILine previous, string parameterName, string parameterValue, out ILineParameter result)
        {
            // Try resolve
            ILineArgument args;
            ILine         resolved;

            if (Resolver.TryResolveParameter(previous, parameterName, parameterValue, out args) && this.TryCreate(previous, args, out resolved) && resolved is ILineParameter castedResolved)
            {
                // Return as parameter and as resolved instance
                result = castedResolved;
                return(true);
            }

            IParameterInfo pi;

            if (ParameterInfos.TryGetValue(parameterName, out pi))
            {
                if (pi.InterfaceType == typeof(ILineHint))
                {
                    result = new StringLocalizerHint(appender, previous, parameterName, parameterValue); return(true);
                }
                if (pi.InterfaceType == typeof(ILineCanonicalKey))
                {
                    result = new StringLocalizerCanonicalKey(appender, previous, parameterName, parameterValue); return(true);
                }
                if (pi.InterfaceType == typeof(ILineNonCanonicalKey))
                {
                    result = new StringLocalizerNonCanonicalKey(appender, previous, parameterName, parameterValue); return(true);
                }
            }

            // Return as parameter
            result = new StringLocalizerParameter(appender, previous, parameterName, parameterValue);
            return(true);
        }
コード例 #2
0
        public bool TryMatchParameters(object[] parameterValues, out object[] result)
        {
            if (parameterValues == null || ParameterInfos == null)
            {
                // TODO: throw
            }

            result = new object[parameterValues.Length];

            if (parameterValues.Length != ParameterInfos.Length)
            {
                return(false);
            }

            for (var i = 0; i < parameterValues.Length; i++)
            {
                var parameterInfo = ParameterInfos.FirstOrDefault(x => x.Index == i);
                if (parameterInfo == null)
                {
                    return(false);
                }

                object o;
                if (parameterValues[i].Convertible(parameterInfo.TypeDefinition.Info as Type, out o))
                {
                    result[i] = o;
                }
                else
                {
                    return(false);
                }
            }

            return(true);
        }
コード例 #3
0
        public override void SetUpParameter(PropertyInfo property, SynthParameter param)
        {
            var catName = param.Category ?? "Default";

            if (!(Categories.Contains(catName)))
            {
                Categories.Add(new VstParameterCategory()
                {
                    Name = catName
                });
            }
            var category = Categories[catName];

            var paramInfo = new VstParameterInfo();

            paramInfo.Category       = category;
            paramInfo.CanBeAutomated = true;
            paramInfo.Name           = param.Name;
            paramInfo.Label          = property.Name;
            paramInfo.ShortLabel     = param.ShortLabel;
            paramInfo.MinInteger     = param.Lo;
            paramInfo.MaxInteger     = param.Hi;
            paramInfo.DefaultValue   = param.DefaultValue;
            VstParameterNormalizationInfo.AttachTo(paramInfo);
            var manager = new VstParameterManager(paramInfo);

            _managers.Add(manager);
            if (property.PropertyType == typeof(float) || property.PropertyType == typeof(double))
            {
                manager.PropertyChanged += (object sender, PropertyChangedEventArgs e) =>
                {
                    if (e.PropertyName == "CurrentValue")
                    {
                        VstParameterManager paramMgr = (VstParameterManager)sender;
                        property.SetValue(this, paramMgr.CurrentValue);
                        OnPropertyChanged(property.Name);
                    }
                }
            }
            ;
            else if (property.PropertyType == typeof(int))
            {
                manager.PropertyChanged += (object sender, PropertyChangedEventArgs e) =>
                {
                    if (e.PropertyName == "CurrentValue")
                    {
                        VstParameterManager paramMgr = (VstParameterManager)sender;
                        property.SetValue(this, (int)(paramMgr.CurrentValue + 0.5f));
                        OnPropertyChanged(property.Name);
                    }
                }
            }
            ;
            else
            {
                throw new InvalidOperationException($"Parameter type {property.PropertyType} is not supported (yet?)");
            }
            ParameterInfos.Add(paramInfo);
        }
コード例 #4
0
        private Collection <HttpParameterDescriptor> InitializeParameterDescriptors()
        {
            Contract.Assert(_methodInfo != null);

            List <HttpParameterDescriptor> parameterInfos = ParameterInfos.Select(
                (item) => new ReflectedHttpParameterDescriptor(this, item)).ToList <HttpParameterDescriptor>();

            return(new Collection <HttpParameterDescriptor>(parameterInfos));
        }
コード例 #5
0
        /// <summary>
        /// Создает коллекцию программ.
        /// </summary>
        /// <returns></returns>
        protected override VstProgramCollection CreateProgramCollection()
        {
            VstProgramCollection programs = new VstProgramCollection();

            VstProgram defaultProgram = new VstProgram(ParameterCategories);

            defaultProgram.Parameters.AddRange(ParameterInfos.Select(x => new VstParameter(x)));
            defaultProgram.Name = "Default";
            programs.Add(defaultProgram);

            return(programs);
        }
コード例 #6
0
ファイル: RustCodeGen.cs プロジェクト: yvt/ngspades
            public string GetSignature(bool isInterfaceDeclaration)
            {
                var sb = new System.Text.StringBuilder();

                sb.Append($"fn {NativeName}(");

                var paramDecl = ParameterInfos.Select((rpi) => {
                    return($"{rpi.NativeName}: {rpi.NativeTypeName}");
                }).ToList();

                if (!isInterfaceDeclaration)
                {
                    paramDecl.Insert(0, "&self");
                }

                sb.Append(string.Join(", ", paramDecl));
                sb.Append($") -> {NativeReturnTypeName}");
                return(sb.ToString());
            }
コード例 #7
0
        private object CreateInstance()
        {
            var instance = Activator.CreateInstance(TypeDefinition.Info as Type,
                                                    ParameterInfos == null ? new object[0] : ParameterInfos.OrderBy(x => x.Index).Select(x => x.ParameterValue).ToArray());

            if (PropertyInfos != null && PropertyInfos.Length > 0)
            {
                foreach (var propertyInfo in PropertyInfos)
                {
                    (propertyInfo.PropertyDefinition.Info as PropertyInfo).SetValue(instance, propertyInfo.PropertyValue);
                }
            }

            return(instance);
        }
コード例 #8
0
 public override void OnException(MethodExecutionArgs args)
 {
     Console.WriteLine(
         $"Exception: {args.Method.DeclaringType?.Name}.{args.Method.Name}({ParameterInfos.Select((x, i) => $"{x.Name} = {args.Arguments[i]}").Aggregate((x, y) => x + ", " + y)})");
     args.FlowBehavior = FlowBehavior.ThrowException;
 }
コード例 #9
0
 public override void OnEntry(MethodExecutionArgs args)
 {
     Console.WriteLine(
         $"Entering {args.Method.DeclaringType?.Name}.{args.Method.Name}({ParameterInfos.Select((x, i) => $"{x.Name} = {args.Arguments[i]}").Aggregate((x, y) => x + ", " + y)})");
 }