public override StoryVar GetMember(StoryVar member) { StoryVar val; if (TryGetMemberArray(member, out val)) { return(val); } var memberName = member.ToString().ToLower(); if (memberName == "length") { val = this.Length; } else { int index; if (HarloweUtils.TryPositionToIndex(memberName, Values.Count, out index)) { try { val = Values[index]; } catch (System.IndexOutOfRangeException) { throw new VarTypeMemberException(string.Format("The array doesn't have a {0} position.", memberName)); } } else { throw new VarTypeMemberException(string.Format("The array doesn't have a member called {0}.", memberName)); } } return(new StoryVar(val)); }
void EnsureNotPosition(string memberName) { int index; if (HarloweUtils.TryPositionToIndex(memberName, Values.Count, out index)) { throw new VarTypeMemberException("Datasets can't be accessed by position."); } }
public override StoryVar GetMember(string container, StoryVar member) { // Special case when member is an array if (member.Value is HarloweArray) { var memberArray = (HarloweArray)member.Value; var buffer = new char[memberArray.Length]; for (int i = 0; i < memberArray.Length; i++) { buffer[i] = GetMember(container, StoryVar.ConvertTo <int>(memberArray.Values[i])).ToString()[0]; } return(new string(buffer)); } int index; if (HarloweUtils.TryPositionToIndex(member, container.Length, out index)) { return(new StoryVar(container[index].ToString())); } return(base.GetMember(container, member)); }
public override void RemoveMember(StoryVar member) { var memberName = member.ToString().ToLower(); if (memberName == "length") { throw new VarTypeMemberException("'length' cannot be modified."); } int index; if (HarloweUtils.TryPositionToIndex(memberName, Values.Count, out index)) { try { Values.RemoveAt(index); } catch (System.IndexOutOfRangeException) { throw new VarTypeMemberException(string.Format("The array doesn't have a {0} position.", memberName)); } } else { throw new VarTypeMemberException(string.Format("The array doesn't have a member called {0}.", memberName)); } }