📄 name.java
字号:
} /** * Replace all `from' bytes in this name with `to' bytes. */ public Name replace(byte from, byte to) { byte[] names = table.names; int i = 0; while (i < len) { if (names[index + i] == from) { byte[] bs = new byte[len]; System.arraycopy(names, index, bs, 0, i); bs[i] = to; i++; while (i < len) { byte b = names[index + i]; bs[i] = b == from ? to : b; i++; } return fromUtf(table, bs, 0, len); } i++; } return this; } /** * Return the concatenation of this name and name `n'. */ public Name append(Name n) { byte[] bs = new byte[len + n.len]; getBytes(bs, 0); n.getBytes(bs, len); return fromUtf(table, bs, 0, bs.length); } /** * Return the concatenation of this name, the given ASCII * character, and name `n'. */ public Name append(char c, Name n) { byte[] bs = new byte[len + n.len + 1]; getBytes(bs, 0); bs[len] = (byte) c; n.getBytes(bs, len + 1); return fromUtf(table, bs, 0, bs.length); } /** * Return the concatenation of all names in the array `ns'. */ public static Name concat(Table table, Name[] ns) { int len = 0; for (int i = 0; i < ns.length; i++) len = len + ns[i].len; byte[] bs = new byte[len]; len = 0; for (int i = 0; i < ns.length; i++) { ns[i].getBytes(bs, len); len = len + ns[i].len; } return fromUtf(table, bs, 0, len); } public static class Table { private static List freelist = List.make(); private static synchronized Table make() { while (freelist.nonEmpty()) { Table t = (Name.Table)((SoftReference) freelist.head).get(); freelist = freelist.tail; if (t != null) return t; } return new Table(); } private static synchronized void dispose(Table t) { freelist = freelist.prepend(new SoftReference(t)); } public void dispose() { dispose(this); } private static final Context.Key namesKey = new Context.Key(); public static Table instance(Context context) { Table instance = (Name.Table) context.get(namesKey); if (instance == null) { instance = make(); context.put(namesKey, instance); } return instance; } /** * The hash table for names. */ private Name[] hashes; /** * The array holding all encountered names. */ public byte[] names; /** * The mask to be used for hashing */ private int hashMask; /** * The number of filled bytes in `names'. */ private int nc = 0; /** * Allocator * @param hashSize the (constant) size to be used for the hash table * needs to be a power of two. * @param nameSize the initial size of the name table. */ public Table(int hashSize, int nameSize) { super(); hashMask = hashSize - 1; hashes = new Name[hashSize]; names = new byte[nameSize]; slash = fromString("/"); hyphen = fromString("-"); slashequals = fromString("/="); deprecated = fromString("deprecated"); init = fromString("<init>"); clinit = fromString("<clinit>"); error = fromString("<error>"); any = fromString("<any>"); empty = fromString(""); one = fromString("1"); period = fromString("."); dollar = fromString("$"); comma = fromString(","); semicolon = fromString(";"); asterisk = fromString("*"); _this = fromString("this"); _super = fromString("super"); __input = fromString("__input"); _null = fromString("null"); _false = fromString("false"); _true = fromString("true"); _class = fromString("class"); emptyPackage = fromString("unnamed package"); java_lang = fromString("java.lang"); java_lang_Object = fromString("java.lang.Object"); java_lang_Cloneable = fromString("java.lang.Cloneable"); java_io_Serializable = fromString("java.io.Serializable"); ConstantValue = fromString("ConstantValue"); LineNumberTable = fromString("LineNumberTable"); LocalVariableTable = fromString("LocalVariableTable"); CharacterRangeTable = fromString("CharacterRangeTable"); SourceID = fromString("SourceID"); CompilationID = fromString("CompilationID"); Code = fromString("Code"); Exceptions = fromString("Exceptions"); SourceFile = fromString("SourceFile"); InnerClasses = fromString("InnerClasses"); Synthetic = fromString("Synthetic"); Deprecated = fromString("Deprecated"); dollarAssertionsDisabled = fromString("$assertionsDisabled"); desiredAssertionStatus = fromString("desiredAssertionStatus"); append = fromString("append"); forName = fromString("forName"); toString = fromString("toString"); length = fromString("length"); valueOf = fromString("valueOf"); classDollar = fromString("class$"); thisDollar = fromString("this$"); valDollar = fromString("val$"); accessDollar = fromString("access$"); getMessage = fromString("getMessage"); getClass = fromString("getClass"); TYPE = fromString("TYPE"); Array = fromString("Array"); Method = fromString("Method"); clone = fromString("clone"); getComponentType = fromString("getComponentType"); getClassLoader = fromString("getClassLoader"); initCause = fromString("initCause"); } public Table() { this(32768, 131072); } /** * Create a name from the bytes in cs[start..start+len-1]. * Assume that bytes are in utf8 format. */ public Name fromUtf(byte[] cs, int start, int len) { return Name.fromUtf(this, cs, start, len); } /** * Create a name from the bytes in array cs. * Assume that bytes are in utf8 format. */ public Name fromUtf(byte[] cs) { return Name.fromUtf(this, cs, 0, cs.length); } /** * Create a name from the characters in cs[start..start+len-1]. */ public Name fromChars(char[] cs, int start, int len) { return Name.fromChars(this, cs, start, len); } /** * Create a name from the characters in string s. */ public Name fromString(String s) { return Name.fromString(this, s); } public final Name slash; public final Name hyphen; public final Name slashequals; public final Name deprecated; public final Name init; public final Name clinit; public final Name error; public final Name any; public final Name empty; public final Name one; public final Name period; public final Name dollar; public final Name comma; public final Name semicolon; public final Name asterisk; public final Name _this; public final Name _super; public final Name __input; public final Name _null; public final Name _false; public final Name _true; public final Name _class; public final Name emptyPackage; public final Name java_lang; public final Name java_lang_Object; public final Name java_lang_Cloneable; public final Name java_io_Serializable; public final Name ConstantValue; public final Name LineNumberTable; public final Name LocalVariableTable; public final Name CharacterRangeTable; public final Name SourceID; public final Name CompilationID; public final Name Code; public final Name Exceptions; public final Name SourceFile; public final Name InnerClasses; public final Name Synthetic; public final Name Deprecated; public final Name dollarAssertionsDisabled; public final Name desiredAssertionStatus; public final Name append; public final Name forName; public final Name toString; public final Name length; public final Name valueOf; public final Name classDollar; public final Name thisDollar; public final Name valDollar; public final Name accessDollar; public final Name getMessage; public final Name getClass; public final Name TYPE; public final Name Array; public final Name Method; public final Name clone; public final Name getComponentType; public final Name getClassLoader; public final Name initCause; }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -