예제 #1
0
	public static void Seek(SeekContext ctx)
	{
		foreach (var rule in ctx.matchRules)
		{
			Seek_Internal(ctx, rule);
		}
	}
예제 #2
0
 public static void Seek(SeekContext ctx)
 {
     foreach (var rule in ctx.matchRules)
     {
         Seek_Internal(ctx, rule);
     }
 }
예제 #3
0
 public void TestMethod1()
 {
     using (var context = new SeekContext("Seek.Database"))
     {
         var users = context.Organizations.ToList();
     }
 }
예제 #4
0
        public void TestMethod1()
        {
            using (var context = new SeekContext("Seek.Database"))
            {
                var users = context.Organizations.ToList();


            }
        }
예제 #5
0
 private static void Seek_Internal(SeekContext ctx, RuleMatchBasic2D_Rectangular rule)
 {
     for (int y = 0; y < ctx.container.Height - rule.maskHeight + 1; y++)
     {
         for (int x = 0; x < ctx.container.Width - rule.maskWidth + 1; x++)
         {
             Match_Internal(ctx, x, y, rule, 0);
             Match_Internal(ctx, x, y, rule, rule.scatters.Length - 1);
         }
     }
 }
예제 #6
0
	private static void Seek_Internal(SeekContext ctx, RuleMatchBasic2D_Rectangular rule)
	{
		var slots = ctx.container.WrapperRect;

		for (int y = 0; y < ctx.container.Height - rule.maskHeight + 1; y++)
		{
			for (int x = 0; x < ctx.container.Width - rule.maskWidth + 1; x++)
			{
				var r = Match_Internal(slots, x, y, rule);
				if (null != r) ctx.result.Add(r);
			}
		}
	}
예제 #7
0
    private static void Seek_Internal(SeekContext ctx, RuleMatchBasic2D_Rectangular rule)
    {
        var slots = ctx.container.WrapperRect;

        for (int y = 0; y < ctx.container.Height - rule.maskHeight + 1; y++)
        {
            for (int x = 0; x < ctx.container.Width - rule.maskWidth + 1; x++)
            {
                var r = Match_Internal(slots, x, y, rule);
                if (null != r)
                {
                    ctx.result.Add(r);
                }
            }
        }
    }
예제 #8
0
 public abstract TReturn Execute(T parameters, SeekContext context);
예제 #9
0
 public override IEnumerable <User> Execute(EntityFetcher <User> parameters, SeekContext context)
 {
     throw new NotImplementedException();
 }
예제 #10
0
    private static void Match_Internal(SeekContext ctx,
                                       int x,
                                       int y,
                                       RuleMatchBasic2D_Rectangular matchRule,
                                       int scatterIndex)
    {
        intermediate.Clear();
        var slots  = ctx.container.WrapperRect;
        var sample = slots[y + matchRule.scatters[scatterIndex].y, x + matchRule.scatters[scatterIndex].x];

        if (!sample.IsTarget)
        {
            return;
        }
        var operationUsed = false;

        for (int i = 0; i < matchRule.scatters.Length; ++i)
        {
            if (i == scatterIndex)
            {
                continue;
            }
            var targetX = x + matchRule.scatters[i].x;
            var targetY = y + matchRule.scatters[i].y;
            var sniff   = slots[targetY, targetX];
            if (!sniff.IsTarget)
            {
                return;
            }
            if (!sample.slotAttribute.trait.AbsoluteEqual(sniff.slotAttribute.trait))
            {
                if (operationUsed)
                {
                    return;
                }

                foreach (var operable in ctx.operationRules)
                {
                    if (JudgeOperable(sample.slotAttribute.trait,
                                      ctx.container,
                                      x, y,
                                      matchRule.scatters[i].x, matchRule.scatters[i].y,
                                      matchRule, operable, false))
                    {
                        var record = new PLMRecord2D_Retangular();
                        record.operation = operable;
                        record.rule      = matchRule;
                        record.x1        = targetX;
                        record.y1        = targetY;
                        record.x2        = targetX + operable.xRelative;
                        record.y2        = targetY + operable.yRelative;
                        intermediate.Add(record);
                        operationUsed = true;
                    }
                    if (JudgeOperable(sample.slotAttribute.trait,
                                      ctx.container,
                                      x, y,
                                      matchRule.scatters[i].x, matchRule.scatters[i].y,
                                      matchRule, operable, true))
                    {
                        var record = new PLMRecord2D_Retangular();
                        record.operation = operable;
                        record.rule      = matchRule;
                        record.x1        = targetX;
                        record.y1        = targetY;
                        record.x2        = targetX - operable.xRelative;
                        record.y2        = targetY - operable.yRelative;
                        intermediate.Add(record);
                        operationUsed = true;
                    }
                }
                if (!operationUsed)
                {
                    return;
                }
            }
        }

        // A pure match!
        if (!operationUsed)
        {
            return;
        }

        ctx.result.AddRange(intermediate);
        intermediate.Clear();
    }