Пример #1
0
        public static LinksWrapper GetAllLinksInDomain(string urlAddress)
        {
            var normalLinks = new List <LinkResult>();
            var brokenLinks = new List <LinkResult>();
            var allStrLinks = GetAllStringLinksInDomain(urlAddress);

            foreach (var link in allStrLinks)
            {
                var linkResult = new LinkResult()
                {
                    Link = link, Status = GetStatusCode(link)
                };
                var statusCode = linkResult.Status;
                if (statusCode < BAD_REQUEST)
                {
                    normalLinks.Add(linkResult);
                }
                else
                {
                    brokenLinks.Add(linkResult);
                }
            }

            return(new LinksWrapper
            {
                NormalLinks = normalLinks,
                BrokenLinks = brokenLinks
            });
        }
Пример #2
0
        /// <summary>
        /// Processa a junção.
        /// </summary>
        /// <param name="query">Informações da consulta.</param>
        /// <param name="join">Informações do join.</param>
        private LinkResult ProcessJoin(QueryInfo query, JoinInfo join)
        {
            LinkResult endResult = ProcessLinkResult(query, join.Conditional);

            ;
            return(endResult);
        }
Пример #3
0
        private void ReportResult(LinkResult result)
        {
            LinkedFiles = result.LinkedFiles;
#if DEBUG
            var message = $"Successfully linked {result.LinkedFiles.Count} file(s)! ({result.Elapsed} ms)";
#else
            var message = $"Successfully linked {result.LinkedFiles.Count} file(s)!)";
#endif
            ShowInlineMessage(message, 5000);
        }
Пример #4
0
        public LinkResult GetLinks(int page)
        {
            var itemPerPage = _configuration.GetValue <int>("itemPerPage");

            var(linkList, count) = _linkRepository.GetLinks((page - 1) * itemPerPage, itemPerPage);
            var result = new LinkResult
            {
                PageInfo = new PageInfo
                {
                    CurrentPage = page,
                    MaxPage     = count % itemPerPage == 0 ? count / itemPerPage : count / itemPerPage + 1
                },
                Items = linkList
            };

            return(result);
        }
Пример #5
0
        /// <summary>
        /// Executa a consulta informada retornando resultado do cache.
        /// </summary>
        /// <param name="query">Informações da consulta</param>
        /// <returns>Resultado do cache</returns>
        public QueryResultSet ExecuteInCache(QueryInfo query)
        {
            query.Require("query").NotNull();
            string    commandText;
            Hashtable parameters;

            Parse(query, out commandText, out parameters);
            if (query.Entities.Length > 1)
            {
                LinkResult endResult = null;
                if (query.WhereClause != null && query.WhereClause.ConditionalsCount > 0)
                {
                    endResult = ProcessLinkResult(query, query.WhereClause);
                }
                else
                {
                    Parse(new QueryInfo {
                        Entities = new EntityInfo[] {
                            query.Entities.FirstOrDefault()
                        },
                    }, out commandText, out parameters);
                    var searchResult = _cacheProvider.Cache.Search(commandText, parameters);
                    endResult = Convert(searchResult, query.Entities.FirstOrDefault());
                }
                foreach (var join in query.Joins)
                {
                    var res = ProcessJoin(query, join);
                    endResult = Merge(join.Type == JoinType.Inner ? MergeType.Intersect : MergeType.LeftJoin, endResult, res);
                }
                if (endResult == null)
                {
                    string command = "SELECT " + query.Entities[0].FullName;
                    endResult = Convert(Cache.Search(command, parameters), query.Entities[0]);
                }
                var defaultEntityIndex = Array.IndexOf(endResult.Entities, query.Entities[0].FullName);
                if (defaultEntityIndex < 0)
                {
                    defaultEntityIndex = 0;
                }
                return(new MultipleKeysQueryResultSet(endResult, defaultEntityIndex));
            }
            else
            {
                return(Cache.Search(commandText, parameters));
            }
        }
Пример #6
0
        /// <summary>
        /// Links several files to create an executable (stored to dest).
        /// </summary>
        /// <param name="dest">the resulting executable (on success) (non-null)</param>
        /// <param name="files">the files to link. ".o" files are loaded as object files, otherwise treated as assembly source and assembled</param>
        /// <param name="entry_point">the main entry point</param>
        /// <param name="rootdir">the root directory to use for core file lookup - null for default</param>
        private static int Link(Executable dest, List <string> files, string entry_point, string rootdir)
        {
            var objs = new List <KeyValuePair <string, ObjectFile> >();

            // load the stdlib files
            int ret = LoadStdlibObjs(objs, rootdir);

            if (ret != 0)
            {
                return(ret);
            }

            // load the provided files
            foreach (string file in files)
            {
                // treat ".o" as object file, otherwise as assembly source
                ObjectFile obj = new ObjectFile();
                ret = file.EndsWith(".o") ? LoadObjectFile(file, obj) : Assemble(file, obj);
                if (ret != 0)
                {
                    return(ret);
                }
                objs.Add(new KeyValuePair <string, ObjectFile>(file, obj));
            }

            // link the resulting object files into an executable
            LinkResult res = Assembly.Link(dest, objs.ToArray(), entry_point);

            // if there was an error, show error message
            if (res.Error != LinkError.None)
            {
                Console.Error.WriteLine($"Link Error:\n{res.ErrorMsg}");
                return((int)res.Error);
            }

            return(0);
        }
        private Task <LinkResult> CreateTask(FluentConfiguration fluentConfiguration, HttpWebRequest webRequest, string originalUrl)
        {
            return(Task <LinkResult> .Factory.StartNew(() =>
            {
                if (fluentConfiguration.Bot != null)
                {
                    fluentConfiguration.Bot.OnRequest(webRequest);
                }

                _beforeConfigurers.ForEach(x => x(webRequest));

                var result = new LinkResult {
                    Url = new Uri(originalUrl, UriKind.RelativeOrAbsolute)
                };
                HttpWebResponse webResponse = null;
                try
                {
                    webResponse = (HttpWebResponse)webRequest.GetResponse();
                    result.StatusCode = webResponse.StatusCode;
                }
                catch (WebException we)
                {
                    result.StatusCode = we.Response != null ? ((HttpWebResponse)we.Response).StatusCode : HttpStatusCode.NotFound;
                }
                finally
                {
                    if (webResponse != null)
                    {
                        _afterConfigurers.ForEach(x => x(webResponse));
                        webResponse.Close();
                    }
                }

                return result;
            }));
        }
