Changeset 211:81ee70bb3e88 in livinglogic.java.ul4

Show
Ignore:
Timestamp:
02/28/09 15:08:48 (9 years ago)
Author:
Walter Doerwald <walter@…>
Branch:
default
Tags:
exp-10
Message:

Added reversed function (Java part of isssue #5).

Files:
5 modified

Legend:

Unmodified
Added
Removed
  • docs/versiondoc.txt

    r210 r211  
     1exp-10: 
     2----- 
     3 
     4Comments: 
     5* Added reversed() function. 
     6 
     7 
    18exp-9: 
    29----- 
  • library/src/com/livinglogic/ul4/InterpretedTemplate.java

    r204 r211  
    112112     * The version number used in the compiled format of the template. 
    113113     */ 
    114     public static final String VERSION = "8"; 
     114    public static final String VERSION = "9"; 
    115115 
    116116    /** 
     
    11821182                                    reg[code.r1] = Utils.json(reg[code.r2]); 
    11831183                                    break; 
     1184                                case Opcode.CF1_REVERSED: 
     1185                                    reg[code.r1] = Utils.reversed(reg[code.r2]); 
     1186                                    break; 
    11841187                            } 
    11851188                            break; 
     
    19901993                            code(buffer, indent, "reg" + opcode.r1 + " = json(reg" + opcode.r2 + ")"); 
    19911994                            break; 
     1995                        case Opcode.CF1_REVERSED: 
     1996                            code(buffer, indent, "reg" + opcode.r1 + " = reversed(reg" + opcode.r2 + ")"); 
     1997                            break; 
    19921998                        case Opcode.CF1_CHR: 
    19931999                            code(buffer, indent, "reg" + opcode.r1 + " = unichr(reg" + opcode.r2 + ")"); 
  • library/src/com/livinglogic/ul4/Main.java

    r202 r211  
    99    public static void main(String[] args) 
    1010    { 
    11         Template tmpl1 = Compiler.compile("<?print 2*x?>"); 
    12         Template tmpl2 = Compiler.compile("<?print 2*t.render(x=42)?>"); 
     11        Template tmpl = Compiler.compile("<?for i in reversed([1, 2, 3])?>(<?print i?>)<?end for?>"); 
    1312        long start = System.currentTimeMillis(); 
    1413        Map vars = new HashMap(); 
    15         vars.put("t", tmpl1); 
    16         String output = tmpl2.renders(vars); 
     14        vars.put("t", "123"); 
     15        String output = tmpl.renders(vars); 
    1716        System.out.println("rendered " + (System.currentTimeMillis()-start)); 
    1817        System.out.println(output); 
  • library/src/com/livinglogic/ul4/Opcode.java

    r202 r211  
    100100    public static final int CF1_GET = 25; 
    101101    public static final int CF1_JSON = 26; 
     102    public static final int CF1_REVERSED = 27; 
    102103 
    103104    public static final int CF2_RANGE = 0; 
     
    368369        else if (name.equals("json")) 
    369370            return CF1_JSON; 
     371        else if (name.equals("reversed")) 
     372            return CF1_REVERSED; 
    370373        else 
    371374            throw new UnknownFunctionException(name); 
  • library/src/com/livinglogic/ul4/Utils.java

    r200 r211  
    103103    { 
    104104        throw new UnsupportedOperationException("Strings don't support character removal!"); 
     105    } 
     106} 
     107 
     108class StringReversedIterator implements Iterator 
     109{ 
     110    String string; 
     111 
     112    int stringSize; 
     113 
     114    int index; 
     115 
     116    public StringReversedIterator(String string) 
     117    { 
     118        this.string = string; 
     119        stringSize = string.length(); 
     120        index = stringSize - 1; 
     121    } 
     122 
     123    public boolean hasNext() 
     124    { 
     125        return index >= 0; 
     126    } 
     127 
     128    public Object next() 
     129    { 
     130        if (index < 0) 
     131        { 
     132            throw new NoSuchElementException("No more characters available!"); 
     133        } 
     134        return String.valueOf(string.charAt(index--)); 
     135    } 
     136 
     137    public void remove() 
     138    { 
     139        throw new UnsupportedOperationException("Strings don't support character removal!"); 
     140    } 
     141} 
     142 
     143class ListReversedIterator implements Iterator 
     144{ 
     145    List list; 
     146 
     147    int listSize; 
     148 
     149    int index; 
     150 
     151    public ListReversedIterator(List list) 
     152    { 
     153        this.list = list; 
     154        listSize = list.size(); 
     155        index = listSize - 1; 
     156    } 
     157 
     158    public boolean hasNext() 
     159    { 
     160        return index >= 0; 
     161    } 
     162 
     163    public Object next() 
     164    { 
     165        if (index < 0) 
     166        { 
     167            throw new NoSuchElementException("No more items available!"); 
     168        } 
     169        return list.get(index--); 
     170    } 
     171 
     172    public void remove() 
     173    { 
     174        list.remove(index); 
    105175    } 
    106176} 
     
    839909    } 
    840910     
     911    public static Iterator reversed(Object obj) 
     912    { 
     913        if (obj instanceof String) 
     914            return new StringReversedIterator((String)obj); 
     915        else if (obj instanceof List) 
     916            return new ListReversedIterator((List)obj); 
     917        throw new UnsupportedOperationException("Can't created reversed iterator for instance of " + obj.getClass() + "!"); 
     918    } 
     919     
    841920    public static Object length(String obj) 
    842921    {