示例#1
0
        private static Boolean OrdenTopologicoVisitar(IContextoPersistencia[] contextos,
                                                      HashSet<IContextoPersistencia> disponibles,
                                                      HashSet<IContextoPersistencia> temporario,
                                                      List<IContextoPersistencia> topologico,
                                                      IContextoPersistencia nodo)
        {
            if (temporario.Contains(nodo))
                return false;

            if (!disponibles.Contains(nodo))
                return true;

            temporario.Add(nodo);

            foreach (var contexto in contextos)
                if (contexto.Dependencias.Contains(nodo.TipoElemento))
                    if (!OrdenTopologicoVisitar(contextos, disponibles, temporario, topologico, contexto))
                        return false;

            temporario.Remove(nodo);
            disponibles.Remove(nodo);
            topologico.Add(nodo);

            return true;
        }
示例#2
0
        private static List<IContextoPersistencia> OrdenTopologico(IContextoPersistencia[] contextos)
        {
            var disponibles = new HashSet<IContextoPersistencia>(contextos);
            var temporario = new HashSet<IContextoPersistencia>();
            var topologico = new List<IContextoPersistencia>(contextos.Length);

            while (disponibles.Count > 0)
            {
                var nodo = disponibles.First();

                if (!OrdenTopologicoVisitar(contextos, disponibles, temporario, topologico, nodo))
                    throw new ArgumentException("no es DAG");
            }

            topologico.Reverse();

            return topologico;
        }
 /// <sumary>
 /// Inicia uma nova instância da classe <see cref"ServicoConsultaProcessos" />
 /// </sumary>
 /// <param name="umContextoPersistencia">um implementação da interface <see cref="IContextoPersistencia"/></param>
 /// <param name="umLogger">um implementação da interface <see cref="ILogger"/></param>
 public ServicoConsultaProcessos(IContextoPersistencia umContextoPersistencia, ILogger umLogger)
 {
     this.contextoPersistencia = umContextoPersistencia;
     this.logger = umLogger;
 }
 public MongoDBRepositorioResponsaveis(IContextoPersistencia umContextoPersistencia, ILogger umLogger)
 {
     this.contextoPersistencia = umContextoPersistencia;
     this.logger = umLogger;
 }
 public ServicoConsultaResponsaveis(IContextoPersistencia umContextoPersistencia, ILogger umLogger)
 {
     this.contextoPersistencia = umContextoPersistencia;
     this.logger = umLogger;
 }
示例#6
0
 public MongoDBRepositorioProcessos(IContextoPersistencia umContextoPersistencia, ILogger umLogger)
 {
     this.contextoPersistencia = umContextoPersistencia;
     this.logger = umLogger;
 }