1 package kawa.lang; 2 import gnu.mapping.*; 3 import gnu.lists.*; 4 import java.io.*; 5 import gnu.text.Printable; 6 7 public class PairPat extends Pattern implements Printable, Externalizable 8 { 9 Pattern car; 10 Pattern cdr; 11 private int car_count, cdr_count; 12 13 public PairPat () 14 { 15 } 16 17 public PairPat (Pattern car, Pattern cdr) 18 { 19 this.car = car; 20 this.cdr = cdr; 21 car_count = car.varCount (); 22 cdr_count = cdr.varCount (); 23 } 24 25 public static PairPat make (Pattern car, Pattern cdr) 26 { 27 return new PairPat (car, cdr); 28 } 29 30 public boolean match (Object obj, Object [] vars, int start_vars) 31 { 32 if (! (obj instanceof Pair)) 33 return false; 34 Pair pair = (Pair) obj; 35 return (car.match (pair.car, vars, start_vars) 36 && cdr.match (pair.cdr, vars, start_vars + car_count)); 37 } 38 39 public void print (Consumer out) 40 { 41 out.write("#<pair-pattern car: "); 42 car.print(out); 43 out.write(" cdr: "); 44 cdr.print(out); 45 out.write('>'); 46 } 47 48 public int varCount () { return car_count + cdr_count; } 49 50 53 public void writeExternal(ObjectOutput out) throws IOException 54 { 55 out.writeObject(car); 56 out.writeObject(cdr); 57 } 58 59 public void readExternal(ObjectInput in) 60 throws IOException, ClassNotFoundException 61 { 62 car = (Pattern) in.readObject(); 63 cdr = (Pattern) in.readObject(); 64 } 65 } 66 | Popular Tags |