예제 #1
0
 public RowEnumerator(ReadOnlySpan <char> str, ParseRowFunc <T> parseRowFunc, char rowSeparator = '\n', char columnSeparator = ',')
 {
     rowsEnumerator       = str.FastSplit(rowSeparator);
     this.parseRowFunc    = parseRowFunc;
     this.columnSeparator = columnSeparator;
     Current  = default;
     rowIndex = 0;
 }
예제 #2
0
        public static List <string> ConvertStringList(this SplitEnumerator typeEnumerator, int count)
        {
            List <string> list = new(count);

            foreach (ReadOnlySpan <char> span in typeEnumerator)
            {
                list.Add(span.ToString());
            }

            return(list);
        }
예제 #3
0
        public static List <short> ConvertInt16List(this SplitEnumerator typeEnumerator, int count)
        {
            List <short> list = new(count);

            foreach (ReadOnlySpan <char> span in typeEnumerator)
            {
                list.Add(span.ParseInt16());
            }

            return(list);
        }
예제 #4
0
        public static List <decimal> ConvertDecimalList(this SplitEnumerator typeEnumerator, int count)
        {
            List <decimal> list = new(count);

            foreach (ReadOnlySpan <char> span in typeEnumerator)
            {
                list.Add(span.ParseDecimal());
            }

            return(list);
        }
예제 #5
0
        public static List <float> ConvertSingleList(this SplitEnumerator typeEnumerator, int count)
        {
            List <float> list = new(count);

            foreach (ReadOnlySpan <char> span in typeEnumerator)
            {
                list.Add(span.ParseSingle());
            }

            return(list);
        }
예제 #6
0
        public static List <ulong> ConvertUInt64List(this SplitEnumerator typeEnumerator, int count)
        {
            List <ulong> list = new(count);

            foreach (ReadOnlySpan <char> span in typeEnumerator)
            {
                list.Add(span.ParseUInt64());
            }

            return(list);
        }
예제 #7
0
        public static List <char> ConvertCharList(this SplitEnumerator typeEnumerator, int count)
        {
            List <char> list = new(count);

            foreach (ReadOnlySpan <char> span in typeEnumerator)
            {
                list.Add(span[0]);
            }

            return(list);
        }
예제 #8
0
        public static ushort[] ConvertUInt16Array(this SplitEnumerator typeEnumerator, int count)
        {
            ushort[] array = new ushort[count];

            int i = 0;

            foreach (ReadOnlySpan <char> span in typeEnumerator)
            {
                array[i++] = span.ParseUInt16();
            }

            return(array);
        }
예제 #9
0
        public static string[] ConvertStringArray(this SplitEnumerator typeEnumerator, int count)
        {
            string[] array = new string[count];

            int i = 0;

            foreach (ReadOnlySpan <char> span in typeEnumerator)
            {
                array[i++] = span.ToString();
            }

            return(array);
        }
예제 #10
0
        public static char[] ConvertCharArray(this SplitEnumerator typeEnumerator, int count)
        {
            char[] array = new char[count];

            int i = 0;

            foreach (ReadOnlySpan <char> span in typeEnumerator)
            {
                array[i++] = span[0];
            }

            return(array);
        }
예제 #11
0
        public static float[] ConvertSingleArray(this SplitEnumerator typeEnumerator, int count)
        {
            float[] array = new float[count];

            int i = 0;

            foreach (ReadOnlySpan <char> span in typeEnumerator)
            {
                array[i++] = span.ParseSingle();
            }

            return(array);
        }
예제 #12
0
        public static long[] ConvertInt64Array(this SplitEnumerator typeEnumerator, int count)
        {
            long[] array = new long[count];

            int i = 0;

            foreach (ReadOnlySpan <char> span in typeEnumerator)
            {
                array[i++] = span.ParseInt64();
            }

            return(array);
        }
예제 #13
0
        public static byte[] ConvertByteArray(this SplitEnumerator typeEnumerator, int count)
        {
            byte[] array = new byte[count];

            int i = 0;

            foreach (ReadOnlySpan <char> span in typeEnumerator)
            {
                array[i++] = span.ParseByte();
            }

            return(array);
        }
예제 #14
0
        public static decimal[] ConvertDecimalArray(this SplitEnumerator typeEnumerator, int count)
        {
            decimal[] array = new decimal[count];

            int i = 0;

            foreach (ReadOnlySpan <char> span in typeEnumerator)
            {
                array[i++] = span.ParseDecimal();
            }

            return(array);
        }
