home *** CD-ROM | disk | FTP | other *** search
/ Symantec Visual Cafe for Java 2.5 / symantec-visual-cafe-2.5-database-dev-edition.iso / VPage / Java.bin / CLASSES.ZIP / sun / tools / tree / Vset.class (.txt) < prev    next >
Encoding:
Java Class File  |  1997-07-08  |  3.8 KB  |  310 lines

  1. package sun.tools.tree;
  2.  
  3. import sun.tools.java.Constants;
  4.  
  5. public final class Vset implements Constants {
  6.    long vset;
  7.    long uset;
  8.    // $FF: renamed from: x long[]
  9.    long[] field_0;
  10.    static final long[] emptyX = new long[0];
  11.    static final long[] fullX = new long[0];
  12.    static final int VBITS = 64;
  13.    static final Vset DEAD_END;
  14.  
  15.    public Vset() {
  16.       this.field_0 = emptyX;
  17.    }
  18.  
  19.    private Vset(long var1, long var3, long[] var5) {
  20.       this.vset = var1;
  21.       this.uset = var3;
  22.       this.field_0 = var5;
  23.    }
  24.  
  25.    public Vset copy() {
  26.       if (this == DEAD_END) {
  27.          return this;
  28.       } else {
  29.          Vset var1 = new Vset(this.vset, this.uset, this.field_0);
  30.          if (this.field_0.length > 0) {
  31.             var1.growX(this.field_0.length);
  32.          }
  33.  
  34.          return var1;
  35.       }
  36.    }
  37.  
  38.    private void growX(int var1) {
  39.       long[] var2 = new long[var1];
  40.       long[] var3 = this.field_0;
  41.  
  42.       for(int var4 = 0; var4 < var3.length; ++var4) {
  43.          var2[var4] = var3[var4];
  44.       }
  45.  
  46.       this.field_0 = var2;
  47.    }
  48.  
  49.    public boolean isDeadEnd() {
  50.       return this.field_0 == fullX;
  51.    }
  52.  
  53.    public Vset clearDeadEnd() {
  54.       if (this == DEAD_END) {
  55.          long var1 = this.uset;
  56.          var1 &= ~this.vset;
  57.          return new Vset(this.vset, var1, emptyX);
  58.       } else {
  59.          this.uset &= ~this.vset;
  60.          if (this.field_0 == fullX) {
  61.             this.field_0 = emptyX;
  62.          }
  63.  
  64.          return this;
  65.       }
  66.    }
  67.  
  68.    public boolean testVar(int var1) {
  69.       long var2 = 1L << var1;
  70.       if (var1 >= 64) {
  71.          int var4 = (var1 / 64 - 1) * 2;
  72.          if (var4 >= this.field_0.length) {
  73.             return this.field_0 == fullX;
  74.          } else {
  75.             return (this.field_0[var4] & var2) != 0L;
  76.          }
  77.       } else {
  78.          return (this.vset & var2) != 0L;
  79.       }
  80.    }
  81.  
  82.    public boolean testVarUnassigned(int var1) {
  83.       long var2 = 1L << var1;
  84.       if (var1 >= 64) {
  85.          int var4 = (var1 / 64 - 1) * 2;
  86.          ++var4;
  87.          if (var4 >= this.field_0.length) {
  88.             return this.field_0 == fullX;
  89.          } else {
  90.             return (this.field_0[var4] & var2) != 0L;
  91.          }
  92.       } else {
  93.          return (this.uset & var2) != 0L;
  94.       }
  95.    }
  96.  
  97.    public Vset addVar(int var1) {
  98.       long var2 = 1L << var1;
  99.       if (var1 >= 64) {
  100.          int var4 = (var1 / 64 - 1) * 2;
  101.          if (var4 >= this.field_0.length) {
  102.             if (this.field_0 == fullX) {
  103.                return this;
  104.             }
  105.  
  106.             this.growX(var4 + 1);
  107.          }
  108.  
  109.          long[] var10000 = this.field_0;
  110.          var10000[var4] |= var2;
  111.          if (var4 + 1 < this.field_0.length) {
  112.             var10000 = this.field_0;
  113.             var10000[var4 + 1] &= ~var2;
  114.          }
  115.       } else {
  116.          this.vset |= var2;
  117.          this.uset &= ~var2;
  118.       }
  119.  
  120.       return this;
  121.    }
  122.  
  123.    public Vset addVarUnassigned(int var1) {
  124.       long var2 = 1L << var1;
  125.       if (var1 >= 64) {
  126.          int var4 = (var1 / 64 - 1) * 2;
  127.          ++var4;
  128.          if (var4 >= this.field_0.length) {
  129.             if (this.field_0 == fullX) {
  130.                return this;
  131.             }
  132.  
  133.             this.growX(var4 + 1);
  134.          }
  135.  
  136.          long[] var10000 = this.field_0;
  137.          var10000[var4] |= var2;
  138.          var10000 = this.field_0;
  139.          var10000[var4 - 1] &= ~var2;
  140.       } else {
  141.          this.uset |= var2;
  142.          this.vset &= ~var2;
  143.       }
  144.  
  145.       return this;
  146.    }
  147.  
  148.    public Vset clearVar(int var1) {
  149.       long var2 = 1L << var1;
  150.       if (this == DEAD_END) {
  151.          return this;
  152.       } else {
  153.          if (var1 >= 64) {
  154.             int var4 = (var1 / 64 - 1) * 2;
  155.             if (var4 >= this.field_0.length) {
  156.                return this;
  157.             }
  158.  
  159.             long[] var10000 = this.field_0;
  160.             var10000[var4] &= ~var2;
  161.             if (var4 + 1 < this.field_0.length) {
  162.                var10000 = this.field_0;
  163.                var10000[var4 + 1] &= ~var2;
  164.             }
  165.          } else {
  166.             this.vset &= ~var2;
  167.             this.uset &= ~var2;
  168.          }
  169.  
  170.          return this;
  171.       }
  172.    }
  173.  
  174.    public Vset join(Vset var1) {
  175.       if (this == DEAD_END) {
  176.          return var1.copy();
  177.       } else {
  178.          this.vset &= var1.vset;
  179.          this.uset &= var1.uset;
  180.          long[] var2 = var1.field_0;
  181.          if (var2.length == 0) {
  182.             if (var2 != fullX) {
  183.                this.field_0 = var2;
  184.             }
  185.          } else {
  186.             int var3 = var2.length < this.field_0.length ? var2.length : this.field_0.length;
  187.  
  188.             for(int var4 = 0; var4 < var3; ++var4) {
  189.                long[] var10000 = this.field_0;
  190.                var10000[var4] &= var2[var4];
  191.             }
  192.  
  193.             for(int var5 = var3; var5 < this.field_0.length; ++var5) {
  194.                this.field_0[var5] = 0L;
  195.             }
  196.          }
  197.  
  198.          return this;
  199.       }
  200.    }
  201.  
  202.    public Vset add(Vset var1) {
  203.       if (this == DEAD_END) {
  204.          return this;
  205.       } else if (var1 == DEAD_END) {
  206.          return var1;
  207.       } else {
  208.          this.vset |= var1.vset;
  209.          this.uset |= var1.uset;
  210.          this.uset &= ~this.vset;
  211.          long[] var2 = var1.field_0;
  212.          if (var2.length == 0) {
  213.             if (var2 == fullX) {
  214.                this.field_0 = var2;
  215.             }
  216.          } else if (this.field_0 != fullX) {
  217.             int var3 = var2.length;
  218.             if (var3 > this.field_0.length) {
  219.                this.growX(var3);
  220.             }
  221.  
  222.             for(int var4 = 0; var4 < var3; ++var4) {
  223.                long[] var10000 = this.field_0;
  224.                var10000[var4] |= var2[var4];
  225.             }
  226.  
  227.             for(int var5 = 1; var5 < var3; var5 += 2) {
  228.                long[] var6 = this.field_0;
  229.                var6[var5] &= ~this.field_0[var5 - 1];
  230.             }
  231.          }
  232.  
  233.          return this;
  234.       }
  235.    }
  236.  
  237.    public Vset removeAdditionalVars(int var1) {
  238.       long var2 = 1L << var1;
  239.       if (var1 >= 64) {
  240.          int var4 = (var1 / 64 - 1) * 2;
  241.          if (var4 < this.field_0.length) {
  242.             long[] var10000 = this.field_0;
  243.             var10000[var4] &= var2 - 1L;
  244.             ++var4;
  245.             if (var4 < this.field_0.length) {
  246.                var10000 = this.field_0;
  247.                var10000[var4] &= var2 - 1L;
  248.             }
  249.  
  250.             while(true) {
  251.                ++var4;
  252.                if (var4 >= this.field_0.length) {
  253.                   break;
  254.                }
  255.  
  256.                this.field_0[var4] = 0L;
  257.             }
  258.          }
  259.       } else {
  260.          if (this.field_0.length > 0) {
  261.             this.field_0 = emptyX;
  262.          } else if (this == DEAD_END) {
  263.             return this;
  264.          }
  265.  
  266.          this.vset &= var2 - 1L;
  267.          this.uset &= var2 - 1L;
  268.       }
  269.  
  270.       return this;
  271.    }
  272.  
  273.    public int varLimit() {
  274.       // $FF: Couldn't be decompiled
  275.    }
  276.  
  277.    public String toString() {
  278.       if (this == DEAD_END) {
  279.          return "{DEAD_END}";
  280.       } else {
  281.          StringBuffer var1 = new StringBuffer("{");
  282.          int var2 = 64 * (1 + (this.field_0.length + 1) / 2);
  283.  
  284.          for(int var3 = 0; var3 < var2; ++var3) {
  285.             if (!this.testVarUnassigned(var3)) {
  286.                if (var1.length() > 1) {
  287.                   var1.append(' ');
  288.                }
  289.  
  290.                var1.append(var3);
  291.                if (!this.testVar(var3)) {
  292.                   var1.append('?');
  293.                }
  294.             }
  295.          }
  296.  
  297.          if (this.field_0 == fullX) {
  298.             var1.append("...DEAD_END");
  299.          }
  300.  
  301.          var1.append('}');
  302.          return var1.toString();
  303.       }
  304.    }
  305.  
  306.    static {
  307.       DEAD_END = new Vset(-1L, -1L, fullX);
  308.    }
  309. }
  310.