CSC448: Parsing: Maps [6/26] Previous pageContentsNext page

file:Map.java [source] [doc-public] [doc-private]
00001: package clogs.util;
00002: 
00003: import java.util.NoSuchElementException;
00004: 
00005: 
00006: public abstract class Map<A,B>
00007: {
00008:   public static <A,B> Map<A,B> empty ()
00009:   {
00010:     return new MapList<A,B> ();
00011:   }
00012: 
00013: 
00014:   public abstract Map<A,B> add (A key, B value);
00015:   public abstract B get (A key);
00016:   public abstract List<A> keyList ();
00017: }
00018: 
00019: 
00020: 

file:MapList.java [source] [doc-public] [doc-private]
00001: package clogs.util;
00002: 
00003: import java.util.NoSuchElementException;
00004: 
00005: 
00006: class MapList<A,B> extends Map<A,B>
00007: {
00008:   private final List<A> keys;
00009:   private final List<B> values;
00010: 
00011: 
00012:   MapList ()
00013:   {
00014:     this.keys = List.<A>nil ();
00015:     this.values = List.<B>nil ();
00016:   }
00017: 
00018: 
00019:   private MapList (List<A> keys, List<B> values)
00020:   {
00021:     this.keys = keys;
00022:     this.values = values;
00023:   }
00024: 
00025: 
00026:   public Map<A,B> add (A key, B value)
00027:   {
00028:     return new MapList<A,B> (keys.cons (key), values.cons (value));
00029:   }
00030: 
00031: 
00032:   public B get (A key)
00033:   {
00034:     List<A> ks = keys; 
00035:     List<B> vs = values;
00036:     while (!ks.isNil ()) {
00037:       if (ks.head ().equals (key)) {
00038:         return vs.head ();
00039:       }
00040:       ks = ks.tail ();
00041:       vs = vs.tail ();
00042:     }
00043:     return null;
00044:   }
00045: 
00046: 
00047:   public List<A> keyList ()
00048:   {
00049:     return keys;
00050:   }
00051: 
00052: 
00053:   public String toString ()
00054:   {
00055:     StringBuffer sb = new StringBuffer ();
00056: 
00057:     if (keys.isNil ()) {
00058:       return ("[]");
00059:     }
00060: 
00061:     sb.append ("[ ");
00062:     List<A> ks = keys; 
00063:     List<B> vs = values;
00064:     boolean first = true;
00065:     while (!ks.isNil ()) {
00066:       if (first) {
00067:         first = false;
00068:       } else {
00069:         sb.append (", ");
00070:       }
00071:       sb.append (ks.head ());
00072:       sb.append (" = "); 
00073:       sb.append (vs.head ());
00074:       ks = ks.tail ();
00075:       vs = vs.tail ();
00076:     }
00077:     sb.append (" ]");
00078: 
00079:     return sb.toString ();
00080:   }
00081: }
00082: 

Previous pageContentsNext page