001 package sysModel.classFile.constantPool;
002
003 import java.io.DataInputStream;
004 import java.io.DataOutputStream;
005 import java.io.IOException;
006
007 /**
008 * Represents UTF data in the constant pool.
009 *
010 * @author Mathias Ricken
011 */
012 public abstract class AUTFPoolInfo extends APoolInfo {
013 /**
014 * Data.
015 */
016 protected String _strValue;
017
018 /**
019 * Constructor.
020 *
021 * @param type constant pool object type
022 * @param s data
023 */
024 public AUTFPoolInfo(int type, String s, ConstantPool cp) {
025 super(type, cp);
026 _strValue = s;
027 }
028
029 /**
030 * Constructor reading from a stream.
031 *
032 * @param type type, either ASCII or UNICODE
033 * @param dis input stream
034 * @param cp constant pool
035 *
036 * @throws IOException
037 */
038 public AUTFPoolInfo(int type, DataInputStream dis, ConstantPool cp) throws IOException {
039 super(type, cp);
040 StringBuffer xxBuf = new StringBuffer();
041
042 int len = dis.readShort();
043 while(0 < len) {
044 char c = (char)(dis.readByte());
045 xxBuf.append(c);
046 --len;
047 }
048 _strValue = xxBuf.toString();
049 }
050
051 /**
052 * Mutator for the data.
053 *
054 * @param strValue new data
055 */
056 public void setStrValue(String strValue) {
057 _strValue = strValue;
058 }
059
060 /**
061 * Write this constant pool object into the stream, including the type byte.
062 *
063 * @param dos stream
064 *
065 * @throws IOException
066 */
067 public void write(DataOutputStream dos) throws IOException {
068 reindex();
069 dos.writeByte(_type);
070 dos.writeShort(_strValue.length());
071 dos.writeBytes(_strValue);
072 }
073
074 /**
075 * Resolve constant pool objects. This makes sure that the object links match the index links.
076 */
077 public void resolve() {
078 // do nothing
079 }
080
081 /**
082 * Reindex constant pool indices. This makes sure the index links match the object links.
083 */
084 public void reindex() {
085 // do nothing
086 }
087
088 /**
089 * Return a human-readable version of this constant pool object.
090 *
091 * @return string
092 */
093 public abstract String toStringVerbose();
094
095 /**
096 * Return a human-readable version of this constant pool object.
097 *
098 * @return string
099 */
100 public String toString() {
101 return _strValue;
102 }
103
104 /**
105 * Return a hash code.
106 *
107 * @return hash code
108 */
109 public int hashCode() {
110 return _strValue.hashCode();
111 }
112
113 /**
114 * Compare this object and another one.
115 *
116 * @param obj other object
117 *
118 * @return true if the same
119 */
120 public abstract boolean equals(Object obj);
121 }