/**
* This file is part of miniCDx benchmark of oSCJ.
*
* miniCDx is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* miniCDx is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with miniCDx. If not, see <http://www.gnu.org/licenses/>.
*
*
* Copyright 2009, 2010
* @authors Daniel Tang, Ales Plsek
*
* See: http://sss.cs.purdue.edu/projects/oscj/
*/
package minicdj.cdx;
// The purpose of this class is to allow printing debug messages with
// callsigns (byte arrays) and floating point data from a no-heap thread.
// With standard Java ways of doing this, we get MemoryAccessError, due to
// the internal use of ThreadLocal by Sun RTS for character encoders/decoders
// (and possibly other things). With encoders/decoders, the lazy initialization
// leads to uncontrolled allocation wrt to scope. Most likely the problem is that
// the thread locals get allocated on the heap.
// Note that these converters are intentionally incorrect. We have no
// control over the use of thread locals in VM libraries, so these may very
// not work / not be needed on other VMs.
public class ASCIIConverter {
public static String bytesToString(byte[] bytes) {
char[] chars = new char[bytes.length];
for (int i = 0; i < bytes.length; i++) {
chars[i] = (char) bytes[i];
}
return new String(chars);
}
public static String floatToString(float f) {
long intPart = (long) Math.ceil(f);
long fewDigits = (long) ((f - intPart) * 1000);
return "" + intPart + "." + fewDigits;
}
}