View Javadoc

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  }