public class Relation { protected DomainRangeList assoc; public Relation() { assoc = null; } public void map(Domain d, Range r) { DomainRangeList found = locate(d); if (found == null) { assoc = new DomainRangeList(new DomainRange(d, r), assoc); } else found.getDomainRange().setRange(r); } public Range lookup(Domain d) { DomainRangeList found = locate(d); if (found != null) return found.getDomainRange().getRange(); else return null; } public void drop(Domain d) { DomainRangeList found = locate(d); if (found != null) { List first = assoc.find(1); first.exchange(found); assoc = assoc.getRest(); } } protected DomainRangeList locate(Domain d) { DomainRangeList drl = assoc; while (drl != null) { DomainRange dr = drl.getDomainRange(); if (d == dr.getDomain()) return(drl); drl = drl.getRest(); } return null; } public static void selfTest() { Domain d1 = new Domain("d1"); Domain d2 = new Domain("d2"); Domain d3 = new Domain("d3"); Range r1 = new Range("r1"); Range r2 = new Range("r2"); Relation r = new Relation(); r.map(d1, r2); r.map(d2, r2); r.map(d3, r1); if (r.lookup(d1) == r2) System.out.println("d1,r2 correct"); else System.out.println("incorrect"); if (r.lookup(d2) == r2) System.out.println("d2,r2 correct"); else System.out.println("incorrect"); if (r.lookup(d3) == r1) System.out.println("d3,r1 correct"); else System.out.println("incorrect"); r.map(d3,r2); r.drop(d1); if (r.lookup(d3) == r2) System.out.println("d3,r2 correct"); else System.out.println("incorrect"); if (r.lookup(d1) == null) System.out.println("d3 dropped correct"); else System.out.println("incorrect"); } public static void main(String args[]) { selfTest(); } }