예제 #15
0
        private static object CreateComplex(this Type propertyType, SplitEnumerator propertyNameEnumerator, SplitEnumerator valueEnumerator)
        {
            ObjectAccessor?semiAccessor = ObjectAccessor.Create(Activator.CreateInstance(propertyType) !);
            ReadOnlyDictionary <string, Type> typeMap = TypeNameMap.GetOrCreate(propertyType);

            foreach (ReadOnlySpan <char> readOnlySpan in valueEnumerator)
            {
                propertyNameEnumerator.MoveNext();
                string currentName = propertyNameEnumerator.Current.ToString();
                semiAccessor[currentName] = typeMap[currentName].ConvertSpan(readOnlySpan);
            }

            return(semiAccessor.Target !);
        }
예제 #16
0
            //****************************************

            internal SplitSingleEnumerator(ReadOnlySpan <T> sequence, T separator, bool omitEmpty)
            {
                _Separator = separator;

                // We can create a Span from an internal field safely here, since this is a Ref struct
                _Enumerator = new SplitEnumerator <T>(sequence, default, omitEmpty);
예제 #17
0
        public static object ConvertArray(this SplitEnumerator typeEnumerator, Type containedType, int count)
        {
            if (containedType == typeof(bool))
            {
                return(typeEnumerator.ConvertBoolArray(count));
            }

            if (containedType == typeof(byte))
            {
                return(typeEnumerator.ConvertByteArray(count));
            }

            if (containedType == typeof(sbyte))
            {
                return(typeEnumerator.ConvertSByteArray(count));
            }

            if (containedType == typeof(char))
            {
                return(typeEnumerator.ConvertCharArray(count));
            }

            if (containedType == typeof(decimal))
            {
                return(typeEnumerator.ConvertDecimalArray(count));
            }

            if (containedType == typeof(double))
            {
                return(typeEnumerator.ConvertDoubleArray(count));
            }

            if (containedType == typeof(float))
            {
                return(typeEnumerator.ConvertSingleArray(count));
            }

            if (containedType == typeof(int))
            {
                return(typeEnumerator.ConvertInt32Array(count));
            }

            if (containedType == typeof(uint))
            {
                return(typeEnumerator.ConvertUInt32Array(count));
            }

            if (containedType == typeof(long))
            {
                return(typeEnumerator.ConvertInt64Array(count));
            }

            if (containedType == typeof(ulong))
            {
                return(typeEnumerator.ConvertUInt64Array(count));
            }

            if (containedType == typeof(short))
            {
                return(typeEnumerator.ConvertInt16Array(count));
            }

            if (containedType == typeof(ushort))
            {
                return(typeEnumerator.ConvertUInt32Array(count));
            }

            if (containedType == typeof(string))
            {
                return(typeEnumerator.ConvertStringArray(count));
            }

            Array array = Array.CreateInstance(containedType, count);

            int i = 0;

            foreach (ReadOnlySpan <char> span in typeEnumerator)
            {
                array.SetValue(containedType.ConvertSpan(span), i++);
            }

            return(array);
        }
예제 #18
0
        public static object ConvertList(this SplitEnumerator typeEnumerator, Type containedType, Type collectionType, int count)
        {
            if (containedType == typeof(bool))
            {
                return(typeEnumerator.ConvertBoolList(count));
            }

            if (containedType == typeof(byte))
            {
                return(typeEnumerator.ConvertByteList(count));
            }

            if (containedType == typeof(sbyte))
            {
                return(typeEnumerator.ConvertSByteList(count));
            }

            if (containedType == typeof(char))
            {
                return(typeEnumerator.ConvertCharList(count));
            }

            if (containedType == typeof(decimal))
            {
                return(typeEnumerator.ConvertDecimalList(count));
            }

            if (containedType == typeof(double))
            {
                return(typeEnumerator.ConvertDoubleList(count));
            }

            if (containedType == typeof(float))
            {
                return(typeEnumerator.ConvertSingleList(count));
            }

            if (containedType == typeof(int))
            {
                return(typeEnumerator.ConvertInt32List(count));
            }

            if (containedType == typeof(uint))
            {
                return(typeEnumerator.ConvertUInt32List(count));
            }

            if (containedType == typeof(long))
            {
                return(typeEnumerator.ConvertInt64List(count));
            }

            if (containedType == typeof(ulong))
            {
                return(typeEnumerator.ConvertUInt64List(count));
            }

            if (containedType == typeof(short))
            {
                return(typeEnumerator.ConvertInt16List(count));
            }

            if (containedType == typeof(ushort))
            {
                return(typeEnumerator.ConvertUInt32List(count));
            }

            if (containedType == typeof(string))
            {
                return(typeEnumerator.ConvertStringList(count));
            }

            IList list = (IList)Activator.CreateInstance(collectionType, count) !;

            foreach (ReadOnlySpan <char> span in typeEnumerator)
            {
                list.Add(containedType.ConvertSpan(span));
            }

            return(list);
        }