Mercurial > hg > Database > Alice
view src/alice/topology/manager/keeparive/ListManager.java @ 325:54d0b947079a
addTask method has bug.
author | one |
---|---|
date | Fri, 24 Jan 2014 01:51:14 +0900 |
parents | 806cc010a5bd |
children | 235f6d0994df |
line wrap: on
line source
package alice.topology.manager.keeparive; import java.util.LinkedList; public class ListManager { private LinkedList<TaskInfo> list = new LinkedList<TaskInfo>(); public LinkedList<TaskInfo> getTaskList() { return list; } public void addTask(TaskInfo newInfo) { TaskExecuter exec = TaskExecuter.getInstance(); if (list.isEmpty()) { if (exec.getNowTask() == null) { // active task is nothing list.add(newInfo); } else { TaskInfo nowTask = exec.getNowTask(); long remainingTime = nowTask.getSleepTime() - (System.currentTimeMillis() - exec.getStartTime()); if (remainingTime < 0) { list.add(newInfo); return; } if (remainingTime < newInfo.getSleepTime()){ // newTask is longer than active task. newInfo.setSleepTime(newInfo.getSleepTime() - remainingTime); list.add(newInfo); } else { // active task is longer than newTask. list.add(newInfo); TaskInfo task = nowTask.clone(); task.setSleepTime(remainingTime); addTask(task); exec.skip(); } } } else { int cnt = 0; for (TaskInfo info : list){ if (info.getSleepTime() < newInfo.getSleepTime()){ newInfo.setSleepTime(newInfo.getSleepTime() - info.getSleepTime()); } else if (info.getSleepTime() == newInfo.getSleepTime()){ // newInfo.getSleepTime() - info.getSleepTime() must be Zero newInfo.setSleepTime(0); cnt++; break; } else if (info.getSleepTime() > newInfo.getSleepTime()){ info.setSleepTime(info.getSleepTime() - newInfo.getSleepTime()); break; } cnt++; } list.add(cnt, newInfo); } } }