public override ListValue Apply(AnyValue value, Neo4jTypes.AnyType innerType, DbAccess access) { //Fast route if (innerType == NTAny) { return(FastListConversion(value)); } //slow route, recursively convert the list if (!(value is SequenceValue)) { throw CantCoerce(value, "List"); } SequenceValue listValue = ( SequenceValue )value; Coercer innerCoercer = _converters[innerType.GetType()]; AnyValue[] coercedValues = new AnyValue[listValue.Length()]; Neo4jTypes.AnyType nextInner = nextInner(innerType); if (listValue.IterationPreference() == RANDOM_ACCESS) { for (int i = 0; i < coercedValues.Length; i++) { AnyValue nextItem = listValue.Value(i); coercedValues[i] = nextItem == NO_VALUE ? NO_VALUE : innerCoercer(nextItem, nextInner, access); } } else { int i = 0; foreach (AnyValue anyValue in listValue) { AnyValue nextItem = listValue.Value(i); coercedValues[i++] = nextItem == NO_VALUE ? NO_VALUE : innerCoercer(anyValue, nextInner, access); } } return(VirtualValues.list(coercedValues)); }
private AnyValue CoerceTo(AnyValue value, DbAccess access, Neo4jTypes.AnyType types) { Coercer function = _converters[types.GetType()]; return(function(value, types, access)); }