Blade.Compiler.Translation.ClassSorter.Sort C# (CSharp) Метод

Sort() публичный статический Метод

public static Sort ( IEnumerable input ) : IEnumerable
input IEnumerable
Результат IEnumerable
        public static IEnumerable<ClassDeclaration> Sort(IEnumerable<ClassDeclaration> input)
        {
            if (input == null)
                yield break;

            // alpha order by default.
            var list = input.OrderBy(c => c.Definition.GetFullName()).ToList();

            for (int i = 0; i < list.Count; i++)
            {
                // items with no dependencies
                if (!HasDependencies(list[i]))
                {
                    yield return list[i];
                    list.Remove(list[i]);
                    i--;
                }
            }

            // items in dependency order
            var target = list.FirstOrDefault();
            while (target != null)
            {
                var next = target;
                while (next != null)
                {
                    target = next;
                    next = list.SingleOrDefault(c => c.Definition.GetFullName() == next.Definition.BaseClass.GetFullName());
                }

                yield return target;
                list.Remove(target);

                target = list.FirstOrDefault();
            }
        }

Usage Example

Пример #1
0
        /// <summary>
        /// Executes the translation process.
        /// </summary>
        /// <param name="context">The compilation context.</param>
        public void Execute(CompilationContext context)
        {
            if (context == null || context.Model == null)
            {
                return;
            }

            if (context.OutputStream == null || !context.OutputStream.CanWrite)
            {
                throw new CompilationException("The translation output stream is null or not writable.");
            }

            var translationCtx = new TranslationContext();

            translationCtx.OutputStream = context.OutputStream;

            // write enum declarations
            var enumTranslator = new EnumTranslator();

            foreach (var item in context.Model.Enums)
            {
                enumTranslator.Translate(item, translationCtx);
            }

            // write class declarations
            var classTranslator = new ClassTranslator();

            foreach (var item in ClassSorter.Sort(context.Model.Classes))
            {
                classTranslator.Translate(item, translationCtx);
            }

            // write global statements
            if (context.Model.GlobalStatements.Any())
            {
                translationCtx.WriteLine();
                translationCtx.IsWritingGlobalStatements = true;
                foreach (var item in context.Model.GlobalStatements)
                {
                    translationCtx.WriteModel(item);
                }
                translationCtx.IsWritingGlobalStatements = false;
            }
        }