Пример #8
0
        public async Task <ProcessResult> ObjCopy(IConsole console, IProject project, LinkResult linkResult, AssemblyFormat format)
        {
            var result = new ProcessResult();

            var commandName = Path.Combine(BinDirectory, $"{SizePrefix}objcopy" + Platform.ExecutableExtension);

            if (PlatformSupport.CheckExecutableAvailability(commandName, BinDirectory))
            {
                string formatArg = "binary";

                switch (format)
                {
                case AssemblyFormat.Binary:
                    formatArg = "binary";
                    break;

                case AssemblyFormat.IntelHex:
                    formatArg = "ihex";
                    break;
                }

                string outputExtension = ".bin";

                switch (format)
                {
                case AssemblyFormat.Binary:
                    outputExtension = ".bin";
                    break;

                case AssemblyFormat.IntelHex:
                    outputExtension = ".hex";
                    break;

                case AssemblyFormat.Elf32:
                    outputExtension = ".elf";
                    break;
                }

                var arguments = $"-O {formatArg} {linkResult.Executable} {Path.GetDirectoryName(linkResult.Executable)}{Platform.DirectorySeperator}{Path.GetFileNameWithoutExtension(linkResult.Executable)}{outputExtension}";

                console.WriteLine($"Converting to {format.ToString()}");

                result.ExitCode = PlatformSupport.ExecuteShellCommand(commandName, arguments, (s, e) => console.WriteLine(e.Data), (s, e) => console.WriteLine(e.Data), false, string.Empty, false);
            }
            else
            {
                console.WriteLine("Unable to find tool (" + commandName + ") check project compiler settings.");
                result.ExitCode = -1;
            }

            return(result);
        }
Пример #9
0
 public override async Task <bool> PostBuild(IConsole console, IProject project, LinkResult linkResult)
 {
     return(true);
 }
Пример #10
0
        public override async Task<bool> PostBuild(IConsole console, IProject project, LinkResult linkResult)
        {
            if((project is IStandardProject) && (project as IStandardProject).Type == ProjectType.Executable)
            {
                var result = await ObjCopy(console, project, linkResult, AssemblyFormat.Binary);

                if (result.ExitCode == 0)
                {
                    result = await ObjCopy(console, project, linkResult, AssemblyFormat.IntelHex);
                }

                return result.ExitCode == 0;
            }


            return true;
        }
Пример #11
0
        public async Task<ProcessResult> ObjCopy(IConsole console, IProject project, LinkResult linkResult, AssemblyFormat format)
        {
            var result = new ProcessResult();

            var commandName = Path.Combine(BinDirectory, $"{SizePrefix}objcopy" + Platform.ExecutableExtension);

            if(PlatformSupport.CheckExecutableAvailability(commandName, BinDirectory))
            {
                string formatArg = "binary";

                switch (format)
                {
                    case AssemblyFormat.Binary:
                        formatArg = "binary";
                        break;

                    case AssemblyFormat.IntelHex:
                        formatArg = "ihex";
                        break;
                }

                string outputExtension = ".bin";

                switch (format)
                {
                    case AssemblyFormat.Binary:
                        outputExtension = ".bin";
                        break;

                    case AssemblyFormat.IntelHex:
                        outputExtension = ".hex";
                        break;

                    case AssemblyFormat.Elf32:
                        outputExtension = ".elf";
                        break;
                }

                var arguments = $"-O {formatArg} {linkResult.Executable} {Path.GetDirectoryName(linkResult.Executable)}{Platform.DirectorySeperator}{Path.GetFileNameWithoutExtension(linkResult.Executable)}{outputExtension}";

                console.WriteLine($"Converting to {format.ToString()}");

                result.ExitCode = PlatformSupport.ExecuteShellCommand(commandName, arguments, (s, e) => console.WriteLine(e.Data), (s, e) => console.WriteLine(e.Data), false, string.Empty, false);
            }
            else
            {
                console.WriteLine("Unable to find tool (" + commandName + ") check project compiler settings.");
                result.ExitCode = -1;
            }

            return result;
        }
Пример #12
0
        public static void UserEquilibriumMSA(XXE_DataStructures.ProjectData project, NetworkData network, List <LinkData> links, List <FreewayData> freewayfacilities, List <ODdata> OD, List <UserEquilibriumTimePeriodResult> results, List <List <List <double> > > RampProportionList)
        {
            Graph g = new Graph(network.NumNodes - network.FirstNetworkNode + 1);

            ConstructGraph(g, links, network.FirstNetworkNode);


            int numTPs = 1;

            for (int n = 0; n < freewayfacilities.Count; n++)
            {
                if (freewayfacilities[n].PhysicalLinkXXE == true)
                {
                    numTPs = freewayfacilities[n].TotalTimePeriods;
                }
            }
            UserEquilibriumTimePeriodResult timePeriodResult;


            for (int tp = 1; tp <= numTPs; tp++)
            {
                timePeriodResult = new UserEquilibriumTimePeriodResult();
                Iteration iteration;
                double[,] ShortPath  = new double[299, 299];
                double[,] ShortPath1 = new double[299, 299];
                double ObjFcn;  //value of BPR function
                bool   SolutionConverged = false;
                double DeltaFlows;
                double D;
                FL.Clear();
                FL.Add(newFL);                      //create the '0' index list entry, since loop starts with index '1'
                List <List <ODvolume> > ODvolumeLists = new List <List <ODvolume> >();
                //initialize shortest path from each origin to each destination to zero
                for (int i = 1; i <= network.NumZones; i++)
                {
                    for (int j = 1; j <= network.NumZones + 1; j++)
                    {
                        ShortPath[j, i]  = 0;
                        ShortPath1[j, i] = 0;
                    }
                }

                AllOrNothingMSA(tp, network.NumZones, network.NumNodes, FL, network, links, freewayfacilities, OD, RampProportionList, ODvolumeLists, ref ShortPath);
                IterNum = 0;

                ObjFcn = 0;

                for (int i = 1; i <= network.TotalLinks; i++)
                {
                    ObjFcn = ObjFcn + HCM_FF_Method.TravTimeFcnFreewayFacilities(RampProportionList[i - 1], freewayfacilities[i - 1], tp, FL[i]);
                }

                for (int i = 1; i <= network.NumZones; i++)
                {
                    for (int j = 1; j <= network.NumZones; j++)
                    {
                        ShortPath1[i, j] = ShortPath[i, j];
                    }
                }

                ConvValue = 2 * network.ConvCrit;   //initialize convergence value

                do
                {
                    IterNum++;
                    AllOrNothingMSA(tp, network.NumZones, network.NumNodes, NFL, network, links, freewayfacilities, OD, RampProportionList, ODvolumeLists, ref ShortPath);
                    MoveMSA(network, IterNum + 1);
                    ConvValue = 0;
                    ObjFcn    = 0;

                    List <double> TravelTimes = new List <double>();

                    for (int i = 1; i <= network.TotalLinks; i++)
                    {
                        double travelTime = HCM_FF_Method.TravTimeFcnFreewayFacilities(RampProportionList[i - 1], freewayfacilities[i - 1], tp, FL[i]);

                        ObjFcn = ObjFcn + travelTime * FL[i];
                        //TravelTimes.Add(travelTime);

                        DeltaFlows = Math.Abs(NFL[i] - FL[i]);      //difference between previous set of flows and current set of flows
                        if (DeltaFlows != 0)
                        {
                            D = NFL[i];
                            if (D == 0)
                            {
                                D = FL[i];
                            }
                            ConvValue = ConvValue + DeltaFlows / D;
                            FL.Add(newFL);
                            FL[i] = NFL[i];
                        }

                        TravelTimes.Add(HCM_FF_Method.TravTimeFcnFreewayFacilities(RampProportionList[i - 1], freewayfacilities[i - 1], tp, FL[i]));
                    }

                    ConvValue               = ConvValue / network.TotalLinks;
                    iteration               = new Iteration();
                    iteration.ObjFunction   = ObjFcn;
                    iteration.IternationNum = IterNum;
                    iteration.ConvergeValue = ConvValue;
                    IterationLinkVolume linkVolume;
                    for (int n = 1; n <= network.TotalLinks; n++)
                    {
                        if (links[n].PhysLink == true)
                        {
                            linkVolume          = new IterationLinkVolume();
                            linkVolume.ID       = n;
                            linkVolume.FromNode = links[n].FromNode;
                            linkVolume.ToNode   = links[n].ToNode;
                            linkVolume.Volume   = FL[n];
                            linkVolume.PhysLink = links[n].PhysLink;
                            iteration.LinkVolumes.Add(linkVolume);
                        }
                    }
                    timePeriodResult.TimePeriod = tp;
                    timePeriodResult.Iterations.Add(iteration);
                    timePeriodResult.IsConverged = false;

                    if (ConvValue <= network.ConvCrit || IterNum == network.MaxIterations)
                    {
                        if (ConvValue <= network.ConvCrit)
                        {
                            SolutionConverged            = true;
                            timePeriodResult.IsConverged = true;
                        }

                        timePeriodResult.NumIterations    = IterNum;
                        timePeriodResult.ConvergenceValue = ConvValue;
                        timePeriodResult.ObjFunctionValue = ObjFcn;
                        timePeriodResult.LinkResults.Clear();
                        LinkResult result;
                        for (int n = 1; n <= network.TotalLinks; n++)
                        {
                            if (links[n].PhysLink == true)
                            {
                                result                    = new LinkResult();
                                result.ID                 = n;
                                result.FromNode           = links[n].FromNode;
                                result.ToNode             = links[n].ToNode;
                                result.Volume             = FL[n];
                                result.PhysLink           = links[n].PhysLink;
                                result.TravelTime         = TravelTimes[n - 1];
                                result.VehMilesTravVolume = freewayfacilities[n - 1].Results[tp].VehMilesTravVolume;
                                result.VehMilesTravDemand = freewayfacilities[n - 1].Results[tp].VehMilesTravDemand;
                                result.VehHoursTrav       = freewayfacilities[n - 1].Results[tp].VehHoursTrav;
                                result.VehHoursDelay      = freewayfacilities[n - 1].Results[tp].VehHoursDelay;
                                result.DensityVeh         = freewayfacilities[n - 1].Results[tp].DensityVeh;
                                result.AvgSpeed           = freewayfacilities[n - 1].Results[tp].AvgSpeed;
                                result.DensityPC          = freewayfacilities[n - 1].Results[tp].DensityPC;
                                result.SegmentTravelTimes = GetSegmentTravelTimes(freewayfacilities[n - 1].TPsegs[tp]);
                                if (freewayfacilities[n - 1].PhysicalLinkXXE == true)
                                {
                                    result.FreeFlowTravelTime = freewayfacilities[n - 1].Results[tp].TravTimeFreeFlow;
                                    timePeriodResult.LinkResults.Add(result);
                                }
                            }
                        }
                    }
                } while ((SolutionConverged == false) && (IterNum < network.MaxIterations));

                for (int od = 1; od < OD.Count; od++) //the first od item has no values
                {
                    int PathFromNode = ZoneToNode(OD[od].OrigZone, links);
                    int PathToNode   = ZoneToNode(OD[od].DestZone, links);
                    if (PathFromNode > 0 && PathToNode > 0)
                    {
                        g.PathList = new List <List <int> >();
                        GetPathsFromOD(g, PathFromNode, PathToNode, network.FirstNetworkNode);
                        ODResult result = new ODResult();
                        result.Orig                   = OD[od].OrigZone;
                        result.Dest                   = OD[od].DestZone;
                        result.PathLists              = g.PathList;
                        result.TravelTimeList         = GetPathTravelTimes(result.PathLists, timePeriodResult);
                        result.FreeFlowTravelTimeList = GetPathFreeFlowTravelTimes(result.PathLists, timePeriodResult);
                        double minimalPathTravelTime = result.TravelTimeList[0];

                        for (int n = 0; n < result.TravelTimeList.Count; n++)
                        {
                            if (result.TravelTimeList[n] < minimalPathTravelTime)
                            {
                                minimalPathTravelTime = result.TravelTimeList[n];
                            }
                        }
                        result.MinimalPathTravelTime = minimalPathTravelTime;
                        double minimalPathFreeFlowTravelTime = result.FreeFlowTravelTimeList[0];
                        for (int n = 0; n < result.FreeFlowTravelTimeList.Count; n++)
                        {
                            if (result.FreeFlowTravelTimeList[n] < minimalPathFreeFlowTravelTime)
                            {
                                minimalPathFreeFlowTravelTime = result.FreeFlowTravelTimeList[n];
                            }
                        }
                        result.MinimalPathFreeFlowTravelTime = minimalPathFreeFlowTravelTime;
                        for (int n = 0; n < result.TravelTimeList.Count; n++)
                        {
                            double diff = result.TravelTimeList[n] - minimalPathTravelTime;
                            if (diff < 1)
                            {
                                result.UtilizedPathLists.Add(result.PathLists[n]);
                                result.UtilizedList.Add(1);
                            }
                            else
                            {
                                result.UtilizedList.Add(0);
                            }
                        }
                        timePeriodResult.ODResults.Add(result);
                    }
                }

                results.Add(timePeriodResult);
            }
        }
Пример #13
0
        public override LinkResult Link(IConsole console, IStandardProject superProject, IStandardProject project,
                                        CompileResult assemblies, string outputPath)
        {
            var settings = GetSettings(superProject);
            var result   = new LinkResult();

            var startInfo = new ProcessStartInfo();

            startInfo.FileName = Path.Combine(BaseDirectory, "arm-none-eabi-gcc" + Platform.ExecutableExtension);

            if (project.Type == ProjectType.StaticLibrary)
            {
                startInfo.FileName = Path.Combine(BaseDirectory, "arm-none-eabi-ar" + Platform.ExecutableExtension);
            }

            startInfo.WorkingDirectory = project.Solution.CurrentDirectory;

            if (!System.IO.File.Exists(startInfo.FileName))
            {
                result.ExitCode = -1;
                console.WriteLine("Unable to find linker executable (" + startInfo.FileName + ") Check project compiler settings.");
                return(result);
            }

            var objectArguments = string.Empty;

            foreach (var obj in assemblies.ObjectLocations)
            {
                objectArguments += obj + " ";
            }

            var libs = string.Empty;

            foreach (var lib in assemblies.LibraryLocations)
            {
                libs += lib + " ";
            }

            var outputDir = Path.GetDirectoryName(outputPath);

            if (!Directory.Exists(outputDir))
            {
                Directory.CreateDirectory(outputDir);
            }

            var outputName = Path.GetFileNameWithoutExtension(outputPath) + ExecutableExtension;

            if (project.Type == ProjectType.StaticLibrary)
            {
                outputName = Path.GetFileNameWithoutExtension(outputPath) + StaticLibraryExtension;
            }
            else
            {
                GenerateLinkerScript(superProject);
            }

            var executable = Path.Combine(outputDir, outputName);

            var linkedLibraries = string.Empty;

            foreach (var libraryPath in project.StaticLibraries)
            {
                var relativePath = Path.GetDirectoryName(libraryPath);

                var libName = Path.GetFileNameWithoutExtension(libraryPath).Substring(3);

                linkedLibraries += string.Format("-L\"{0}\" -l{1} ", relativePath, libName);
            }

            foreach (var lib in project.BuiltinLibraries)
            {
                linkedLibraries += string.Format("-l{0} ", lib);
            }


            // TODO linked libraries won't make it in on nano... Please fix -L directory placement in compile string.
            switch (settings.LinkSettings.Library)
            {
            case LibraryType.NanoCLib:
                linkedLibraries += "-lm -lc_nano -lsupc++_nano -lstdc++_nano ";
                break;

            case LibraryType.BaseCLib:
                linkedLibraries += "-lm -lc -lstdc++ -lsupc++ ";
                break;

            case LibraryType.SemiHosting:
                linkedLibraries += "-lm -lgcc -lc -lrdimon ";
                break;

            case LibraryType.Retarget:
                linkedLibraries += "-lm -lc -lnosys -lstdc++ -lsupc++ ";
                break;
            }

            // Hide console window
            startInfo.UseShellExecute        = false;
            startInfo.RedirectStandardOutput = true;
            startInfo.RedirectStandardError  = true;
            startInfo.RedirectStandardInput  = true;
            startInfo.CreateNoWindow         = true;

            if (project.Type == ProjectType.StaticLibrary)
            {
                startInfo.Arguments = string.Format("rvs {0} {1}", executable, objectArguments);
            }
            else
            {
                startInfo.Arguments = string.Format("{0} -o{1} {2} -Wl,--start-group {3} {4} -Wl,--end-group",
                                                    GetLinkerArguments(project), executable, objectArguments, linkedLibraries, libs);
            }

            //console.WriteLine(Path.GetFileNameWithoutExtension(startInfo.FileName) + " " + startInfo.Arguments);
            //console.WriteLine ("[LL] - " + startInfo.Arguments);

            using (var process = Process.Start(startInfo))
            {
                process.OutputDataReceived += (sender, e) =>
                {
                    //console.WriteLine(e.Data);
                };

                process.ErrorDataReceived += (sender, e) =>
                {
                    if (e.Data != null && !e.Data.Contains("creating"))
                    {
                        console.WriteLine(e.Data);
                    }
                };

                process.BeginOutputReadLine();

                process.BeginErrorReadLine();

                process.WaitForExit();

                result.ExitCode = process.ExitCode;

                if (result.ExitCode == 0)
                {
                    result.Executable = executable;
                }
            }

            return(result);
        }
Пример #14
0
        /// <summary>
        /// Processa a junção.
        /// </summary>
        /// <param name="query">Consulta que será analizada.</param>
        /// <param name="term">Termo condicional que será processado.</param>
        /// <returns></returns>
        private LinkResult ProcessLinkResult(QueryInfo query, ConditionalTerm term)
        {
            if (term is Conditional)
            {
                var        conditional = (Conditional)term;
                var        leftColumn  = conditional.Left as Column;
                var        rightColumn = conditional.Right as Column;
                EntityInfo leftEntity  = null;
                EntityInfo rightEntity = null;
                if (leftColumn != null)
                {
                    leftEntity = query.Entities.Where(f => f.Alias == leftColumn.Owner).FirstOrDefault() ?? query.Entities.FirstOrDefault();
                }
                if (rightColumn != null)
                {
                    rightEntity = query.Entities.Where(f => f.Alias == rightColumn.Owner).FirstOrDefault() ?? query.Entities.FirstOrDefault();
                }
                if (leftColumn != null && rightColumn != null)
                {
                    ComparisonType comparisonType = ComparisonType.EQUALS;
                    switch (conditional.Operator.Op)
                    {
                    case "==":
                    case "=":
                        comparisonType = ComparisonType.EQUALS;
                        break;

                    case "<>":
                    case "!=":
                        comparisonType = ComparisonType.NOT_EQUALS;
                        break;

                    case ">":
                        comparisonType = ComparisonType.GREATER_THAN;
                        break;

                    case ">=":
                        comparisonType = ComparisonType.GREATER_THAN_EQUALS;
                        break;

                    case "<":
                        comparisonType = ComparisonType.LESS_THAN;
                        break;

                    case "<=":
                        comparisonType = ComparisonType.LESS_THAN_EQUALS;
                        break;

                    default:
                        throw new InvalidOperationException("Unsupported operator " + conditional.Operator.Op);
                    }
                    return(new LinkResult {
                        Entities = new EntityInfo[] {
                            leftEntity,
                            rightEntity
                        },
                        Items = _cacheProvider.Cache.JoinIndex(leftEntity.FullName, leftColumn.Name, rightEntity.FullName, rightColumn.Name, comparisonType).ToArray()
                    });
                }
                else
                {
                    EntityInfo entity      = leftEntity != null ? leftEntity : rightEntity;
                    string     commandText = null;
                    Hashtable  parameters  = null;
                    Parse(new QueryInfo {
                        Entities = new EntityInfo[] {
                            entity
                        },
                        WhereClause = new ConditionalContainer(conditional),
                        Parameters  = query.Parameters
                    }, out commandText, out parameters);
                    var searchResult = _cacheProvider.Cache.Search(commandText, parameters);
                    return(Convert(searchResult, entity));
                }
            }
            else if (term is ConditionalContainer)
            {
                var        container      = (ConditionalContainer)term;
                var        logicOperators = new Queue <LogicalOperator>(container.LogicalOperators);
                LinkResult joinResult     = null;
                foreach (var term2 in container.Conditionals)
                {
                    if (joinResult == null)
                    {
                        joinResult = ProcessLinkResult(query, term2);
                    }
                    else
                    {
                        joinResult = Merge(logicOperators.Dequeue() == LogicalOperator.And ? MergeType.Intersect : MergeType.Union, joinResult, ProcessLinkResult(query, term2));
                    }
                }
                return(joinResult);
            }
            throw new InvalidOperationException();
        }
Пример #15
0
        public override LinkResult Link(IConsole console, IStandardProject superProject, IStandardProject project, CompileResult assemblies, string outputPath)
        {
            var result = new LinkResult();

            string commandName = project.Type == ProjectType.StaticLibrary ? ARExecutable : LDExecutable;

            var objectArguments = string.Empty;

            foreach (var obj in assemblies.ObjectLocations)
            {
                objectArguments += obj + " ";
            }

            var libs = string.Empty;

            foreach (var lib in assemblies.LibraryLocations)
            {
                libs += lib + " ";
            }

            var outputDir = Path.GetDirectoryName(outputPath);

            if (!Directory.Exists(outputDir))
            {
                Directory.CreateDirectory(outputDir);
            }

            var outputName = Path.GetFileName(outputPath);

            if (project.Type == ProjectType.StaticLibrary)
            {
                outputName = Path.GetFileName(outputPath);
            }

            var executable = Path.Combine(outputDir, outputName);

            var linkedLibraries = string.Empty;

            foreach (var libraryPath in project.StaticLibraries)
            {
                var relativePath = Path.GetDirectoryName(libraryPath);

                var libName = Path.GetFileNameWithoutExtension(libraryPath).Substring(3);

                linkedLibraries += string.Format("-L\"{0}\" -l{1} ", relativePath, libName);
            }

            string libraryPaths = string.Empty;

            var linkerScripts = string.Empty;

            if (project.Type == ProjectType.Executable)
            {
                var settings = project.GetToolchainSettings <GccToolchainSettings>();

                foreach (var libraryPath in settings.LinkSettings.LinkedLibraries)
                {
                    libraryPaths += $"-Wl,--library-path={Path.Combine(project.CurrentDirectory, Path.GetDirectoryName(libraryPath)).ToPlatformPath()} ";

                    var libName = Path.GetFileName(libraryPath);

                    linkedLibraries += string.Format($"-Wl,--library=:{libName} ");
                }

                foreach (var script in settings.LinkSettings.LinkerScripts)
                {
                    linkerScripts += $"-Wl,-T\"{Path.Combine(project.CurrentDirectory, script)}\" ";
                }

                foreach (var lib in settings.LinkSettings.SystemLibraries)
                {
                    linkedLibraries += $"-l{lib} ";
                }
            }

            foreach (var lib in project.BuiltinLibraries)
            {
                linkedLibraries += $"-l{lib} ";
            }

            linkedLibraries += GetBaseLibraryArguments(superProject);

            string arguments = string.Empty;

            if (project.Type == ProjectType.StaticLibrary)
            {
                arguments = string.Format("rvs {0} {1}", executable, objectArguments);
            }
            else
            {
                var environment = superProject.GetEnvironmentVariables().AppendRange(Platform.EnvironmentVariables);
                arguments = string.Format("{0} {1} -o{2} {3} {4} -Wl,--start-group {5} {6} -Wl,--end-group", GetLinkerArguments(superProject, project).ExpandVariables(environment), linkerScripts, executable, objectArguments, libraryPaths, linkedLibraries, libs);
            }

            result.ExitCode = PlatformSupport.ExecuteShellCommand(commandName, arguments, (s, e) =>
            {
                if (e.Data != null)
                {
                    console.WriteLine(e.Data);
                }
            },
                                                                  (s, e) =>
            {
                if (e.Data != null && !e.Data.Contains("creating"))
                {
                    console.WriteLine(e.Data);
                }
            }, false, project.Solution.CurrentDirectory, false, RunWithSystemPaths);

            if (Shell.DebugMode)
            {
                console.WriteLine(Path.GetFileNameWithoutExtension(commandName) + " " + arguments);
            }

            if (result.ExitCode == 0)
            {
                result.Executable = executable;
            }

            return(result);
        }
