示例#1
0
        public async Task <int> CompareTo(File file, FileAttribs option)
        {
            switch (option)
            {
            case FileAttribs.Name:
                return(this.Name.CompareTo(file.Name));

            case FileAttribs.DateCreated:
                return(this.DateCreated.CompareTo(file.DateCreated));

            case FileAttribs.DateModified:
                return(this.DateModifyed.CompareTo(file.DateModifyed));

            case FileAttribs.Content:
                if (this.Size < file.Size)
                {
                    return(-1);
                }
                if (this.Size > file.Size)
                {
                    return(1);
                }
                //int i = await CompareFileContent(this, file);
                return(await CompareFileContent(this, file));    //i;

            case FileAttribs.Size:
                return(this.Size.CompareTo(file.Size));
            }
            return(0);
        }
        /// <summary>
        /// Реализует алгоритм сортировки спика файлов по заданному аттрибуту
        /// </summary>
        /// <param name="files"></param>
        /// <param name="firstindex"></param>
        /// <param name="lastindex"></param>
        /// <param name="option"></param>
        /// <returns></returns>
        public async Task SortByAttribute(int firstindex, int lastindex, FileAttribs option)
        {
            if (firstindex >= lastindex)
            {
                return;
            }

            int c = await SortPass(firstindex, lastindex, option);

            await SortByAttribute(firstindex, c - 1, option);
            await SortByAttribute(c + 1, lastindex, option);
        }
        /// <summary>
        /// Одиночный проход сортировки
        /// </summary>
        /// <param name="files"></param>
        /// <param name="firstindex"></param>
        /// <param name="lastindex"></param>
        /// <param name="compareattrib"></param>
        /// <returns></returns>
        private async Task <int> SortPass(int firstindex, int lastindex, FileAttribs compareattrib)
        {
            int i = firstindex;

            for (int j = i; j <= lastindex; j++)
            {
                int compareResult = await _files[j].CompareTo(_files[lastindex], compareattrib);
                if (compareResult <= 0)
                {
                    File t = _files[i];
                    _files[i] = _files[j];
                    _files[j] = t;
                    ++i;
                }
            }
            return(i - 1);
        }
 public GroupingAttribute(string name, FileAttribs attribute, int weight)
 {
     Name      = name;
     Attribute = attribute;
     //Weight = weight;
 }