示例#1
0
 public virtual void RaiseOnTestingComplete(PatternResult result)
 {
     if (OnTestingComplete != null)
     {
         OnTestingComplete(this, result);
     }
 }
示例#2
0
文件: DSP.cs 项目: asophy/MyMusic
    public static PatternResult <T> Read <T>(IEnumerable <T> ptn, double barpos) where T : IPatternable
    {
        var    loopLength = Length(ptn);
        double loopPos    = barpos % loopLength;
        //double loopphase = loopPos / loopLength;


        PatternResult <T> res = new PatternResult <T>()
        {
            note = ptn.First(), phase = 0
        };
        double start = 0;

        foreach (var n in ptn)
        {
            double end = start + n.length();

            if (loopPos > start && loopPos < end)
            {
                var p = (loopPos - start) / n.length();
                res = new PatternResult <T>()
                {
                    note = n, phase = p
                };
            }

            start = end;
        }
        return(res);
    }
示例#3
0
 void solver_OnTrainingComplete(object arg1, PatternResult arg2)
 {
     if (OnTrainingComplete != null)
     {
         OnTrainingComplete(this, new OnTrainingCompletedEventArgs(arg2.Error));
     }
 }
示例#4
0
 void solver_OnTestingComplete(object arg1, PatternResult arg2)
 {
     if (OnTestingComplete != null)
     {
         OnTestingComplete(this, new OnTestingCompletedEventArgs(arg2.Error, arg2.PercentageCorrect));
     }
 }
示例#5
0
 void asyncFullTest_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
 {
     if (OnFullTestingComplete != null)
     {
         PatternResult result = (PatternResult)e.Result;
         OnFullTestingComplete(this, new OnTestingCompletedEventArgs(result.Error, result.PercentageCorrect));
     }
 }
示例#6
0
        public override Symbol VisitPattern([NotNull] PageInterpreterParser.PatternContext context)
        {
            var onlyFirstCaptured = context.Any() == null ? true : false;

            var subsets = context?.subset()?.Accept(this)?.GetValue <Dictionary <SubsetPart, int> >();

            for
            (
                int x = page.Contents.GetLength(0) - calculateSubsetOnPage(subsets, SubsetPart.Right);
                x < calculateSubsetOnPage(subsets, SubsetPart.Left);
                x++
            )
            {
                for
                (
                    int y = page.Contents.GetLength(1) - calculateSubsetOnPage(subsets, SubsetPart.Bottom);
                    y < calculateSubsetOnPage(subsets, SubsetPart.Top);
                    y++
                )
                {
                    if (page.Contents[x, y] == null || page.Contents[x, y].Count == 0)
                    {
                        continue;
                    }

                    pageTraverser = new PageTraverser(page, new PageIndex(x, y));

                    currentPatternResult = new PatternResult();

                    try
                    {
                        base.VisitPattern(context);
                        if (currentPatternResult != null)
                        {
                            foreach (var item in currentPatternResult.Result)
                            {
                                Result.AddResult(queryLabel, item.Key, item.Value);
                            }
                        }
                        if (onlyFirstCaptured)
                        {
                            x = page.Contents.GetLength(0);
                            break;
                        }
                    }
                    catch (ParseCanceledException)
                    {
                        currentPatternResult = null;
                    }
                }
            }

            return(new Symbol(SymbolType.Success));
        }
示例#7
0
    public PatternResult Match(Cell[,] mapCells, Cell origin)
    {
        var mapW = mapCells.GetLength(0);
        var mapH = mapCells.GetLength(1);

        List <Cell> elems = new List <Cell>();

        elems.Add(origin);

        var co = origin.coord;

        foreach (var off in this.template)
        {
            var dst = co + off;
            if (!Util.IsInside(mapW, mapH, dst.x, dst.y))
            {
                return(null);
            }

            if (mapCells[dst.x, dst.y] == null)
            {
                return(null);
            }

            if (!Cell.IsSameColor(origin, mapCells[dst.x, dst.y]))
            {
                return(null);
            }

            // check can erase
            elems.Add(mapCells[dst.x, dst.y]);
        }

        // return result
        var result = new PatternResult();

        result.type  = this.type;
        result.cells = elems.ToArray();

        return(result);
    }
示例#8
0
        public bool TryMatch(PatternSearch pathPatternSearch, string source, [NotNullWhen(true)] out PatternResult?pathPatternResult)
        {
            pathPatternSearch
            .VerifyNotNull(nameof(pathPatternSearch))
            .Pattern.VerifyNotEmpty(nameof(pathPatternSearch.Pattern));

            pathPatternResult = null;
            if (source.IsEmpty())
            {
                return(false);
            }

            // Tokenized
            IReadOnlyList <IToken> patternTokens = new StringTokenizer()
                                                   .Add("{", "}")
                                                   .Parse(pathPatternSearch.Pattern);

            var matches    = new List <string>();
            var names      = new List <string>();
            var nameValues = new List <string>();

            var cursor = new Cursor <IToken>(patternTokens);

            while (cursor.TryNextValue(out IToken? item))
            {
                if (item.Value == "{")
                {
                    if (!cursor.TryNextValue(out IToken? propertyName))
                    {
                        return(false);
                    }
                    names.Add(propertyName.Value);

                    if (!cursor.TryNextValue(out propertyName))
                    {
                        return(false);
                    }
                    if (propertyName.Value != "}")
                    {
                        return(false);
                    }
                    continue;
                }

                matches.Add(item.Value);
            }

            int start       = 0;
            var matchCursor = new Cursor <string>(matches);

            while (matchCursor.TryNextValue(out string?matchItem))
            {
                int indexOf = source.IndexOf(matchItem, start);
                if (indexOf < 0)
                {
                    return(false);
                }

                if (indexOf > start)
                {
                    nameValues.Add(source.Substring(start, indexOf - start));
                }

                start = indexOf + matchItem.Length;
            }

            if (start < source.Length)
            {
                nameValues.Add(source.Substring(start));
            }

            if (names.Count != nameValues.Count)
            {
                return(false);
            }

            pathPatternResult = new PatternResult
            {
                Name    = pathPatternSearch.Name,
                Pattern = pathPatternSearch.Pattern,
                Source  = source,
                Values  = new ConcurrentDictionary <string, string>(names.Zip(nameValues, (o, i) => new KeyValuePair <string, string>(o, i)), StringComparer.OrdinalIgnoreCase),
            };

            return(true);
        }
示例#9
0
        private void button10_Click(object sender, EventArgs e)
        {
            PatternResult result = cv.Test(cv.LoadSolutionSet("testcv"));

            richTextBox1.Text = "Test Result: " + result.PercentageCorrect + "% Correct";
        }