コード例 #1
0
            /// <summary>
            /// 嵌套类型处理
            /// </summary>
            /// <param name="type">类型</param>
            /// <param name="reflectedType">上层类型</param>
            internal void ReflectedType(Type type, Type reflectedType)
            {
                LeftArray <Type> reflectedTypeList = default(LeftArray <Type>);

                do
                {
                    reflectedTypeList.Add(reflectedType);
                    reflectedType = reflectedType.ReflectedType;
                }while (reflectedType != null);
                Type[] reflectedTypeArray = reflectedTypeList.Array;
                int    reflectedTypeIndex = reflectedTypeList.Length - 1;

                reflectedType = reflectedTypeArray[reflectedTypeIndex];
                NameStream.WriteNotNull(reflectedType.Namespace);
                do
                {
                    NameStream.Write('.');
                    NameStream.SimpleWriteNotNull(reflectedType.Name);
                    if (reflectedTypeIndex == 0)
                    {
                        reflectedType = type;
                        type          = null;
                    }
                    else
                    {
                        reflectedType = reflectedTypeArray[--reflectedTypeIndex];
                    }
                }while (reflectedType != null);
            }
コード例 #2
0
 public static valueType[] GetSort/*Compare[0]*//*Compare[0]*/ <valueType>(this LeftArray <valueType> array, Func <valueType, /*Type[0]*/ double /*Type[0]*/> getKey)
 {
     if (array.Length > 1)
     {
         return(AutoCSer.Algorithm.FixedArrayQuickSort.GetSort/*Compare[0]*//*Compare[0]*/ (array.Array, getKey, 0, array.Length));
     }
     return(array.Length == 0 ? NullValue <valueType> .Array : new valueType[] { array.Array[0] });
 }
コード例 #3
0
 public static LeftArray </*Type[0]*/ ulong /*Type[0]*/> reverse(this LeftArray </*Type[0]*/ ulong /*Type[0]*/> array)
 {
     if (array.Length > 1)
     {
         FixedArray.Reverse(array.Array, 0, array.Length);
     }
     return(array);
 }
コード例 #4
0
 public static /*Type[0]*/ ulong /*Type[0]*/[] getReverse(this LeftArray </*Type[0]*/ ulong /*Type[0]*/> array)
 {
     if (array.Length == 0)
     {
         return(NullValue </*Type[0]*/ ulong /*Type[0]*/> .Array);
     }
     return(FixedArray.GetReverse(array.Array, 0, array.Length));
 }
コード例 #5
0
        /// <summary>
        /// 根据集合内容返回数组
        /// </summary>
        /// <typeparam name="valueType">数据类型</typeparam>
        /// <typeparam name="arrayType">目标数据类型</typeparam>
        /// <param name="values">数据集合</param>
        /// <param name="getValue">获取数据数组</param>
        /// <param name="size">数据容器初始化大小</param>
        /// <returns>数组</returns>
        public static LeftArray <arrayType> getLeftArray <valueType, arrayType>(this IEnumerable <valueType> values, Func <valueType, arrayType> getValue, int size = 0)
        {
            if (values == null)
            {
                return(default(LeftArray <arrayType>));
            }
            LeftArray <arrayType> array = new LeftArray <arrayType>(size);

            foreach (valueType value in values)
            {
                array.Add(getValue(value));
            }
            return(array);
        }
コード例 #6
0
        /// <summary>
        /// 替换数据
        /// </summary>
        /// <param name="array">数组数据</param>
        /// <param name="value">新值</param>
        /// <param name="isValue">数据匹配器</param>
        public static LeftArray </*Type[0]*/ ulong /*Type[0]*/> replaceFirst(this LeftArray </*Type[0]*/ ulong /*Type[0]*/> array, /*Type[0]*/ ulong /*Type[0]*/ value, Func </*Type[0]*/ ulong /*Type[0]*/, bool> isValue)
        {
            if (array.Length != 0)
            {
                fixed(/*Type[0]*/ ulong /*Type[0]*/ *valueFixed = array.Array)
                {
                    /*Type[0]*/
                    ulong /*Type[0]*/ *valueIndex = FixedArray.IndexOf(valueFixed, array.Length, isValue);

                    if (valueIndex != null)
                    {
                        *valueIndex = value;
                    }
                }
            }
            return(array);
        }
