home *** CD-ROM | disk | FTP | other *** search
- package espresso;
-
- class Name {
- // $FF: renamed from: nc int
- private static int field_0 = 0;
- private static byte[] names = new byte[131072];
- private static Name[] hashtable = new Name['ΦÇÇ'];
- private static final int NAME_SIZE = 131072;
- private static final int HASH_MASK = 32767;
- private static final int HASH_SIZE = 32768;
- Name next;
- int len;
- int index;
-
- public static Name concat(Name[] var0) {
- int var1 = 0;
-
- for(int var2 = 0; var2 < var0.length; ++var2) {
- var1 += var0[var2].len;
- }
-
- byte[] var3 = new byte[var1];
- var1 = 0;
-
- for(int var4 = 0; var4 < var0.length; ++var4) {
- var0[var4].copyAscii(var3, var1);
- var1 += var0[var4].len;
- }
-
- return fromAscii(var3, 0, var1);
- }
-
- public Name append(Name var1) {
- byte[] var2 = new byte[this.len + var1.len];
- this.copyAscii(var2, 0);
- var1.copyAscii(var2, this.len);
- return fromAscii(var2, 0, var2.length);
- }
-
- public Name subName(int var1, int var2) {
- byte[] var3 = new byte[var2 - var1];
- System.arraycopy(names, this.index + var1, var3, 0, var2 - var1);
- return fromAscii(var3, 0, var3.length);
- }
-
- public boolean startsWith(Name var1) {
- int var2;
- for(var2 = 0; var2 < var1.len && var2 < this.len && names[this.index + var2] == names[var1.index + var2]; ++var2) {
- }
-
- return var2 == var1.len;
- }
-
- public int lastPos(byte var1) {
- int var2;
- for(var2 = this.len - 1; var2 >= 0 && names[this.index + var2] != var1; --var2) {
- }
-
- return var2;
- }
-
- public int pos(byte var1) {
- int var2;
- for(var2 = 0; var2 < this.len && names[this.index + var2] != var1; ++var2) {
- }
-
- return var2;
- }
-
- public byte sub(int var1) {
- return names[this.index + var1];
- }
-
- public boolean equals(Object var1) {
- if (var1 instanceof Name) {
- return this.index == ((Name)var1).index;
- } else {
- return false;
- }
- }
-
- public int hashCode() {
- return this.index;
- }
-
- public String toString() {
- return Convert.ascii2string(names, this.index, this.len);
- }
-
- public byte[] toSource() {
- return Convert.string2source(this.toString());
- }
-
- public byte[] toAscii() {
- byte[] var1 = new byte[this.len];
- System.arraycopy(names, this.index, var1, 0, this.len);
- return var1;
- }
-
- public void copyAscii(byte[] var1, int var2) {
- System.arraycopy(names, this.index, var1, var2, this.len);
- }
-
- public static Name fromString(String var0) {
- byte[] var1 = Convert.string2source(var0);
- return fromSource(var1, 0, var1.length);
- }
-
- public static Name fromSource(byte[] var0, int var1, int var2) {
- byte[] var3 = new byte[var2 * 2];
- int var4 = Convert.source2ascii(var0, var1, var2, var3);
- return fromAscii(var3, 0, var4);
- }
-
- public static Name fromAscii(byte[] var0, int var1, int var2) {
- int var3 = hashValue(var0, var1, var2) & 32767;
-
- Name var4;
- for(var4 = hashtable[var3]; var4 != null && (var4.len != var2 || !equals(var4.index, var0, var1, var2)); var4 = var4.next) {
- }
-
- if (var4 == null) {
- var4 = new Name();
- var4.index = field_0;
- var4.len = var2;
- var4.next = hashtable[var3];
- hashtable[var3] = var4;
-
- for(int var5 = 0; var5 < var2; ++var5) {
- if (field_0 == names.length) {
- byte[] var6 = new byte[names.length * 2];
- System.arraycopy(names, 0, var6, 0, names.length);
- names = var6;
- }
-
- names[field_0++] = var0[var1 + var5];
- }
-
- if (var2 == 0) {
- ++field_0;
- }
- }
-
- return var4;
- }
-
- private static boolean equals(int var0, byte[] var1, int var2, int var3) {
- int var4;
- for(var4 = 0; var4 < var3 && names[var0 + var4] == var1[var2 + var4]; ++var4) {
- }
-
- return var4 == var3;
- }
-
- private static int hashValue(byte[] var0, int var1, int var2) {
- return var2 > 0 ? var2 * 68921 + var0[var1] * 1681 + var0[var1 + var2 - 1] * 41 + var0[var1 + (var2 >> 1)] : 0;
- }
-
- public Name() {
- }
- }
-