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 }