package gui; /** * * @author Oliver Chu */ public class Pointer { public byte type; public int value; public Pointer(byte type, int value) { this.type = type; this.value = value; } @Override public String toString() { if (type == Constants.IMG_TYPE) { return "<image>"; } if (type == Constants.RAT_TYPE) { String res = PointerTools.derefRat(this).toBigDecimal().toString(); while (res.endsWith("0") && !res.endsWith(".0") && res.length() > 3) { res = StrTools2.slice(res, 0, -1); } return res; } if (type == Constants.MATCHER_TYPE) { return "<matcher #" + value + ">"; } try { String self = PointerTools.dereferenceAsString(this); if (type == Constants.REAL_TYPE) { String lowered = self.toLowerCase(); if (lowered.equals("nan")) { return "undefined"; } else if (lowered.equals("infinity")) { return "infinity"; } else if (lowered.contains("infinity") && lowered.contains("-")) { return "-infinity"; } else if (lowered.endsWith(".0")) { /** Change myself to an integer. */ int v = ((int) (double) PointerTools.dereferenceReal(this)); byte t = Constants.INT_TYPE; value = v; type = t; return "" + v; } } return self; } catch (MintException ex) { return "<error: stale pointer> - " + ex; } } public String toString2() { return "(" + type + ", " + value + ")"; } boolean equals(Pointer p) { return type == p.type && value == p.value; } }