Пример #16
0
        public override LinkResult Link(IConsole console, IStandardProject superProject, IStandardProject project,
                                        CompileResult assemblies, string outputPath)
        {
            var settings = GetSettings(superProject);
            var result   = new LinkResult();

            var startInfo = new ProcessStartInfo();

            if (Platform.PlatformIdentifier == PlatformID.Unix)
            {
                startInfo.FileName = "g++";
            }
            else
            {
                startInfo.FileName = Path.Combine(BaseDirectory, "bin", "g++" + Platform.ExecutableExtension);
            }

            if (project.Type == ProjectType.StaticLibrary)
            {
                if (Platform.PlatformIdentifier == PlatformID.Unix)
                {
                    startInfo.FileName = "ar";
                }
                else
                {
                    startInfo.FileName = Path.Combine(BaseDirectory, "bin", "ar" + Platform.ExecutableExtension);
                }
            }

            startInfo.WorkingDirectory = project.Solution.CurrentDirectory;

            if (!System.IO.File.Exists(startInfo.FileName) && Platform.PlatformIdentifier != PlatformID.Unix)
            {
                result.ExitCode = -1;
                console.WriteLine("Unable to find linker executable (" + startInfo.FileName + ") Check project compiler settings.");
                return(result);
            }

            var objectArguments = string.Empty;

            foreach (var obj in assemblies.ObjectLocations)
            {
                objectArguments += obj + " ";
            }

            var libs = string.Empty;

            foreach (var lib in assemblies.LibraryLocations)
            {
                libs += lib + " ";
            }

            var outputDir = Path.GetDirectoryName(outputPath);

            if (!Directory.Exists(outputDir))
            {
                Directory.CreateDirectory(outputDir);
            }

            var outputName = Path.GetFileNameWithoutExtension(outputPath) + ExecutableExtension;

            if (project.Type == ProjectType.StaticLibrary)
            {
                outputName = Path.GetFileNameWithoutExtension(outputPath) + StaticLibraryExtension;
            }

            var executable = Path.Combine(outputDir, outputName);

            var linkedLibraries = string.Empty;

            foreach (var libraryPath in project.StaticLibraries)
            {
                var relativePath = Path.GetDirectoryName(libraryPath);

                var libName = Path.GetFileNameWithoutExtension(libraryPath).Substring(3);

                linkedLibraries += string.Format("-L\"{0}\" -l{1} ", relativePath, libName);
            }

            foreach (var lib in project.BuiltinLibraries)
            {
                linkedLibraries += string.Format("-l{0} ", lib);
            }

            // Hide console window
            startInfo.UseShellExecute        = false;
            startInfo.RedirectStandardOutput = true;
            startInfo.RedirectStandardError  = true;
            startInfo.RedirectStandardInput  = true;
            startInfo.CreateNoWindow         = true;

            if (project.Type == ProjectType.StaticLibrary)
            {
                startInfo.Arguments = string.Format("rvs {0} {1}", executable, objectArguments);
            }
            else
            {
                startInfo.Arguments = string.Format("{0} -o{1} {2} -Wl,--start-group {3} {4} -Wl,--end-group",
                                                    GetLinkerArguments(project), executable, objectArguments, linkedLibraries, libs);
            }

            //console.WriteLine(Path.GetFileNameWithoutExtension(startInfo.FileName) + " " + startInfo.Arguments);
            //console.WriteLine ("[LL] - " + startInfo.Arguments);

            using (var process = Process.Start(startInfo))
            {
                process.OutputDataReceived += (sender, e) =>
                {
                    //console.WriteLine(e.Data);
                };

                process.ErrorDataReceived += (sender, e) =>
                {
                    if (e.Data != null && !e.Data.Contains("creating"))
                    {
                        console.WriteLine(e.Data);
                    }
                };

                process.BeginOutputReadLine();

                process.BeginErrorReadLine();

                process.WaitForExit();

                result.ExitCode = process.ExitCode;

                if (result.ExitCode == 0)
                {
                    result.Executable = executable;
                }
            }

            return(result);
        }
        private Task<LinkResult> CreateTask(FluentConfiguration fluentConfiguration, HttpWebRequest webRequest, string originalUrl)
        {
            return Task<LinkResult>.Factory.StartNew(() =>
                {
                    if (fluentConfiguration.Bot != null)
                    {
                        fluentConfiguration.Bot.OnRequest(webRequest);
                    }

                    _beforeConfigurers.ForEach(x => x(webRequest));

                    var result = new LinkResult {Url = new Uri(originalUrl, UriKind.RelativeOrAbsolute)};
                    HttpWebResponse webResponse = null;
                    try
                    {
                        webResponse = (HttpWebResponse) webRequest.GetResponse();
                        result.StatusCode = webResponse.StatusCode;
                    }
                    catch (WebException we)
                    {
                        result.StatusCode = we.Response != null ? ((HttpWebResponse) we.Response).StatusCode : HttpStatusCode.NotFound;
                    }
                    finally
                    {
                        if (webResponse != null)
                        {
                            _afterConfigurers.ForEach(x => x(webResponse));
                            webResponse.Close();
                        }
                    }

                    return result;
                });
        }
