Advertisement
Guest User

Untitled

a guest
Oct 31st, 2014
144
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.40 KB | None | 0 0
  1. import java.util.ArrayList;
  2. import java.util.LinkedList;
  3. import java.util.TreeMap;
  4.  
  5. /**
  6. * Created by abhinavkishore on 23/10/14.
  7. */
  8. public class Edge {
  9.  
  10. private Node node;
  11. private int propDelay;
  12. private int connectionCap;
  13. private int numCurrConnections;
  14. private ArrayList<Float> startTimes;
  15. private ArrayList<Float> endTimes;
  16. private TreeMap<Float, Integer> startHash;
  17. private TreeMap<Float, Integer> endHash;
  18. private TreeMap<Float, LinkedList<Float>> endToStartHash;
  19.  
  20.  
  21. public Edge(Node node, int propDelay, int connectionCap){
  22. this.node = node;
  23. this.propDelay = propDelay;
  24. this.connectionCap = connectionCap;
  25. this.numCurrConnections = 0;
  26. this.startTimes = new ArrayList<Float>();
  27. this.endTimes = new ArrayList<Float>();
  28. this.startHash = new TreeMap<Float, Integer>();
  29. this.endHash = new TreeMap<Float, Integer>();
  30. this.endToStartHash = new TreeMap<Float, LinkedList<Float>>();
  31. }
  32.  
  33. public Node getNode(){
  34. return this.node;
  35. }
  36.  
  37. public int getPropDelay() {
  38. return propDelay;
  39. }
  40.  
  41. public int getConnectionCap() {
  42. return connectionCap;
  43. }
  44.  
  45. public int getNumCurrConnections(){
  46. return this.numCurrConnections;
  47. }
  48.  
  49. public boolean updateConnection(int update){
  50. // System.out.println(" Curr Connections = " + numCurrConnections + " Max connections = " + this.connectionCap);
  51. if(numCurrConnections == connectionCap && update == 1){
  52. // System.out.println("MAXED OUT");
  53. return false;
  54. }
  55. this.numCurrConnections += update;
  56. return true;
  57. }
  58.  
  59. public boolean hasConnection(int update){
  60. if(numCurrConnections == connectionCap && update == 1){
  61. return false;
  62. }
  63. return true;
  64. }
  65.  
  66.  
  67. public void clearCap(Float startTime){
  68.  
  69. // System.out.println("Before : " + endToStartHash.toString());
  70.  
  71. LinkedList<Float> toBeRemoved = new LinkedList<Float>();
  72. for(Float key: endHash.keySet()){
  73. if(startTime >= key){
  74. toBeRemoved.add(key);
  75. removeFromHash(endToStartHash.get(key), 0); //0 is startHash
  76. endToStartHash.remove(key);
  77. } else {
  78. break;
  79. }
  80. }
  81. removeFromHash(toBeRemoved, 1);
  82.  
  83. // System.out.println("Should have removed " + toBeRemoved.toString());
  84.  
  85. // System.out.println("After : " + endToStartHash.toString());
  86.  
  87. }
  88.  
  89. private void removeFromHash(LinkedList<Float> toBeRemoved, int hashNum) {
  90. TreeMap<Float, Integer> hash = startHash;
  91. if(hashNum == 1){
  92. hash = endHash;
  93. }
  94.  
  95. if(toBeRemoved == null){
  96. return;
  97. }
  98.  
  99. // System.out.println("ToBeRemoved: " + toBeRemoved.toString());
  100. // System.out.println("Hash: " + hash);
  101.  
  102. for(int i = 0; i < toBeRemoved.size(); i++){
  103. Float key = toBeRemoved.get(i);
  104. int val = hash.get(key);
  105. if(val - 1 == 0){
  106. hash.remove(key);
  107. } else {
  108. hash.put(key, val - 1);
  109. }
  110. }
  111. }
  112.  
  113. public void updateTimes(Float startTime, Float endTime){
  114.  
  115. // System.out.println("Updating start time: "+ startTime);
  116. int val = 0;
  117. if(startHash.containsKey(startTime)){
  118. val = startHash.get(startTime);
  119. }
  120. startHash.put(startTime, val + 1);
  121.  
  122. val = 0;
  123. if(endHash.containsKey(endTime)){
  124. val = endHash.get(endTime);
  125. }
  126. endHash.put(endTime, val + 1);
  127.  
  128. LinkedList<Float> addToHash = new LinkedList<Float>();
  129. if(endToStartHash.containsKey(endTime)){
  130. addToHash = endToStartHash.get(endTime);
  131. }
  132. addToHash.add(startTime);
  133. endToStartHash.put(endTime, addToHash);
  134.  
  135. }
  136.  
  137. public int getCapacity(Float endTime, Float startTime){
  138. // endTime = new Float(20);
  139. Float currTime = new Float(0.0);
  140. int i = 0;
  141. int j = 0;
  142. int currCapacity = 0;
  143.  
  144. System.out.println("Start Hash: "+ startHash.toString());
  145. System.out.println("End Hash: "+ endHash.toString());
  146.  
  147. // float[] startKeys = new float[] {1, 2, 10, 20, 30};
  148. // float[] endKeys = new float[] {7, 8, 11, 21, 35};
  149.  
  150. Object[] startKeys = startHash.keySet().toArray();
  151. Object[] endKeys = endHash.keySet().toArray();
  152.  
  153. // System.out.println(endToStartHash.toString());
  154.  
  155. Float currStartTime;
  156. Float currEndTime;
  157.  
  158. if(startKeys.length > 0){
  159. // currStartTime = startKeys[0];
  160. // currEndTime = endKeys[0];
  161. currStartTime = (Float) startKeys[0];
  162. currEndTime = (Float) endKeys[0];
  163. // i++;
  164. // System.out.print("StartHash: ");
  165. // for(int k = 0; k < startKeys.length; k++){
  166. // System.out.print((Float) startKeys[k] + " ");
  167. // }
  168. //
  169. // System.out.print("EndHash: ");
  170. // for(int k = 0; k < endKeys.length; k++){
  171. // System.out.print((Float) endKeys[k] + " ");
  172. // }
  173. // System.out.println();
  174. } else {
  175. // System.out.println("entered");
  176. return 0;
  177. }
  178.  
  179. // System.out.println("Sizes are " + endKeys.length);
  180. int maxCap = 0;
  181. int type = 0;
  182. boolean isMaxCap = false;
  183.  
  184. // System.out.println("currTime: " + currTime);
  185. // System.out.println("endTime: " + endTime);
  186.  
  187. while(currTime.compareTo(endTime) == -1 && (i < startKeys.length || j < endKeys.length)){
  188. // System.out.println("currStartTime: " + currStartTime);
  189. // System.out.println("currEndTime: " + currEndTime);
  190. // System.out.println("i: " + i);
  191. // boolean condi = i < startKeys.length;
  192. // System.out.println("Condition: " + condi);
  193. if(currStartTime.compareTo(currEndTime) == -1 && i < startKeys.length){
  194.  
  195. currTime = currStartTime;
  196. currCapacity += startHash.get(currTime);
  197. // System.out.print(startHash.get(currTime) + " PLUS for " + currTime);
  198. i++;
  199. type = 1;
  200.  
  201. } else if(j < endKeys.length){
  202.  
  203. currTime = currEndTime;
  204. currCapacity -= endHash.get(currTime);
  205. // System.out.println(" " + endHash.get(currTime) + " MINUS for " + currTime);
  206. j++;
  207. type = 2;
  208. }
  209.  
  210. if(isMaxCap || type == 2 && currTime >= startTime) {
  211. isMaxCap = true;
  212. maxCap = Math.max(maxCap, currCapacity);
  213. }
  214.  
  215.  
  216. if(i < startKeys.length){
  217. currStartTime = (Float) startKeys[i];
  218. }
  219.  
  220. if(j < endKeys.length){
  221. currEndTime = (Float) endKeys[j];
  222. }
  223. }
  224. //
  225. // if(currCapacity == 1){
  226. // maxCap = Math.max(maxCap, currCapacity);
  227. // }
  228. // if(currTime.equals(endTime)){
  229. // maxCap --;
  230. // }
  231. System.out.println("Current time is: " + currTime + " End time is: +" + endTime + " maxCap: "+ maxCap);
  232.  
  233. // System.out.println("Capacity: " + currCapacity);
  234.  
  235. return maxCap;
  236. }
  237.  
  238.  
  239. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement