private bool TryGetValueIpv6(IPAddress ipAddress, out T value) { if (ipAddress == null) { throw new ArgumentNullException(nameof(ipAddress)); } var number = IPAddressHelper.BigIntegerFromIpAddress(ipAddress); var keys = Ipv6Keys; var index = keys.BinarySearch(number); if (index < 0) { index = Math.Abs(index) - 2; } if (index >= 0 && index < keys.Count) { BigInteger key; try { key = keys[index]; } catch (IndexOutOfRangeException) { value = default(T); return(false); } SortedList <BigInteger, T> subDict; if (_dictIpv6.TryGetValue(key, out subDict)) { foreach (var pair in subDict) { if (number > pair.Key) { continue; } value = pair.Value; return(true); } } } value = default(T); return(false); }
private void AddIPv6(IPAddress fromIp, IPAddress toIp, T value) { if (fromIp == null) { throw new ArgumentNullException(nameof(fromIp)); } if (toIp == null) { throw new ArgumentNullException(nameof(toIp)); } var fromNumber = IPAddressHelper.BigIntegerFromIpAddress(fromIp); var toNumber = IPAddressHelper.BigIntegerFromIpAddress(toIp); if (fromNumber > toNumber) { var temp = fromNumber; fromNumber = toNumber; toNumber = temp; } SortedList <BigInteger, T> subDict; if (!_dictIpv6.TryGetValue(fromNumber, out subDict)) { subDict = new SortedList <BigInteger, T>(1); subDict[toNumber] = value; _dictIpv6[fromNumber] = subDict; } else { subDict[toNumber] = value; } _count = -1; _ipv6Keys = null; }