📄 history.java
字号:
package xcalc;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.util.Enumeration;
import java.util.Vector;
import javax.microedition.rms.RecordStore;
public final class History {
private static final String XCALC_HISTORY = "XCALCHistory";
private final Vector formulars;
private final Vector results;
private RecordStore store;
private final ByteArrayOutputStream byteOutStream ;
private final DataOutputStream dataOutStream;
public History(){
formulars = new Vector();
results = new Vector();
byteOutStream = new ByteArrayOutputStream();
dataOutStream = new DataOutputStream(byteOutStream);
try {
store = RecordStore.openRecordStore(XCALC_HISTORY,true);
} catch(Exception e) {
}
}
public void add(final Vector formular,final Real result){
formulars.insertElementAt(formular,0);
results.insertElementAt(result,0);
if(formulars.size() > 8) {
formulars.removeElementAt(8);
results.removeElementAt(8);
}
saveHistory();
}
public int size(){
return formulars.size();
}
public String getFormular(final int index){
StringBuffer result = new StringBuffer();
for (Enumeration e = ((Vector)formulars.elementAt(index)).elements() ; e.hasMoreElements();) {
result.append(e.nextElement());
}
return result.toString();
}
public String getResult(final int index){
return ((Real)results.elementAt(index)).toString();
}
public Real ANS(){
if(results.size()>0){
return(Real)results.elementAt(0);
} else {
return Real.ZERO;
}
}
public void loadHistory(){
try {
final int numrecords = store.getNumRecords();
if (numrecords == 0) return;
for(int i=0;i<numrecords;++i){
final int size = store.getRecordSize(i+1);
final byte[] buff = new byte[size];
store.getRecord(i+1, buff, 0);
final ByteArrayInputStream byteInputStream = new ByteArrayInputStream(buff);
final DataInputStream dataInputStream = new DataInputStream(byteInputStream);
Real res = new Real();
res.sign = dataInputStream.readByte();
res.exponent = dataInputStream.readInt();
res.mantissa = dataInputStream.readLong();
results.addElement(res);
final Vector formular = new Vector();
while(dataInputStream.available()>=4){
final int tokentype = dataInputStream.readInt();
formular.addElement(Solver.C_COMMANDS[tokentype]);
}
formulars.addElement(formular);
}
} catch(Exception x) {
}
}
private void saveHistory(){
try {
final int numrecords = store.getNumRecords();
for(int i=0;i<formulars.size();++i){
byteOutStream.reset();
Real result = ((Real)results.elementAt(i));
dataOutStream.writeByte(result.sign);
dataOutStream.writeInt(result.exponent);
dataOutStream.writeLong(result.mantissa);
final Vector formular = (Vector)formulars.elementAt(i);
for(int j=0;j<formular.size();++j){
final int tokentype = Solver.tokenType((String)formular.elementAt(j));
dataOutStream.writeInt(tokentype);
}
dataOutStream.flush();
final byte[] buff = byteOutStream.toByteArray();
if (numrecords <= i)
store.addRecord(buff, 0, buff.length);
else
store.setRecord(i+1, buff, 0, buff.length);
}
} catch(Exception x) {
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -