public override IEnumerable<long> GetMultipleIndexValues(IMultipleValueIndex<IComparable, long> myMultipleValueIndex, IComparable myIComparable) { if (myMultipleValueIndex is IRangeIndex<IComparable, long>) { //use the range funtionality foreach (var aVertexIDSet in ((IMultipleValueRangeIndex<IComparable, long>)myMultipleValueIndex).LowerThan(myIComparable, false)) { foreach (var aVertexID in aVertexIDSet) { yield return aVertexID; } } } else { //stupid, but works foreach (var aVertexIDSet in myMultipleValueIndex.Where(kv => kv.Key.CompareTo(myIComparable) < 0).Select(kv => kv.Value)) { foreach (var aVertexID in aVertexIDSet) { yield return aVertexID; } } } yield break; }
public override IEnumerable<long> GetMultipleIndexValues(IMultipleValueIndex<IComparable, long> myMultipleValueIndex, IComparable myIComparable) { if (myMultipleValueIndex.ContainsKey(myIComparable)) { return myMultipleValueIndex[myIComparable]; } return Enumerable.Empty<long>(); }
public override IEnumerable<long> GetMultipleIndexValues(IMultipleValueIndex<IComparable, long> myMultipleValueIndex, IComparable myIComparable) { foreach (var aVertexIDSet in myMultipleValueIndex.Where(kv => kv.Key.CompareTo(myIComparable) != 0).Select(kv => kv.Value)) { foreach (var aVertexID in aVertexIDSet) { yield return aVertexID; } } yield break; }
public override IEnumerable<long> GetMultipleIndexValues(IMultipleValueIndex<IComparable, long> myMultipleValueIndex, IComparable myIComparable) { var regexpression = new Regex((String)myIComparable); List<long> ids = new List<long>(); foreach (var aKV in myMultipleValueIndex) { if (regexpression.IsMatch((String)aKV.Key)) { ids.AddRange(aKV.Value); } } return ids; }
/// <summary> /// Extract values from a multiple value index /// </summary> /// <param name="mySingleValueIndex">The interesting index</param> /// <param name="myIComparable">The interesting key</param> /// <returns>An enumerable of vertexIDs</returns> public abstract IEnumerable<long> GetMultipleIndexValues(IMultipleValueIndex<IComparable, Int64> mySingleValueIndex, IComparable myIComparable);
/// <summary> /// Extract values from a multiple value index /// </summary> /// <param name="mySingleValueIndex">The interesting index</param> /// <param name="myConstant">The interesting range</param> /// <returns>An enumerable of vertexIDs</returns> private IEnumerable<long> GetMultipleIndexValues(IMultipleValueIndex<IComparable, long> myMultipleValueIndex, RangeLiteralExpression myConstant) { if (myMultipleValueIndex is IRangeIndex<IComparable, long>) { //use the range funtionality foreach (var aVertexIDSet in ((IMultipleValueRangeIndex<IComparable, long>)myMultipleValueIndex) .InRange(myConstant.Lower, myConstant.Upper, myConstant.IncludeBorders, myConstant.IncludeBorders)) { foreach (var aVertexID in aVertexIDSet) { yield return aVertexID; } } } else { //stupid, but works if (myConstant.IncludeBorders) { foreach (var aVertexIDSet in myMultipleValueIndex .Where(kv => (kv.Key.CompareTo(myConstant.Lower) >= 0) && (kv.Key.CompareTo(myConstant.Upper) <= 0)) .Select(kv => kv.Value)) { foreach (var aVertexID in aVertexIDSet) { yield return aVertexID; } } } else { foreach (var aVertexIDSet in myMultipleValueIndex .Where(kv => (kv.Key.CompareTo(myConstant.Lower) > 0) && (kv.Key.CompareTo(myConstant.Upper) < 0)) .Select(kv => kv.Value)) { foreach (var aVertexID in aVertexIDSet) { yield return aVertexID; } } } } yield break; }