//This file contains list manipulation functions. function verifyPlainListsIdentity(list1, list2) { if(list1.size != list2.size) return 0; else { var i; for(i = 0; i < list1.size; i++) { if(list1[i] != list2[i]) return 0; } return 1; } } function findPlainList(vector, list) { var i; for(i = 0; i < vector.size; i++) { if(verifyPlainListsIdentity(vector[i], list) == 1) return i; } return -1; } function copyPlainList(list) { var i; var newList = Vector.new(); for(i = 0; i < list.size; i++) newList.add(list[i]); return newList; } function deepCopyList(arg) { if (typeof(arg) == "Vector") { var i, v = Vector.new(); for (i = 0;i < arg.size;i++) v.add(deepCopyList(arg[i])); return v; } else return arg; } function plainListRight(list, howMany) { var right = Vector.new(); var i; for(i = list.size-howMany; i < list.size; i++) right.add(list[i]); return right; } function plainListLeft(list, howMany) { var left = Vector.new(); var i; for(i = 0; i <= howMany; i++) { left.add(list[i]); } return left; } function plainListSubList(list, start, stop) { var i; var subList = Vector.new(); for(i = start; i <= stop; i++) { subList.add(list[i]); } return subList; } function plainListReplace(list, index, replaceList) { var new = Vector.new(); var i; for(i = 0; i < index; i++) { new.add(list[i]); } for(i = 0; i < replaceList.size; i++) { new.add(replaceList[i]); } for(i = index + 1; i < list.size; i++) { new.add(list[i]); } return new; } function mergePlainLists(list1, list2) { var i; var new = Vector.new(); for(i = 0; i < list1.size; i++) new.add(list1[i]); for(i = 0; i < list2.size; i++) new.add(list2[i]); return new; } function plainListCopyInsert(list, index, elementsList) { var new = Vector.new(); var i; for(i = 0; i < index; i++) { new.add(list[i]); } for(i = 0; i < elementsList.size; i++) { new.add(elementsList[i]); } for(i = index; i < list.size; i++) { new.add(list[i]); } return new; } function listRemove(indexes, list) { var listDeepCopy = deepCopyList(list); var i; for(i = 0; i < indexes.size; i++) { listDeepCopy.set(indexes[i],null); } for(i = 0; i < listDeepCopy.size; i++) if(listDeepCopy[i] == null) { listDeepCopy.remove(i); i--; } return listDeepCopy; } function listInsert(list,element,position) { if(position >= list.size) list.set(position, element); else { var temp = Vector.new(); var i; for(i = position; i < list.size; i++) temp.add(list[i]); list.set(position,element); for(i = 0; i < temp.size; i++) list.set(position + 1 + i,temp[i]); } }