1 21 22 package org.armedbear.lisp; 23 24 import java.util.ArrayList ; 25 import java.util.HashMap ; 26 import java.util.Iterator ; 27 import java.util.List ; 28 29 public final class Packages extends Lisp 30 { 31 private static final ArrayList packages = new ArrayList (); 32 private static final HashMap map = new HashMap (); 33 34 public static final synchronized Package createPackage(String name) 35 { 36 return createPackage(name, 0); 37 } 38 39 public static final synchronized Package createPackage(String name, int size) 40 { 41 Package pkg = (Package ) map.get(name); 42 if (pkg == null) { 43 pkg = size != 0 ? new Package (name, size) : new Package (name); 44 packages.add(pkg); 45 map.put(name, pkg); 46 } else 47 Debug.trace("package " + name + " already exists"); 48 return pkg; 49 } 50 51 public static final synchronized void addPackage(Package pkg) 52 throws ConditionThrowable 53 { 54 final String name = pkg.getName(); 55 if (map.get(name) != null) { 56 signal(new LispError("a package named " + name + " already exists")); 57 return; 58 } 59 packages.add(pkg); 60 map.put(name, pkg); 61 List nicknames = pkg.getNicknames(); 62 if (nicknames != null) { 63 for (Iterator it = nicknames.iterator(); it.hasNext();) { 64 String nickname = (String ) it.next(); 65 addNickname(pkg, nickname); 66 } 67 } 68 } 69 70 public static final synchronized Package findPackage(String name) 72 { 73 return (Package ) map.get(name); 74 } 75 76 public static final synchronized Package makePackage(String name) 77 throws ConditionThrowable 78 { 79 if (map.get(name) != null) { 80 signal(new LispError("a package named " + name + " already exists")); 81 return null; 83 } 84 Package pkg = new Package (name); 85 packages.add(pkg); 86 map.put(name, pkg); 87 return pkg; 88 } 89 90 public static final synchronized void addNickname(Package pkg, 91 String nickname) 92 throws ConditionThrowable 93 { 94 if (map.get(nickname) != null) { 95 signal(new PackageError("a package named " + nickname + " already exists")); 96 return; 97 } 98 map.put(nickname, pkg); 99 } 100 101 public static final synchronized boolean deletePackage(Package pkg) 103 { 104 String name = pkg.getName(); 105 if (name != null) { 106 map.remove(name); 107 List nicknames = pkg.getNicknames(); 108 if (nicknames != null) { 109 for (Iterator it = nicknames.iterator(); it.hasNext();) { 110 String nickname = (String ) it.next(); 111 map.remove(nickname); 112 } 113 } 114 packages.remove(pkg); 115 return true; 116 } 117 return false; 118 } 119 120 public static final synchronized LispObject listAllPackages() 121 { 122 LispObject result = NIL; 123 for (Iterator it = packages.iterator(); it.hasNext();) { 124 Package pkg = (Package ) it.next(); 125 result = new Cons(pkg, result); 126 } 127 return result; 128 } 129 130 public static final synchronized Package [] getAllPackages() 131 { 132 Package [] array = new Package [packages.size()]; 133 packages.toArray(array); 134 return array; 135 } 136 } 137 | Popular Tags |