コード例 #7
0
        /// <summary>
        /// 获取第一个匹配值
        /// </summary>
        /// <param name="array">数组数据</param>
        /// <param name="isValue">数据匹配器</param>
        /// <param name="index">起始位置</param>
        /// <returns>第一个匹配值,失败为default(/*Type[0]*/ulong/*Type[0]*/)</returns>
        public static /*Type[0]*/ ulong /*Type[0]*/ firstOrDefault(this LeftArray </*Type[0]*/ ulong /*Type[0]*/> array, Func </*Type[0]*/ ulong /*Type[0]*/, bool> isValue, int index)
        {
            if ((uint)index < (uint)array.Length)
            {
                fixed(/*Type[0]*/ ulong /*Type[0]*/ *valueFixed = array.Array)
                {
                    /*Type[0]*/
                    ulong /*Type[0]*/ *valueIndex = FixedArray.IndexOf(valueFixed + index, array.Length - index, isValue);

                    if (valueIndex != null)
                    {
                        return(*valueIndex);
                    }
                }
            }
            return(default(/*Type[0]*/ ulong /*Type[0]*/));
        }
コード例 #8
0
        /// <summary>
        /// 获取匹配数据位置
        /// </summary>
        /// <param name="array">数据数组</param>
        /// <param name="isValue">数据匹配器</param>
        /// <returns>匹配位置,失败为-1</returns>
        public static int indexOf(this LeftArray </*Type[0]*/ ulong /*Type[0]*/> array, Func </*Type[0]*/ ulong /*Type[0]*/, bool> isValue)
        {
            if (array.Length != 0)
            {
                fixed(/*Type[0]*/ ulong /*Type[0]*/ *valueFixed = array.Array)
                {
                    /*Type[0]*/
                    ulong /*Type[0]*/ *index = FixedArray.IndexOf(valueFixed, array.Length, isValue);

                    if (index != null)
                    {
                        return((int)(index - valueFixed));
                    }
                }
            }
            return(-1);
        }
コード例 #9
0
        /// <summary>
        /// 获取匹配数组
        /// </summary>
        /// <param name="array">数组数据</param>
        /// <param name="isValue">数据匹配器</param>
        /// <returns>匹配数组</returns>
        public static /*Type[0]*/ ulong /*Type[0]*/[] getFindArray(this LeftArray </*Type[0]*/ ulong /*Type[0]*/> array, Func </*Type[0]*/ ulong /*Type[0]*/, bool> isValue)
        {
            if (array.Length == 0)
            {
                return(NullValue </*Type[0]*/ ulong /*Type[0]*/> .Array);
            }
            int           length = ((array.Length + 63) >> 6) << 3;
            UnmanagedPool pool   = AutoCSer.UnmanagedPool.GetDefaultPool(length);

            Pointer.Size data = pool.GetSize64(length);
            try
            {
                Memory.ClearUnsafe(data.ULong, length >> 3);
                return(FixedArray.GetFindArray(array.Array, 0, array.Length, isValue, new MemoryMap(data.Data)));
            }
            finally { pool.PushOnly(ref data); }
        }
コード例 #10
0
ファイル: Array.cs プロジェクト: zhangzheng1205/AutoCSer
 public static void joinString(this LeftArray <int> array, CharStream stream, char join, string nullString = null)
 {
     if (nullString == null)
     {
         nullString = string.Empty;
     }
     if (array.Length == 0)
     {
         if (nullString.Length != 0)
         {
             stream.WriteNotNull(nullString);
         }
     }
     else
     {
         AutoCSer.NumberToCharStream.Join <int> .NumberJoinChar(stream, array.Array, 0, array.Length, join, nullString);
     }
 }
コード例 #11
0
ファイル: LeftArray.cs プロジェクト: zhangzheng1205/AutoCSer
 /// <summary>
 /// 获取匹配数量
 /// </summary>
 /// <typeparam name="valueType"></typeparam>
 /// <param name="values">数组子串</param>
 /// <param name="isValue">数据匹配器</param>
 /// <returns>匹配数量</returns>
 public static int GetCount <valueType>(this LeftArray <valueType> values, Func <valueType, bool> isValue)
 {
     if (values.Length != 0)
     {
         int index = values.Length, count = 0;
         foreach (valueType value in values.Array)
         {
             if (isValue(value))
             {
                 ++count;
             }
             if (--index == 0)
             {
                 break;
             }
         }
         return(count);
     }
     return(0);
 }
