Exemple #1
0
        public override object Read(ES3Reader reader)
        {
            var list = new List <object>();

            if (!ReadICollection(reader, list, elementType))
            {
                return(null);
            }

            var array = ES3Reflection.ArrayCreateInstance(elementType.type, list.Count);
            int i     = 0;

            foreach (var item in list)
            {
                array.SetValue(item, i);
                i++;
            }

            return(array);

            /*var instance = new List<object>();
             *
             *          if(reader.StartReadCollection())
             *                  return null;
             *
             *          // Iterate through each character until we reach the end of the array.
             *          while(true)
             *          {
             *                  if(!reader.StartReadCollectionItem())
             *                          break;
             *                  instance.Add(reader.Read<object>(elementType));
             *
             *                  if(reader.EndReadCollectionItem())
             *                          break;
             *          }
             *
             *          reader.EndReadCollection();
             *
             *          var array = ES3Reflection.ArrayCreateInstance(elementType.type, instance.Count);
             *          int i = 0;
             *          foreach(var item in instance)
             *          {
             *                  array.SetValue(item, i);
             *                  i++;
             *          }
             *
             *          return array;*/
        }
Exemple #2
0
        public override object Read(ES3Reader reader)
        {
            if (reader.StartReadCollection())
            {
                return(null);
            }

            // Create a List to store the items as a 1D array, which we can work out the positions of by calculating the lengths of the two dimensions.
            var items   = new List <object>();
            int length1 = 0;

            // Iterate through each character until we reach the end of the array.
            while (true)
            {
                if (!reader.StartReadCollectionItem())
                {
                    break;
                }

                ReadICollection <object>(reader, items, elementType);
                length1++;

                if (reader.EndReadCollectionItem())
                {
                    break;
                }
            }

            int length2 = items.Count / length1;

            var array = ES3Reflection.ArrayCreateInstance(elementType.type, new int[] { length1, length2 });

            for (int i = 0; i < length1; i++)
            {
                for (int j = 0; j < length2; j++)
                {
                    array.SetValue(items[(i * length2) + j], i, j);
                }
            }

            return(array);
        }
Exemple #3
0
        public override object Read(ES3Reader reader)
        {
            var instance = new List <object>();

            if (reader.StartReadCollection())
            {
                return(null);
            }

            // Iterate through each character until we reach the end of the array.
            while (true)
            {
                if (!reader.StartReadCollectionItem())
                {
                    break;
                }
                instance.Add(reader.Read <object>(elementType));

                if (reader.EndReadCollectionItem())
                {
                    break;
                }
            }

            reader.EndReadCollection();

            var array = ES3Reflection.ArrayCreateInstance(elementType.type, instance.Count);
            int i     = 0;

            foreach (var item in instance)
            {
                array.SetValue(item, i);
                i++;
            }

            return(array);
        }