private static bool IsBoundsIntersects(RangeBounds firstRange, RangeBounds secondRange) { if (firstRange.LowerBound.IsGreaterThen(firstRange.UpperBound)) { throw new RegoException("IP address range lower bound can't be greater then upper"); } if (secondRange.LowerBound.IsGreaterThen(secondRange.UpperBound)) { throw new RegoException("IP address range lower bound can't be greater then upper"); } return(firstRange.UpperBound.IsGreaterOrEquals(secondRange.LowerBound) && secondRange.UpperBound.IsGreaterOrEquals(firstRange.LowerBound)); }
/// <summary> /// Constructor. /// </summary> /// <param name="pHandle">the handle of the region /// </param> /// <param name="pDimensions">the dimensions of the region /// </param> public RegionDescriptor(IRegionHandle pHandle, IDimensionHandleSet pDimensions) { handle = pHandle; dimensions = pDimensions; //UPGRADE_TODO: Class 'java.util.HashMap' was converted to 'System.Collections.Hashtable' which has a different behavior. 'ms-help://MS.VSCC.2003/commoner/redir/redirect.htm?keyword="jlca1073_javautilHashMap_3"' dimensionRangeBoundsMap = new System.Collections.Hashtable(); System.Collections.IEnumerator it = dimensions.GetEnumerator(); //UPGRADE_TODO: Method 'java.util.Iterator.hasNext' was converted to 'System.Collections.IEnumerator.MoveNext' which has a different behavior. 'ms-help://MS.VSCC.2003/commoner/redir/redirect.htm?keyword="jlca1073_javautilIteratorhasNext_3"' while (it.MoveNext()) { RangeBounds rb = new RangeBounds(System.Int64.MinValue, System.Int64.MaxValue); dimensionRangeBoundsMap[(IDimensionHandle)it.Current] = rb; } }
private static RangeBounds GetBounds(string range) { RangeBounds result; if (IsIpV4(range)) { if (range.Contains("-")) { var lowerSegments = new List <string>(); lowerSegments.AddRange( range.Split('.') .Select(segment => segment.Split('-')) .Select(segmentRange => segmentRange.First())); var upperSegments = new List <string>(); upperSegments.AddRange( range.Split('.') .Select(segment => segment.Split('-')) .Select(segmentRange => segmentRange.Last())); result = new RangeBounds(ParseIpAddress(string.Join(".", lowerSegments)), ParseIpAddress(string.Join(".", upperSegments))); } else if (range.Contains("/")) { var network = IPNetwork.Parse(range); result = new RangeBounds(network.Network, network.Broadcast); } else { var address = ParseIpAddress(range); result = new RangeBounds(address, address); } } else { if (range.Contains("/")) { //Split the string in parts for address and prefix var strAddress = range.Split('/').First(); var strPrefix = range.Split('/').Last(); var iPrefix = Int32.Parse(strPrefix); var ipAddress = ParseIpAddress(strAddress); //Convert the prefix length to a valid SubnetMask const int iMaskLength = 128; var btArray = new BitArray(iMaskLength); for (var iC1 = 0; iC1 < iMaskLength; iC1++) { //Index calculation is a bit strange, since you have to make your mind about byte order. var iIndex = (iMaskLength - iC1 - 1) / 8 * 8 + (iC1 % 8); btArray.Set(iIndex, iC1 >= (iMaskLength - iPrefix)); } var bMaskData = new byte[iMaskLength / 8]; btArray.CopyTo(bMaskData, 0); //Create subnet mask var subnetMask = new IPAddress(bMaskData); //Get the IP range var ipaStart = ParseIpAddress(strAddress); var ipaEnd = ipAddress.GetBroadcastAddress(subnetMask); result = new RangeBounds(ipaStart, ipaEnd); } else { var address = ParseIpAddress(range); result = new RangeBounds(address, address); } } return(result); }
/// <summary> /// Sets the range bounds for the specified dimension. /// </summary> /// <param name="dimension">the handle of the dimension /// </param> /// <param name="bounds">the new bounds for the dimension /// </param> public virtual void setRangeBounds(IDimensionHandle dimension, RangeBounds bounds) { dimensionRangeBoundsMap[dimension] = bounds; }
public static bool IsInRange <T>([NotNull] this T value, [NotNull] T lower, [NotNull] T upper, RangeBounds bounds) where T : IComparable <T> { if (value == null) { throw new ArgumentNullException(nameof(value)); } if (lower == null) { throw new ArgumentNullException(nameof(lower)); } if (upper == null) { throw new ArgumentNullException(nameof(upper)); } Order(ref lower, ref upper); if (typeof(T) == typeof(string)) { return((value as string).IsInRange(lower as string, upper as string)); } var comparand = bounds.HasFlag(RangeBounds.IncludeLower) ? 0 : 1; if (value.CompareTo(lower) < comparand) { return(false); } comparand = bounds.HasFlag(RangeBounds.IncludeUpper) ? 0 : -1; if (value.CompareTo(upper) > comparand) { return(false); } return(true); }