文字列から新しいハンドルを生成するメソッドを提供します。
예제 #1
0
파일: PresetReader.cs 프로젝트: nanase/ux
        private static IEnumerable <DrumPreset> DrumLoad(XDocument document)
        {
            var preset = document.Elements("ux").Select(e => e.Elements("preset")).Select(e => e.Elements("drum")).FirstOrDefault();

            if (preset == null)
            {
                throw new ArgumentException();
            }

            var notes = preset.Elements("note");

            foreach (var note in notes)
            {
                var number = note.GetAttribute(PresetReader.xnumber);
                var note_number = note.GetAttribute(PresetReader.xnote);
                int num = 0, note_num = 0;

                if (!int.TryParse(number, out num))
                {
                    throw new ArgumentException();
                }

                if (!int.TryParse(note_number, out note_num))
                {
                    throw new ArgumentException();
                }

                yield return(new DrumPreset(num, note_num,
                                            note.Elements()
                                            .Where(h => h.Name.LocalName.ToLower() != "final")
                                            .Select(h => HandleCreator.Create(h.Name.LocalName.ToLower(), h.GetAttribute(PresetReader.xtype), h.GetAttribute(PresetReader.xvalue)))));
            }
        }
예제 #2
0
        private static int ParseOperators(HandleType type, string operators)
        {
            int result = 0;
            int tmp;

            foreach (var op in operators.Split(','))
            {
                result |= (int.TryParse(op, out tmp)) ? tmp : HandleCreator.ParseOperator(type, op);
            }

            return(result);
        }
예제 #3
0
파일: PresetReader.cs 프로젝트: nanase/ux
        private static IEnumerable <ProgramPreset> Load(XDocument document)
        {
            var preset = document.Elements("ux").Select(e => e.Elements("preset")).FirstOrDefault();

            if (preset == null)
            {
                throw new ArgumentException();
            }

            var programs = preset.Elements("program");

            foreach (var program in programs)
            {
                var number  = program.GetAttribute(PresetReader.xnumber);
                var str_msb = program.GetAttribute(PresetReader.xmsb);
                var str_lsb = program.GetAttribute(PresetReader.xlsb);

                int num = 0, msb = 0, lsb = 0;

                if (!int.TryParse(number, out num))
                {
                    throw new ArgumentException();
                }

                if (!string.IsNullOrWhiteSpace(str_msb) && !int.TryParse(str_msb, out msb))
                {
                    throw new ArgumentException();
                }

                if (!string.IsNullOrWhiteSpace(str_lsb) && !int.TryParse(str_lsb, out lsb))
                {
                    throw new ArgumentException();
                }

                if (program.Elements(PresetReader.xfinal).Count() > 1)
                {
                    throw new ArgumentException();
                }

                yield return(new ProgramPreset(num, msb, lsb,
                                               program.Elements()
                                               .Where(h => h.Name.LocalName.ToLower() != "final")
                                               .Select(h => HandleCreator.Create(h.Name.LocalName.ToLower(), h.GetAttribute(PresetReader.xtype), h.GetAttribute(PresetReader.xvalue))),
                                               program.Elements(PresetReader.xfinal)
                                               .SelectMany(f => f.Elements())
                                               .Select(h => HandleCreator.Create(h.Name.LocalName.ToLower(), h.GetAttribute(PresetReader.xtype), h.GetAttribute(PresetReader.xvalue)))));
            }
        }
예제 #4
0
        /// <summary>
        /// ハンドル名、タイプ、値から新しいハンドルを生成します。
        /// </summary>
        /// <param name="name">ハンドル名。</param>
        /// <param name="type">タイプ。</param>
        /// <param name="value">値。</param>
        /// <returns></returns>
        public static Handle Create(string name, string type, string value)
        {
            HandleType handleType;
            int        data1;
            float      data2;

            if (!Enum.TryParse(name, true, out handleType))
            {
                throw new ArgumentException();
            }

            data1 = (string.IsNullOrWhiteSpace(type)) ? 0 : HandleCreator.ParseOperators(handleType, type);

            if (string.IsNullOrWhiteSpace(value))
            {
                data2 = 0.0f;
            }
            else if (!float.TryParse(value, out data2))
            {
                throw new ArgumentException();
            }

            return(new Handle(0, handleType, data1, data2));
        }