home *** CD-ROM | disk | FTP | other *** search
/ S283 Planetary Science &… the Search for Life CD 3 / 0_CD-ROM.iso / install / jre1_3 / lib / rt.jar / sun / misc / RegexpPool.class (.txt) < prev    next >
Encoding:
Java Class File  |  1979-12-31  |  2.8 KB  |  213 lines

  1. package sun.misc;
  2.  
  3. import java.io.PrintStream;
  4.  
  5. public class RegexpPool {
  6.    private RegexpNode prefixMachine = new RegexpNode();
  7.    private RegexpNode suffixMachine = new RegexpNode();
  8.    private static final int BIG = Integer.MAX_VALUE;
  9.    private int lastDepth = Integer.MAX_VALUE;
  10.  
  11.    public void add(String var1, Object var2) throws REException {
  12.       this.add(var1, var2, false);
  13.    }
  14.  
  15.    public void replace(String var1, Object var2) {
  16.       try {
  17.          this.add(var1, var2, true);
  18.       } catch (Exception var4) {
  19.       }
  20.  
  21.    }
  22.  
  23.    public Object delete(String var1) {
  24.       Object var2 = null;
  25.       RegexpNode var3 = this.prefixMachine;
  26.       RegexpNode var4 = var3;
  27.       int var5 = var1.length() - 1;
  28.       boolean var7 = true;
  29.       if (!var1.startsWith("*") || !var1.endsWith("*")) {
  30.          ++var5;
  31.       }
  32.  
  33.       if (var5 <= 0) {
  34.          return null;
  35.       } else {
  36.          for(int var6 = 0; var3 != null; ++var6) {
  37.             if (var3.result != null && var3.depth < Integer.MAX_VALUE && (!var3.exact || var6 == var5)) {
  38.                var4 = var3;
  39.             }
  40.  
  41.             if (var6 >= var5) {
  42.                break;
  43.             }
  44.  
  45.             var3 = var3.find(var1.charAt(var6));
  46.          }
  47.  
  48.          var3 = this.suffixMachine;
  49.          int var9 = var5;
  50.  
  51.          while(true) {
  52.             --var9;
  53.             if (var9 < 0 || var3 == null) {
  54.                if (var7) {
  55.                   if (var1.equals(var4.re)) {
  56.                      method_0("Deleting " + var4.re);
  57.                      var2 = var4.result;
  58.                      var4.result = null;
  59.                   }
  60.                } else if (var1.equals(var4.re)) {
  61.                   var2 = var4.result;
  62.                   var4.result = null;
  63.                }
  64.  
  65.                return var2;
  66.             }
  67.  
  68.             if (var3.result != null && var3.depth < Integer.MAX_VALUE) {
  69.                var7 = false;
  70.                var4 = var3;
  71.             }
  72.  
  73.             var3 = var3.find(var1.charAt(var9));
  74.          }
  75.       }
  76.    }
  77.  
  78.    public Object match(String var1) {
  79.       return this.matchAfter(var1, Integer.MAX_VALUE);
  80.    }
  81.  
  82.    public Object matchNext(String var1) {
  83.       return this.matchAfter(var1, this.lastDepth);
  84.    }
  85.  
  86.    private void add(String var1, Object var2, boolean var3) throws REException {
  87.       int var4 = var1.length();
  88.       RegexpNode var5;
  89.       if (var1.charAt(0) == '*') {
  90.          for(var5 = this.suffixMachine; var4 > 1; var5 = var5.add(var1.charAt(var4))) {
  91.             --var4;
  92.          }
  93.       } else {
  94.          boolean var6 = false;
  95.          if (var1.charAt(var4 - 1) == '*') {
  96.             --var4;
  97.          } else {
  98.             var6 = true;
  99.          }
  100.  
  101.          var5 = this.prefixMachine;
  102.  
  103.          for(int var7 = 0; var7 < var4; ++var7) {
  104.             var5 = var5.add(var1.charAt(var7));
  105.          }
  106.  
  107.          var5.exact = var6;
  108.       }
  109.  
  110.       if (var5.result != null && !var3) {
  111.          throw new REException(var1 + " is a duplicate");
  112.       } else {
  113.          var5.re = var1;
  114.          var5.result = var2;
  115.       }
  116.    }
  117.  
  118.    private Object matchAfter(String var1, int var2) {
  119.       RegexpNode var3 = this.prefixMachine;
  120.       RegexpNode var4 = var3;
  121.       int var5 = 0;
  122.       int var6 = 0;
  123.       int var7 = var1.length();
  124.       if (var7 <= 0) {
  125.          return null;
  126.       } else {
  127.          for(int var8 = 0; var3 != null; ++var8) {
  128.             if (var3.result != null && var3.depth < var2 && (!var3.exact || var8 == var7)) {
  129.                this.lastDepth = var3.depth;
  130.                var4 = var3;
  131.                var5 = var8;
  132.                var6 = var7;
  133.             }
  134.  
  135.             if (var8 >= var7) {
  136.                break;
  137.             }
  138.  
  139.             var3 = var3.find(var1.charAt(var8));
  140.          }
  141.  
  142.          var3 = this.suffixMachine;
  143.          int var11 = var7;
  144.  
  145.          while(true) {
  146.             --var11;
  147.             if (var11 < 0 || var3 == null) {
  148.                Object var9 = var4.result;
  149.                if (var9 != null && var9 instanceof RegexpTarget) {
  150.                   var9 = ((RegexpTarget)var9).found(var1.substring(var5, var6));
  151.                }
  152.  
  153.                return var9;
  154.             }
  155.  
  156.             if (var3.result != null && var3.depth < var2) {
  157.                this.lastDepth = var3.depth;
  158.                var4 = var3;
  159.                var5 = 0;
  160.                var6 = var11 + 1;
  161.             }
  162.  
  163.             var3 = var3.find(var1.charAt(var11));
  164.          }
  165.       }
  166.    }
  167.  
  168.    public void reset() {
  169.       this.lastDepth = Integer.MAX_VALUE;
  170.    }
  171.  
  172.    public static void main(String[] var0) {
  173.       if (var0.length < 5) {
  174.          method_0("need 5 params");
  175.          System.exit(1);
  176.       }
  177.  
  178.       RegexpPool var1 = new RegexpPool();
  179.  
  180.       try {
  181.          for(int var2 = 1; var2 < var0.length; ++var2) {
  182.             var1.add(var0[var2], var0[var2]);
  183.          }
  184.  
  185.          method_0("Trying to delete " + var0[3]);
  186.          var1.delete(var0[3]);
  187.       } catch (Exception var3) {
  188.       }
  189.  
  190.       method_0((String)var1.match(var0[0]));
  191.    }
  192.  
  193.    public void print(PrintStream var1) {
  194.       var1.print("Regexp pool:\n");
  195.       if (this.suffixMachine.firstchild != null) {
  196.          var1.print(" Suffix machine: ");
  197.          this.suffixMachine.firstchild.print(var1);
  198.          var1.print("\n");
  199.       }
  200.  
  201.       if (this.prefixMachine.firstchild != null) {
  202.          var1.print(" Prefix machine: ");
  203.          this.prefixMachine.firstchild.print(var1);
  204.          var1.print("\n");
  205.       }
  206.  
  207.    }
  208.  
  209.    // $FF: renamed from: p (java.lang.String) void
  210.    private static void method_0(String var0) {
  211.    }
  212. }
  213.