From 2e2d97266c018f7a4b9b643427276eb5d55c390e Mon Sep 17 00:00:00 2001 From: andreakarasho Date: Wed, 11 Sep 2024 09:37:26 +0200 Subject: [PATCH] + use plain code instead of linq --- src/Match.cs | 29 ++++++++++++++++++++++------- 1 file changed, 22 insertions(+), 7 deletions(-) diff --git a/src/Match.cs b/src/Match.cs index 6a97004..5d95cd2 100644 --- a/src/Match.cs +++ b/src/Match.cs @@ -7,23 +7,38 @@ public static int Validate(IComparer comparer, EcsID[] ids, ReadOnlySpan< if (terms.IsEmpty) return -1; - foreach (var term in terms) + foreach (ref readonly var term in terms) { switch (term.Op) { case TermOp.DataAccess: case TermOp.With: - if (ids.All(id => ComponentComparer.CompareTerms(null, id, term.Id) != 0)) + var all = true; + foreach (var id in ids) + { + if (ComponentComparer.CompareTerms(null, id, term.Id) == 0) + { + all = false; + break; + } + } + + if (all) { return 1; // Required ID not found } + break; case TermOp.Without: - if (ids.Any(id => ComponentComparer.CompareTerms(null, id, term.Id) == 0)) - { - return -1; // Forbidden ID found - } - break; + foreach (var id in ids) + { + if (ComponentComparer.CompareTerms(null, id, term.Id) == 0) + { + return -1; // Forbidden ID found + } + } + + break; case TermOp.Optional: // Do nothing, as presence or absence is acceptable break;