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:
|