Пример #18
0
        /// <summary>
        /// Mescla o dois resultados informados.
        /// </summary>
        /// <param name="mergeType">Tipo do Merge.</param>
        /// <param name="leftResult"></param>
        /// <param name="rightResult"></param>
        /// <returns></returns>
        private static LinkResult Merge(MergeType mergeType, LinkResult leftResult, LinkResult rightResult)
        {
            var intersectEntities = new List <int[]>();

            if (rightResult != null)
            {
                for (var i = 0; i < leftResult.Entities.Length; i++)
                {
                    for (var j = 0; j < rightResult.Entities.Length; j++)
                    {
                        if (leftResult.Entities[i] == rightResult.Entities[j])
                        {
                            intersectEntities.Add(new int[] {
                                i,
                                j
                            });
                        }
                    }
                }
            }
            var entities = rightResult != null?leftResult.Entities.Union(rightResult.Entities).ToArray() : leftResult.Entities;

            var items = new List <object[]>();

            if (mergeType == MergeType.Intersect)
            {
                foreach (var rightItem in rightResult.Items)
                {
                    foreach (var leftItem in leftResult.Items)
                    {
                        if (IsIntersect(intersectEntities, leftItem, rightItem))
                        {
                            items.Add(Concat(leftResult.Entities, leftItem, rightResult.Entities, rightItem, entities));
                        }
                    }
                }
            }
            else if (mergeType == MergeType.Union)
            {
                if ((rightResult.Entities.Length - intersectEntities.Count) > (leftResult.Entities.Length - intersectEntities.Count))
                {
                    var aux = leftResult;
                    leftResult  = rightResult;
                    rightResult = aux;
                }
                var leftItems = new List <object[]>();
                foreach (var leftItem in leftResult.Items)
                {
                    leftItems.Add(Concat(leftResult.Entities, leftItem, null, null, entities));
                }
                foreach (var rightItem in rightResult.Items)
                {
                    var isIntersect = false;
                    foreach (var leftItem in leftItems)
                    {
                        if (IsIntersect(intersectEntities, leftItem, rightItem))
                        {
                            isIntersect = true;
                            break;
                        }
                    }
                    if (!isIntersect)
                    {
                        if ((rightResult.Entities.Length - intersectEntities.Count) != (leftResult.Entities.Length - intersectEntities.Count))
                        {
                            foreach (var leftItem in leftItems)
                            {
                                items.Add(Concat(rightResult.Entities, rightItem, leftResult.Entities, leftItem, entities));
                            }
                        }
                        else
                        {
                            items.Add(Concat(rightResult.Entities, rightItem, null, null, entities));
                        }
                    }
                }
                items.AddRange(leftItems);
            }
            else if (mergeType == MergeType.LeftJoin)
            {
                foreach (var leftItem in leftResult.Items)
                {
                    bool isIntersect = false;
                    foreach (var rightItem in rightResult.Items)
                    {
                        if (IsIntersect(intersectEntities, leftItem, rightItem))
                        {
                            items.Add(Concat(leftResult.Entities, leftItem, rightResult.Entities, rightItem, entities));
                            isIntersect = true;
                            break;
                        }
                    }
                    if (!isIntersect)
                    {
                        items.Add(Concat(leftResult.Entities, leftItem, null, null, entities));
                    }
                }
            }
            leftResult = new LinkResult {
                Entities = entities,
                Items    = items
            };
            return(leftResult);
        }
Пример #19
0
        public override async Task <bool> PostBuild(IConsole console, IProject project, LinkResult linkResult)
        {
            if ((project is IStandardProject) && (project as IStandardProject).Type == ProjectType.Executable)
            {
                var result = await ObjCopy(console, project, linkResult, AssemblyFormat.Binary);

                if (result.ExitCode == 0)
                {
                    result = await ObjCopy(console, project, linkResult, AssemblyFormat.IntelHex);
                }

                return(result.ExitCode == 0);
            }


            return(true);
        }
Пример #20
0
        public override ProcessResult Size(IConsole console, IStandardProject project, LinkResult linkResult)
        {
            var result = new ProcessResult();

            result.ExitCode = PlatformSupport.ExecuteShellCommand(SizeExecutable, linkResult.Executable,
                                                                  (s, e) => console.WriteLine(e.Data),
                                                                  (s, e) => console.WriteLine(e.Data),
                                                                  false, string.Empty, false, RunWithSystemPaths);

            return(result);
        }
Пример #21
0
        public override ProcessResult Size(IConsole console, IStandardProject project, LinkResult linkResult)
        {
            var result = new ProcessResult();

            var startInfo = new ProcessStartInfo();

            startInfo.FileName = Path.Combine(BaseDirectory, "arm-none-eabi-size" + Platform.ExecutableExtension);

            if (!System.IO.File.Exists(startInfo.FileName))
            {
                console.WriteLine("Unable to find tool (" + startInfo.FileName + ") check project compiler settings.");
                result.ExitCode = -1;
                return(result);
            }

            startInfo.Arguments = string.Format("{0}", linkResult.Executable);

            // Hide console window
            startInfo.UseShellExecute        = false;
            startInfo.RedirectStandardOutput = true;
            startInfo.RedirectStandardError  = true;
            startInfo.RedirectStandardInput  = true;
            startInfo.CreateNoWindow         = true;


            using (var process = Process.Start(startInfo))
            {
                process.OutputDataReceived += (sender, e) => { console.WriteLine(e.Data); };

                process.ErrorDataReceived += (sender, e) => { console.WriteLine(e.Data); };

                process.BeginOutputReadLine();

                process.BeginErrorReadLine();

                process.WaitForExit();

                result.ExitCode = process.ExitCode;
            }

            return(result);
        }