public ProcessHeap(StreamReader currentProcesses, string fileName)
        {
            LinkedList <m_Process> readyQuantum = new LinkedList <m_Process>();

            while (currentProcesses.EndOfStream != true)
            {
                int      inputNumber  = 0;
                string   currentInput = "";
                int[]    informations = new int[3];
                string   currentLine  = currentProcesses.ReadLine();
                string[] currentLines = currentLine.Split(' ', '-', ',');
                foreach (string line in currentLines)
                {
                    informations[inputNumber] = Convert.ToInt32(line);
                    inputNumber++;
                }

                if (informations[0] != 0 || informations[1] != 0 || informations[2] != 0)
                {
                    m_Process newestProcess = new m_Process(informations[0], informations[1], informations[2]);
                    //readyQue.addNode(newestProcess.getArrivalTime(), newestProcess);
                    readyQuantum.AddLast(newestProcess);
                }
            }
            m_Process[] readyQuantumArray = readyQuantum.ToArray <m_Process>();
            Array.Sort(readyQuantumArray);



            this.RunProcesses(readyQuantumArray, fileName);
        }
        public ProcessHeap(StreamReader currentProcesses, string fileName)
        {
            while (currentProcesses.EndOfStream != false)
            {
                int    inputNumber  = 0;
                string currentInput = "";
                int[]  informations = new int[3];
                string currentLine  = currentProcesses.ReadLine();
                foreach (char c in currentLine)
                {
                    if (Convert.ToInt32(c) != 0)
                    {
                        currentInput = currentInput + c;
                    }
                    else
                    {
                        if (Convert.ToInt32(currentInput) != 0)
                        {
                            informations[inputNumber] = Convert.ToInt32(currentInput);
                            inputNumber++;
                            currentInput = "";
                        }
                    }
                }

                if (informations[0] != 0 || informations[1] != 0 || informations[2] != 0)
                {
                    m_Process newestProcess = new m_Process(informations[0], informations[1], informations[2]);
                    //readyQue.addNode(newestProcess.getArrivalTime(), newestProcess);
                    readyQuantum.AddLast(newestProcess);
                }
            }
            m_Process[] readyQuantumArray = readyQuantum.ToArray <m_Process>();
            Array.Sort(readyQuantumArray);



            this.RunProcesses(readyQuantumArray, fileName);
        }
        private void RunProcesses(m_Process[] readyQuantumArray, string fileName)
        {
            LinkedList <m_Process> readyQue = new LinkedList <m_Process>();

            LinkedList <m_Process>[] quantums = new LinkedList <m_Process> [5];
            quantums[0] = new LinkedList <m_Process>();
            quantums[1] = new LinkedList <m_Process>();
            quantums[2] = new LinkedList <m_Process>();
            quantums[3] = new LinkedList <m_Process>();
            quantums[4] = new LinkedList <m_Process>();

            foreach (m_Process process in readyQuantumArray)
            {
                readyQue.AddLast(process);
            }

            int    currentTime = 0;
            bool   processed   = false;
            int    N           = 0;
            string timeTrace   = "";
            string procTrace   = "";

            while (processed == false)
            {
                bool goToThree = false;
                bool has_Run   = false;
                try
                {
                    if (readyQue.First() != null && readyQue.First().getArrivalTime() <= currentTime)
                    {
                        quantums[0].AddLast(readyQue.First());
                        timeTrace = timeTrace + "0";
                        procTrace = procTrace + quantums[0].Last().getProcessNumber();
                        readyQue.RemoveFirst();
                    }
                }
                catch (Exception E)
                { }

                try
                {
                    if (quantums[N].First() != null)
                    {
                        m_Process m_CurrentProccess = quantums[N].First();
                        quantums[N].RemoveFirst();
                        if (N == 0)
                        {
                            currentTime++;
                            m_CurrentProccess.setExecutionDuration(1);
                            timeTrace = timeTrace + "1";
                            procTrace = procTrace + m_CurrentProccess.getProcessNumber();
                            has_Run   = true;
                        }
                        else
                        {
                            if (m_CurrentProccess.getExecutionDuration() < ((N + 1) * 2) - 2)
                            {
                                currentTime = currentTime + m_CurrentProccess.getExecutionDuration();
                                timeTrace   = timeTrace + m_CurrentProccess.getExecutionDuration();
                                procTrace   = procTrace + m_CurrentProccess.getProcessNumber();
                                has_Run     = true;
                            }
                            else
                            {
                                timeTrace = timeTrace + (((N + 1) * 2) - 2);
                                procTrace = procTrace + m_CurrentProccess.getProcessNumber();
                            }
                            m_CurrentProccess.setExecutionDuration(((N + 1) * 2) - 2);
                        }
                        if (m_CurrentProccess.getExecutionDuration() > 0)
                        {
                            if (N == 4)
                            {
                                quantums[N].AddLast(m_CurrentProccess);
                            }
                            else
                            {
                                quantums[N + 1].AddLast(m_CurrentProccess);
                            }
                        }
                    }
                }
                catch (Exception E)
                {
                    if (N < 5)
                    {
                        N++;
                        goToThree = true;
                        currentTime++;
                    }
                }

                if (goToThree == false)
                {
                    if (has_Run == false)
                    {
                        currentTime++;
                        N = 0;
                    }

                    if (readyQue.First == null && quantums[0].First == null && quantums[1].First == null && quantums[2].First == null && quantums[3].First == null && quantums[4].First == null)
                    {
                        processed = true;
                    }
                }
            }

            string filePath   = System.Reflection.Assembly.GetExecutingAssembly().Location;
            string folderPath = System.IO.Path.GetDirectoryName(filePath);

            string desiredFileName = (folderPath + "\\" + fileName);


            System.IO.StreamWriter file = new System.IO.StreamWriter(desiredFileName + ".txt");
            using (file)
            {
                file.WriteLine("Time:    " + timeTrace);
                file.WriteLine("Proc:    " + procTrace);
            }
        }