Пример #1
0
        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));
        }
Пример #2
0
        void EnsureNotPosition(string memberName)
        {
            int index;

            if (HarloweUtils.TryPositionToIndex(memberName, Values.Count, out index))
            {
                throw new VarTypeMemberException("Datasets can't be accessed by position.");
            }
        }
Пример #3
0
        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));
        }
Пример #4
0
        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));
            }
        }