public FetchDeviceData[] Fetch(string[] deviceTypes, string lineId, string direction,int mileage, int segCnt, int sysSegCnt, bool IsBranch) { Hashtable hsDevName = new Hashtable(); System.Collections.ArrayList retlist = new ArrayList(); if(!lines.Contains( lineId+"-"+direction)) throw new Exception(lineId+"-"+direction+",not Found"); if(sysSegCnt>0) { int seg_cnt=0, sys_seg_cnt=0; I_Positionable p = FindFirst_Position(lineId, direction, mileage); do { if (p.getDevType() == "C") { sys_seg_cnt++; seg_cnt++; } if (p.getDevType() == "I") seg_cnt++; p = p.getPrevDev(); } while (p != null && sys_seg_cnt < sysSegCnt); if (seg_cnt > segCnt) segCnt = seg_cnt; } foreach(string type in deviceTypes) { ArrayList tmplist; tmplist= Search(type,FindFirst_Position(lineId,direction,mileage),segCnt,0,IsBranch); foreach (FetchDeviceData data in tmplist) { if (!hsDevName.Contains(data.DevName)) { hsDevName.Add(data.DevName, data); retlist.Add(data); } } } FetchDeviceData[] ret = new FetchDeviceData[retlist.Count]; // retlist.Sort(); for (int i = 0; i < retlist.Count; i++) ret[i] = retlist[i] as FetchDeviceData; return ret; }
public FetchDeviceData[] Fetch(string[] deviceTypes, string lineId, int startMileage, int endMileage) { if (startMileage == endMileage) throw new Exception("起訖範圍不能相等!"); System.Collections.ArrayList []lineDevices=new ArrayList[2]; if (System.Convert.ToInt32(lineId.Substring(lineId.Length - 1, 1)) % 2 == 0) { lineDevices[0] = lines[lineId + "-" + "E"] as System.Collections.ArrayList; lineDevices[1] = lines[lineId + "-" + "W"] as System.Collections.ArrayList; } else { lineDevices[0] = lines[lineId + "-" + "N"] as System.Collections.ArrayList; lineDevices[1] = lines[lineId + "-" + "S"] as System.Collections.ArrayList; } int temp; if (startMileage > endMileage) { temp = startMileage; startMileage = endMileage; endMileage = temp; } System.Collections.ArrayList retAry=new ArrayList(); foreach (string devType in deviceTypes) { for (int i = 0; i < lineDevices.Length; i++) { foreach (object obj in lineDevices[i]) { if (obj is DeviceBaseWrapper) { DeviceBaseWrapper dev = obj as DeviceBaseWrapper; if (dev.mile_m >= startMileage && dev.mile_m < endMileage && dev.deviceType == devType) retAry.Add(dev); } } } } FetchDeviceData[] ret = new FetchDeviceData[retAry.Count]; for (int i = 0; i < retAry.Count; i++) { DeviceBaseWrapper wraper=retAry[i] as DeviceBaseWrapper; ret[i] = new FetchDeviceData(wraper.deviceName, 0,wraper.lineid,wraper.direction,wraper.mile_m, Program.matrix.line_mgr[lineId].getSectionByMile(wraper.direction,wraper.mile_m).maxSpeed, Program.matrix.line_mgr[lineId].getSectionByMile(wraper.direction,wraper.mile_m).minSpeed); } return ret; }