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