private static int AdjustFixedLength(int baseLength, ScannableEntryItemRepeatInfo repeatData) { if (repeatData.Min == repeatData.Max && repeatData.Min != null) { return(baseLength * repeatData.Min.Value); } else if ((repeatData.Options & ~(ScannableEntryItemRepeatOptions.AnyOrder | ScannableEntryItemRepeatOptions.MaxReduce | ScannableEntryItemRepeatOptions.Specific)) == ScannableEntryItemRepeatOptions.None) { return(baseLength); } else { return(-1); } }
public static ScannableEntryItemRepeatInfo operator |(ScannableEntryItemRepeatInfo left, ScannableEntryItemRepeatInfo right) { if (left.Options == ScannableEntryItemRepeatOptions.Specific && right.Options == ScannableEntryItemRepeatOptions.Specific) { throw new InvalidOperationException("left and right are both specific match requirements"); } if (left.Options == ScannableEntryItemRepeatOptions.Specific) { ScannableEntryItemRepeatInfo result = new ScannableEntryItemRepeatInfo(left.Min, left.Max); result.Options = left.Options | right.Options; return(result); } if (right.Options == ScannableEntryItemRepeatOptions.Specific) { ScannableEntryItemRepeatInfo result = new ScannableEntryItemRepeatInfo(right.Min, right.Max); result.Options = left.Options | right.Options; return(result); } return(new ScannableEntryItemRepeatInfo(left.Options | right.Options)); }