1 package com.tapina.robe.swi.clib.stdio.printf; 2 3 import com.sharkysoft.printf.Printf; 4 import com.sharkysoft.printf.PrintfTemplate; 5 import com.tapina.robe.runtime.Environment; 6 import com.tapina.robe.runtime.MemoryMap; 7 import com.tapina.robe.swi.clib.VarArgs; 8 9 /*** 10 * Created by IntelliJ IDEA. 11 * User: gareth 12 * Date: 17-May-2005 13 * Time: 20:08:19 14 * To change this template use File | Settings | File Templates. 15 */ 16 public class Lava3Printf extends PrintfEngine { 17 private static final int FIRST_MEMORY_PARAM = 4; 18 19 public Lava3Printf() { 20 } 21 22 public void printf(String formatString, VarArgs va) { 23 final PrintfTemplate template = new PrintfTemplate(formatString); 24 final Object[] args = getArgs(va, template); 25 26 Printf.out(template, args); 27 } 28 29 public String sprintf(String formatString, VarArgs va) { 30 final PrintfTemplate template = new PrintfTemplate(formatString); 31 final Object[] args = getArgs(va, template); 32 33 return Printf.format(template, args); 34 } 35 36 private Object[] getArgs(final VarArgs va, final PrintfTemplate template) { 37 final Class[] argTypes = template.argTypes(); 38 final Object[] args = new Object[argTypes.length]; 39 40 for (int i = 0; i < argTypes.length; i++) { 41 final Class argType = argTypes[i]; 42 43 if (argType.equals(Number.class)) { 44 args[i] = va.getVarArg(i).asInteger(); 45 } else if (argType.equals(Object.class)) { 46 args[i] = va.getVarArg(i).asString(); 47 } else { 48 log.severe("Cannot handle argument types of " + argType.getName()); 49 throw new RuntimeException("Cannot handle argument types of " + argType.getName()); 50 } 51 } 52 return args; 53 } 54 }