コード例 #1
0
        private static Record ReadRecord(CsvReader csvReader, int lineNumber, MidiFileCsvConversionSettings settings)
        {
            var record = csvReader.ReadRecord();

            if (record == null)
            {
                return(null);
            }

            var values = record.Values;

            if (values.Length < 3)
            {
                CsvError.ThrowBadFormat(record.LineNumber, "Missing required parameters.");
            }

            int parsedTrackNumber;
            var trackNumber = int.TryParse(values[0], out parsedTrackNumber)
                ? (int?)parsedTrackNumber
                : null;

            ITimeSpan time = null;

            TimeSpanUtilities.TryParse(values[1], settings.TimeType, out time);

            var recordType = values[2];

            if (string.IsNullOrEmpty(recordType))
            {
                CsvError.ThrowBadFormat(record.LineNumber, "Record type isn't specified.");
            }

            var parameters = values.Skip(3).ToArray();

            return(new Record(record.LineNumber, trackNumber, time, recordType, parameters));
        }
コード例 #2
0
ファイル: DownloadResolver.cs プロジェクト: microsoft/BuildXL
        /// <inheritdoc />
        public async Task <bool?> TryEvaluateModuleAsync([NotNull] IEvaluationScheduler scheduler, [NotNull] ModuleDefinition module, QualifierId qualifierId)
        {
            // Abstraction between SDK/Workspace/Core/Resolvers is broken here...
            var moduleDefinition = (ModuleDefinition)module;

            if (!string.Equals(moduleDefinition.Descriptor.ResolverName, Name, StringComparison.Ordinal))
            {
                return(null);
            }

            var downloadData = m_workspaceResolver.Downloads[module.Descriptor.Name];

            // Make sure evaluating is guarded by the semaphore, so it only happens one at a time
            // There is no need to make sure we don't evaluate duplicate work here since module evaluation
            // happens once per qualifier.
            await m_evaluationSemaphore.WaitAsync();

            try
            {
                // Modules of the download resolver are always instantiated with the empty qualifier
                var moduleRegistry = (ModuleRegistry)m_frontEndHost.ModuleRegistry;
                var moduleLiteral  = moduleRegistry
                                     .GetUninstantiatedModuleInfoByPath(downloadData.ModuleSpecFile)
                                     .FileModuleLiteral
                                     .InstantiateFileModuleLiteral(moduleRegistry, QualifierValue.CreateEmpty(m_context.QualifierTable));

                // Evaluate all values of the module
                using (var contextTree = new ContextTree(
                           m_frontEndHost,
                           m_context,
                           m_logger,
                           m_evaluationStatistics,
                           new QualifierValueCache(),
                           isBeingDebugged: false,
                           decorator: null,
                           moduleLiteral,
                           new EvaluatorConfiguration(trackMethodInvocations: false, cycleDetectorStartupDelay: TimeSpanUtilities.MillisecondsToTimeSpan(10)),
                           scheduler,
                           FileType.Project))
                {
                    var moduleTracker = VisitedModuleTracker.Create(isDebug: false);
                    var success       = await moduleLiteral.EvaluateAllAsync(contextTree.RootContext, moduleTracker, ModuleEvaluationMode.None);

                    return(success);
                }
            }
            finally
            {
                m_evaluationSemaphore.Release();
            }
        }
コード例 #3
0
        public static IEnumerable <Note> ConvertToNotes(Stream stream, TempoMap tempoMap, NoteCsvConversionSettings settings)
        {
            using (var csvReader = new CsvReader(stream, settings.CsvDelimiter))
            {
                CsvRecord record = null;

                while ((record = csvReader.ReadRecord()) != null)
                {
                    var values = record.Values;
                    if (values.Length < 6)
                    {
                        CsvError.ThrowBadFormat(record.LineNumber, "Missing required parameters.");
                    }

                    ITimeSpan time;
                    if (!TimeSpanUtilities.TryParse(values[0], settings.TimeType, out time))
                    {
                        CsvError.ThrowBadFormat(record.LineNumber, "Invalid time.");
                    }

                    FourBitNumber channel;
                    if (!FourBitNumber.TryParse(values[1], out channel))
                    {
                        CsvError.ThrowBadFormat(record.LineNumber, "Invalid channel.");
                    }

                    SevenBitNumber noteNumber;
                    if (!TryParseNoteNumber(values[2], settings.NoteNumberFormat, out noteNumber))
                    {
                        CsvError.ThrowBadFormat(record.LineNumber, "Invalid note number or letter.");
                    }

                    ITimeSpan length;
                    if (!TimeSpanUtilities.TryParse(values[3], settings.NoteLengthType, out length))
                    {
                        CsvError.ThrowBadFormat(record.LineNumber, "Invalid length.");
                    }

                    SevenBitNumber velocity;
                    if (!SevenBitNumber.TryParse(values[4], out velocity))
                    {
                        CsvError.ThrowBadFormat(record.LineNumber, "Invalid velocity.");
                    }

                    SevenBitNumber offVelocity;
                    if (!SevenBitNumber.TryParse(values[5], out offVelocity))
                    {
                        CsvError.ThrowBadFormat(record.LineNumber, "Invalid off velocity.");
                    }

                    var convertedTime   = TimeConverter.ConvertFrom(time, tempoMap);
                    var convertedLength = LengthConverter.ConvertFrom(length, convertedTime, tempoMap);

                    yield return(new Note(noteNumber, convertedLength, convertedTime)
                    {
                        Channel = channel,
                        Velocity = velocity,
                        OffVelocity = offVelocity
                    });
                }
            }
        }
コード例 #4
0
 public static void ParseInvalidInput(string input)
 {
     Assert.Throws <FormatException>(() => TimeSpanUtilities.Parse(input));
 }