private bool TryGetValueIpv6(IPAddress ipAddress, out T value) { if (ipAddress == null) { throw new ArgumentNullException("ipAddress"); } var number = IPAddressHelper.BigIntegerFromIpAddress(ipAddress); var keys = Ipv6Keys; int index = keys.BinarySearch(number); if (index < 0) { index = Math.Abs(index) - 2; } if (index >= 0 && index < keys.Count) { SortedList <BigInteger, T> subDict; if (_dictIpv6.TryGetValue(keys[index], out subDict)) { foreach (var pair in subDict) { if (number <= pair.Key) { 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("fromIp"); } if (toIp == null) { throw new ArgumentNullException("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; }