| using System; | |
| using System.Collections.Generic; | |
| using System.Linq; | |
| using System.Text; | |
| using OfficeOpenXml.FormulaParsing.Exceptions; | |
| using OfficeOpenXml.FormulaParsing.Utilities; | |
| namespace OfficeOpenXml.FormulaParsing.Excel.Functions.RefAndLookup | |
| { | |
| public class ArrayLookupNavigator : LookupNavigator | |
| { | |
| private readonly FunctionArgument[] _arrayData; | |
| private int _index = 0; | |
| private object _currentValue; | |
| public ArrayLookupNavigator(LookupDirection direction, LookupArguments arguments, ParsingContext parsingContext) | |
| : base(direction, arguments, parsingContext) | |
| { | |
| Require.That(arguments).Named("arguments").IsNotNull(); | |
| Require.That(arguments.DataArray).Named("arguments.DataArray").IsNotNull(); | |
| _arrayData = arguments.DataArray.ToArray(); | |
| Initialize(); | |
| } | |
| private void Initialize() | |
| { | |
| if (Arguments.LookupIndex >= _arrayData.Length) | |
| { | |
| throw new ExcelErrorValueException(eErrorType.Ref); | |
| } | |
| SetCurrentValue(); | |
| } | |
| public override int Index | |
| { | |
| get { return _index; } | |
| } | |
| private void SetCurrentValue() | |
| { | |
| _currentValue = _arrayData[_index]; | |
| } | |
| private bool HasNext() | |
| { | |
| if (Direction == LookupDirection.Vertical) | |
| { | |
| return _index < (_arrayData.Length - 1); | |
| } | |
| else | |
| { | |
| return false; | |
| } | |
| } | |
| public override bool MoveNext() | |
| { | |
| if (!HasNext()) return false; | |
| if (Direction == LookupDirection.Vertical) | |
| { | |
| _index++; | |
| } | |
| SetCurrentValue(); | |
| return true; | |
| } | |
| public override object CurrentValue | |
| { | |
| get { return _arrayData[_index].Value; } | |
| } | |
| public override object GetLookupValue() | |
| { | |
| return _arrayData[_index].Value; | |
| } | |
| } | |
| } |