KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > kawa > lang > PairPat


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 JavaDoc obj, Object JavaDoc[] 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   /**
51    * @serialData Write the car and then the cdr patterns (using writeObject).
52    */

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 JavaDoc
61   {
62     car = (Pattern) in.readObject();
63     cdr = (Pattern) in.readObject();
64   }
65 }
66
Popular Tags