home *** CD-ROM | disk | FTP | other *** search
- package sun.tools.tree;
-
- import sun.tools.java.Constants;
-
- public final class Vset implements Constants {
- long vset;
- long uset;
- // $FF: renamed from: x long[]
- long[] field_0;
- static final long[] emptyX = new long[0];
- static final long[] fullX = new long[0];
- static final int VBITS = 64;
- static final Vset DEAD_END;
-
- public Vset() {
- this.field_0 = emptyX;
- }
-
- private Vset(long var1, long var3, long[] var5) {
- this.vset = var1;
- this.uset = var3;
- this.field_0 = var5;
- }
-
- public Vset copy() {
- if (this == DEAD_END) {
- return this;
- } else {
- Vset var1 = new Vset(this.vset, this.uset, this.field_0);
- if (this.field_0.length > 0) {
- var1.growX(this.field_0.length);
- }
-
- return var1;
- }
- }
-
- private void growX(int var1) {
- long[] var2 = new long[var1];
- long[] var3 = this.field_0;
-
- for(int var4 = 0; var4 < var3.length; ++var4) {
- var2[var4] = var3[var4];
- }
-
- this.field_0 = var2;
- }
-
- public boolean isDeadEnd() {
- return this.field_0 == fullX;
- }
-
- public Vset clearDeadEnd() {
- if (this == DEAD_END) {
- long var1 = this.uset;
- var1 &= ~this.vset;
- return new Vset(this.vset, var1, emptyX);
- } else {
- this.uset &= ~this.vset;
- if (this.field_0 == fullX) {
- this.field_0 = emptyX;
- }
-
- return this;
- }
- }
-
- public boolean testVar(int var1) {
- long var2 = 1L << var1;
- if (var1 >= 64) {
- int var4 = (var1 / 64 - 1) * 2;
- if (var4 >= this.field_0.length) {
- return this.field_0 == fullX;
- } else {
- return (this.field_0[var4] & var2) != 0L;
- }
- } else {
- return (this.vset & var2) != 0L;
- }
- }
-
- public boolean testVarUnassigned(int var1) {
- long var2 = 1L << var1;
- if (var1 >= 64) {
- int var4 = (var1 / 64 - 1) * 2;
- ++var4;
- if (var4 >= this.field_0.length) {
- return this.field_0 == fullX;
- } else {
- return (this.field_0[var4] & var2) != 0L;
- }
- } else {
- return (this.uset & var2) != 0L;
- }
- }
-
- public Vset addVar(int var1) {
- long var2 = 1L << var1;
- if (var1 >= 64) {
- int var4 = (var1 / 64 - 1) * 2;
- if (var4 >= this.field_0.length) {
- if (this.field_0 == fullX) {
- return this;
- }
-
- this.growX(var4 + 1);
- }
-
- long[] var10000 = this.field_0;
- var10000[var4] |= var2;
- if (var4 + 1 < this.field_0.length) {
- var10000 = this.field_0;
- var10000[var4 + 1] &= ~var2;
- }
- } else {
- this.vset |= var2;
- this.uset &= ~var2;
- }
-
- return this;
- }
-
- public Vset addVarUnassigned(int var1) {
- long var2 = 1L << var1;
- if (var1 >= 64) {
- int var4 = (var1 / 64 - 1) * 2;
- ++var4;
- if (var4 >= this.field_0.length) {
- if (this.field_0 == fullX) {
- return this;
- }
-
- this.growX(var4 + 1);
- }
-
- long[] var10000 = this.field_0;
- var10000[var4] |= var2;
- var10000 = this.field_0;
- var10000[var4 - 1] &= ~var2;
- } else {
- this.uset |= var2;
- this.vset &= ~var2;
- }
-
- return this;
- }
-
- public Vset clearVar(int var1) {
- long var2 = 1L << var1;
- if (this == DEAD_END) {
- return this;
- } else {
- if (var1 >= 64) {
- int var4 = (var1 / 64 - 1) * 2;
- if (var4 >= this.field_0.length) {
- return this;
- }
-
- long[] var10000 = this.field_0;
- var10000[var4] &= ~var2;
- if (var4 + 1 < this.field_0.length) {
- var10000 = this.field_0;
- var10000[var4 + 1] &= ~var2;
- }
- } else {
- this.vset &= ~var2;
- this.uset &= ~var2;
- }
-
- return this;
- }
- }
-
- public Vset join(Vset var1) {
- if (this == DEAD_END) {
- return var1.copy();
- } else {
- this.vset &= var1.vset;
- this.uset &= var1.uset;
- long[] var2 = var1.field_0;
- if (var2.length == 0) {
- if (var2 != fullX) {
- this.field_0 = var2;
- }
- } else {
- int var3 = var2.length < this.field_0.length ? var2.length : this.field_0.length;
-
- for(int var4 = 0; var4 < var3; ++var4) {
- long[] var10000 = this.field_0;
- var10000[var4] &= var2[var4];
- }
-
- for(int var5 = var3; var5 < this.field_0.length; ++var5) {
- this.field_0[var5] = 0L;
- }
- }
-
- return this;
- }
- }
-
- public Vset add(Vset var1) {
- if (this == DEAD_END) {
- return this;
- } else if (var1 == DEAD_END) {
- return var1;
- } else {
- this.vset |= var1.vset;
- this.uset |= var1.uset;
- this.uset &= ~this.vset;
- long[] var2 = var1.field_0;
- if (var2.length == 0) {
- if (var2 == fullX) {
- this.field_0 = var2;
- }
- } else if (this.field_0 != fullX) {
- int var3 = var2.length;
- if (var3 > this.field_0.length) {
- this.growX(var3);
- }
-
- for(int var4 = 0; var4 < var3; ++var4) {
- long[] var10000 = this.field_0;
- var10000[var4] |= var2[var4];
- }
-
- for(int var5 = 1; var5 < var3; var5 += 2) {
- long[] var6 = this.field_0;
- var6[var5] &= ~this.field_0[var5 - 1];
- }
- }
-
- return this;
- }
- }
-
- public Vset removeAdditionalVars(int var1) {
- long var2 = 1L << var1;
- if (var1 >= 64) {
- int var4 = (var1 / 64 - 1) * 2;
- if (var4 < this.field_0.length) {
- long[] var10000 = this.field_0;
- var10000[var4] &= var2 - 1L;
- ++var4;
- if (var4 < this.field_0.length) {
- var10000 = this.field_0;
- var10000[var4] &= var2 - 1L;
- }
-
- while(true) {
- ++var4;
- if (var4 >= this.field_0.length) {
- break;
- }
-
- this.field_0[var4] = 0L;
- }
- }
- } else {
- if (this.field_0.length > 0) {
- this.field_0 = emptyX;
- } else if (this == DEAD_END) {
- return this;
- }
-
- this.vset &= var2 - 1L;
- this.uset &= var2 - 1L;
- }
-
- return this;
- }
-
- public int varLimit() {
- // $FF: Couldn't be decompiled
- }
-
- public String toString() {
- if (this == DEAD_END) {
- return "{DEAD_END}";
- } else {
- StringBuffer var1 = new StringBuffer("{");
- int var2 = 64 * (1 + (this.field_0.length + 1) / 2);
-
- for(int var3 = 0; var3 < var2; ++var3) {
- if (!this.testVarUnassigned(var3)) {
- if (var1.length() > 1) {
- var1.append(' ');
- }
-
- var1.append(var3);
- if (!this.testVar(var3)) {
- var1.append('?');
- }
- }
- }
-
- if (this.field_0 == fullX) {
- var1.append("...DEAD_END");
- }
-
- var1.append('}');
- return var1.toString();
- }
- }
-
- static {
- DEAD_END = new Vset(-1L, -1L, fullX);
- }
- }
-