コード例 #12
0
        /// <summary>
        /// 数组类型转换
        /// </summary>
        /// <typeparam name="valueType">数据类型</typeparam>
        /// <param name="subArray">数据数组</param>
        /// <param name="getValue">数据获取器</param>
        /// <returns>目标数组</returns>
        public static /*Type[0]*/ ulong /*Type[0]*/[] getArray <valueType>(this LeftArray <valueType> subArray, Func <valueType, /*Type[0]*/ ulong /*Type[0]*/> getValue)
        {
            if (subArray.Length == 0)
            {
                return(NullValue </*Type[0]*/ ulong /*Type[0]*/> .Array);
            }
            valueType[] array = subArray.Array;
            /*Type[0]*/
            ulong /*Type[0]*/[] newValues = new /*Type[0]*/ ulong /*Type[0]*/[subArray.Length];
            fixed(/*Type[0]*/ ulong /*Type[0]*/ *newValueFixed = newValues)
            {
                /*Type[0]*/
                ulong /*Type[0]*/ *write = newValueFixed;
                int index = 0;

                do
                {
                    *write++ = getValue(array[index++]);
                }while (index != subArray.Length);
            }

            return(newValues);
        }
コード例 #13
0
        /// <summary>
        /// 获取匹配集合
        /// </summary>
        /// <param name="array">数组数据</param>
        /// <param name="isValue">数据匹配器</param>
        /// <returns>匹配集合</returns>
        public static LeftArray </*Type[0]*/ ulong /*Type[0]*/> find(this LeftArray </*Type[0]*/ ulong /*Type[0]*/> array, Func </*Type[0]*/ ulong /*Type[0]*/, bool> isValue)
        {
            if (array.Length == 0)
            {
                return(array);

                fixed(/*Type[0]*/ ulong /*Type[0]*/ *valueFixed = array.Array)
                {
                    /*Type[0]*/
                    ulong /*Type[0]*/ *write = valueFixed, start = valueFixed, end = valueFixed + array.Length;

                    do
                    {
                        if (isValue(*start))
                        {
                            *write++ = *start;
                        }
                    }while (++start != end);
                    return(new LeftArray </*Type[0]*/ ulong /*Type[0]*/> {
                    Array = array.Array, Length = (int)(write - valueFixed)
                });
                }
        }
コード例 #14
0
        /// <summary>
        /// 获取匹配数量
        /// </summary>
        /// <param name="array">数组数据</param>
        /// <param name="isValue">数据匹配器</param>
        /// <returns>匹配数量</returns>
        public static int count(this LeftArray </*Type[0]*/ ulong /*Type[0]*/> array, Func </*Type[0]*/ ulong /*Type[0]*/, bool> isValue)
        {
            if (array.Length == 0)
            {
                return(0);
            }
            int value = 0;

            fixed(/*Type[0]*/ ulong /*Type[0]*/ *valueFixed = array.Array)
            {
                /*Type[0]*/
                ulong /*Type[0]*/ *start = valueFixed, end = valueFixed + array.Length;

                do
                {
                    if (isValue(*start))
                    {
                        ++value;
                    }
                }while (++start != end);
            }

            return(value);
        }
コード例 #15
0
ファイル: LeftArray.cs プロジェクト: zhangzheng1205/AutoCSer
 public static SubArray <valueType> GetRangeSort <valueType>
     (this LeftArray <valueType> values, Func <valueType, valueType, int> comparer, int skipCount, int getCount)
 {
     return(Array_Sort.GetRangeSort(values.Array, 0, values.Length, comparer, skipCount, getCount));
 }
コード例 #16
0
        public static SubArray </*Type[0]*/ ulong /*Type[0]*/> GetPageSort/*Compare[0]*//*Compare[0]*/ (this LeftArray </*Type[0]*/ ulong /*Type[0]*/> array, int pageSize, int currentPage)
        {
            PageCount page = new PageCount(array.Length, pageSize, currentPage);

            return(AutoCSer.Algorithm.FixedArrayQuickRangeSort.UnsafeGetRangeSort/*Compare[0]*//*Compare[0]*/ (array.Array, 0, array.Length, page.SkipCount, page.CurrentPageSize));
        }
コード例 #17
0
 public static LeftArray </*Type[0]*/ ulong /*Type[0]*/> getFind(this LeftArray </*Type[0]*/ ulong /*Type[0]*/> array, Func </*Type[0]*/ ulong /*Type[0]*/, bool> isValue)
 {
     return(array.Length == 0 ? default(LeftArray </*Type[0]*/ ulong /*Type[0]*/>) : FixedArray.GetFind(array.Array, 0, array.Length, isValue));
 }
コード例 #18
0
ファイル: LeftArray.cs プロジェクト: zhangzheng1205/AutoCSer
        public static valueType[] GetPageDesc <valueType>(this LeftArray <valueType> values, int pageSize, int currentPage, out int count)
        {
            PageCount page = new PageCount(count = values.Length, pageSize, currentPage);

            return(new SubArray <valueType>(page.DescSkipCount, page.CurrentPageSize, values.Array).GetReverse());
        }
コード例 #19
0
 public static /*Type[0]*/ ulong /*Type[0]*/[] getSort/*Compare[0]*//*Compare[0]*/ (this LeftArray </*Type[0]*/ ulong /*Type[0]*/> array)
 {
     return(array.Length > 1 ? FixedArraySort.GetSort/*Compare[0]*//*Compare[0]*/ (array.Array, 0, array.Length) : array.GetArray());
 }
コード例 #20
0
 public static valueType[] getSort/*Compare[0]*//*Compare[0]*/ <valueType>(this LeftArray <valueType> array, Func <valueType, /*Type[0]*/ ulong /*Type[0]*/> getKey)
 {
     return(array.Length > 1 ? FixedArraySort.GetSort/*Compare[0]*//*Compare[0]*/ (array.Array, getKey, 0, array.Length) : array.GetArray());
 }
コード例 #21
0
        public unsafe static DeSerializeResult deSerialize <valueType>(this valueType value, ref LeftArray <byte> data, DeSerializeConfig config = null)
        {
            if (data.Length == 0)
            {
                return new DeSerializeResult {
                           State = DeSerializeState.UnknownData
                }
            }
            ;

            fixed(byte *dataFixed = data.Array) return(DeSerializer.DeSerialize <valueType>(data.Array, dataFixed, data.Length, ref value, config));
        }
コード例 #22
0
 public static LeftArray </*Type[0]*/ ulong /*Type[0]*/> sort/*Compare[0]*//*Compare[0]*/ (this LeftArray </*Type[0]*/ ulong /*Type[0]*/> array)
 {
     if (array.Length > 1)
     {
         FixedArraySort.Sort/*Compare[0]*//*Compare[0]*/ (array.Array, 0, array.Length);
     }
     return(array);
 }
コード例 #23
0
 public static /*Type[0]*/ double /*Type[0]*/[] GetSort/*Compare[0]*//*Compare[0]*/ (this LeftArray </*Type[0]*/ double /*Type[0]*/> array)
 {
     return(AutoCSer.Algorithm.FixedArrayQuickSort.GetSort/*Compare[0]*//*Compare[0]*/ (array.Array, 0, array.Length));
 }
コード例 #24
0
ファイル: Array.cs プロジェクト: zhangzheng1205/AutoCSer
 public static string joinString <valueType>(this LeftArray <valueType> array, char join, string nullString = null)
 {
     return(AutoCSer.NumberToCharStream.Join <valueType> .JoinString(ref array, join, nullString));
 }
コード例 #25
0
 public static LeftArray </*Type[0]*/ double /*Type[0]*/> Sort/*Compare[0]*//*Compare[0]*/ (this LeftArray </*Type[0]*/ double /*Type[0]*/> array)
 {
     if (array.Length > 1)
     {
         AutoCSer.Algorithm.FixedArrayQuickSort.Sort/*Compare[0]*//*Compare[0]*/ (array.Array, 0, array.Length);
     }
     return(array);
 }
コード例 #26
0
 public static valueType[] GetRangeSort/*Compare[0]*//*Compare[0]*/ <valueType>(this LeftArray <valueType> array, Func <valueType, /*Type[0]*/ ulong /*Type[0]*/> getKey, int skipCount, int getCount)
 {
     return(array.Length == 0 ? NullValue <valueType> .Array : AutoCSer.Algorithm.FixedArrayQuickRangeSort.GetRangeSort/*Compare[0]*//*Compare[0]*/ (array.Array, 0, array.Length, getKey, skipCount, getCount));
 }
コード例 #27
0
 public static SubArray </*Type[0]*/ ulong /*Type[0]*/> GetRangeSort/*Compare[0]*//*Compare[0]*/ (this LeftArray </*Type[0]*/ ulong /*Type[0]*/> array, int skipCount, int getCount)
 {
     return(array.Length == 0 ? default(SubArray </*Type[0]*/ ulong /*Type[0]*/>) : AutoCSer.Algorithm.FixedArrayQuickRangeSort.GetRangeSort/*Compare[0]*//*Compare[0]*/ (array.Array, 0, array.Length, skipCount, getCount));
 }
コード例 #28
0
        public static returnType[] GetPageSort/*Compare[0]*//*Compare[0]*/ <valueType, returnType>(this LeftArray <valueType> array, Func <valueType, /*Type[0]*/ ulong /*Type[0]*/> getKey, int pageSize, int currentPage, Func <valueType, returnType> getValue, out int count)
        {
            PageCount page = new PageCount(count = array.Length, pageSize, currentPage);

            return(AutoCSer.Algorithm.FixedArrayQuickRangeSort.UnsafeGetRangeSort/*Compare[0]*//*Compare[0]*/ (array.Array, 0, count, getKey, page.SkipCount, page.CurrentPageSize, getValue));
        }
コード例 #29
0
            /// <summary>
            /// 泛型处理
            /// </summary>
            /// <param name="type">类型</param>
            internal void GenericFullName(Type type)
            {
                Type reflectedType = type.ReflectedType;

                if (reflectedType == null)
                {
                    if (type.GetGenericTypeDefinition() == typeof(Nullable <>))
                    {
                        getFullName(type.GetGenericArguments()[0]);
                        NameStream.Write('?');
                        return;
                    }
                    string name = type.Name;
                    NameStream.WriteNotNull(type.Namespace);
                    NameStream.Write('.');
                    NameStream.UnsafeWrite(name, 0, name.IndexOf(GenericSplit));
                    genericParameter(type);
                    return;
                }
                LeftArray <Type> reflectedTypeList = default(LeftArray <Type>);

                do
                {
                    reflectedTypeList.Add(reflectedType);
                    reflectedType = reflectedType.ReflectedType;
                }while (reflectedType != null);
                Type[] reflectedTypeArray = reflectedTypeList.Array;
                int    reflectedTypeIndex = reflectedTypeList.Length - 1;

                reflectedType = reflectedTypeArray[reflectedTypeIndex];
                NameStream.WriteNotNull(reflectedType.Namespace);
                Type[] parameterTypes = type.GetGenericArguments();
                int    parameterIndex = 0;

                do
                {
                    NameStream.Write('.');
                    if (reflectedType.IsGenericType)
                    {
                        string name       = reflectedType.Name;
                        int    splitIndex = name.IndexOf(GenericSplit);
                        if (splitIndex != -1)
                        {
                            NameStream.UnsafeWrite(name, 0, splitIndex);
                            int parameterCount = reflectedType.GetGenericArguments().Length;
                            genericParameter(parameterTypes, parameterIndex, parameterCount);
                            parameterIndex = parameterCount;
                        }
                        else
                        {
                            NameStream.WriteNotNull(name);
                        }
                    }
                    else
                    {
                        NameStream.SimpleWriteNotNull(reflectedType.Name);
                    }
                    if (reflectedTypeIndex == 0)
                    {
                        reflectedType = type;
                        type          = null;
                    }
                    else
                    {
                        reflectedType = reflectedTypeArray[--reflectedTypeIndex];
                    }
                }while (reflectedType != null);
            }