Changeset 347:93d54350e8f9 in livinglogic.java.ul4

Show
Ignore:
Timestamp:
02/10/11 14:07:25 (9 years ago)
Author:
Walter Doerwald <walter@…>
Branch:
default
Message:

Better rsplit() implementation. Add str() implementation for date.

Location:
library/src/com/livinglogic/ul4
Files:
2 modified

Legend:

Unmodified
Added
Removed
  • library/src/com/livinglogic/ul4/Main.java

    r343 r347  
    1111    public static void main(String[] args) 
    1212    { 
    13         InterpretedTemplate tmpl = Compiler.compile("<?print utcnow().isoformat()?>"); 
     13        InterpretedTemplate tmpl = Compiler.compile("<?print 'a<=><=>b<=>c'.rsplit('<=>', 10)?>"); 
    1414        System.out.println(tmpl); 
    1515 
    1616        Map vars = new HashMap<String, Object>(); 
    1717        vars.put("t", tmpl); 
    18         long start = System.currentTimeMillis(); 
     18        long start = System.nanoTime(); 
    1919        String output = tmpl.renders(vars); 
    20         System.out.println("rendered " + (System.currentTimeMillis()-start)); 
     20        System.out.println("rendered " + ((System.nanoTime()-start)/1000) + "us"); 
    2121        System.out.println("output " + output); 
    2222        System.out.println(new JavaSource4Template(tmpl)); 
  • library/src/com/livinglogic/ul4/Utils.java

    r344 r347  
    16511651    } 
    16521652 
     1653    public static SimpleDateFormat strDateTimeFormatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 
     1654    public static SimpleDateFormat strTimestampMicroFormatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS'000'"); 
     1655 
    16531656    public static String str(Object obj) 
    16541657    { 
     
    20922095    public static Object rsplit(String obj, int maxsplit) 
    20932096    { 
    2094         return null; // FIXME: 
    2095     } 
    2096  
    2097     public static Object rsplit(String obj, String separator) 
    2098     { 
    2099         LinkedList<String> retVal = new LinkedList<String>(); 
    2100         int length = obj.length(); 
    2101         int delimLength = separator.length(); 
    2102         int pos1 = 0; 
    2103         int pos2; 
    2104         while (pos1 < length) 
    2105         { 
    2106             while ((pos1 < length) && obj.startsWith(separator, pos1)) 
    2107             { 
    2108                 if (0 == pos1) 
    2109                 { 
    2110                     retVal.add(""); 
    2111                 } 
    2112                 pos1 += delimLength; 
    2113                 retVal.add(""); 
    2114             } 
    2115             if (pos1 < length) 
    2116             { 
    2117                 pos2 = pos1 + 1; 
    2118                 if (!retVal.isEmpty()) 
    2119                 { 
    2120                     retVal.removeLast(); 
    2121                 } 
    2122                 while ((pos2 < length) && !obj.startsWith(separator, pos2)) 
    2123                 { 
    2124                     pos2++; 
    2125                 } 
    2126                 retVal.add(obj.substring(pos1, pos2)); 
    2127                 pos1 = pos2; 
    2128             } 
    2129         } 
    2130         return null; // FIXME 
     2097        ArrayList<String> result = new ArrayList<String>(); 
     2098        int start, end; 
     2099        start = end = obj.length() - 1; 
     2100        while (maxsplit-- > 0) 
     2101        { 
     2102            while (start >= 0 && Character.isWhitespace(obj.charAt(start))) 
     2103                --start; 
     2104            if (start < 0) 
     2105                break; 
     2106            end = start--; 
     2107            while (start >= 0 && !Character.isWhitespace(obj.charAt(start))) 
     2108                --start; 
     2109            if (start != end) 
     2110                result.add(0, obj.substring(start+1, end+1)); 
     2111        } 
     2112        if (start >= 0) 
     2113        { 
     2114            while (start >= 0 && Character.isWhitespace(obj.charAt(start))) 
     2115                --start; 
     2116            if (start >= 0) 
     2117                result.add(0, obj.substring(0, start+1)); 
     2118        } 
     2119        return result; 
     2120    } 
     2121 
     2122    public static Object rsplit(String obj, String separator, int maxsplit) 
     2123    { 
     2124        if (separator.length() == 0) 
     2125            throw new UnsupportedOperationException("empty separator not supported"); 
     2126 
     2127        ArrayList<String> result = new ArrayList<String>(); 
     2128        int start, end, seplen = separator.length(); 
     2129        start = end = obj.length(); 
     2130        while (maxsplit-- > 0) 
     2131        { 
     2132            start = obj.lastIndexOf(separator, end-seplen); 
     2133            if (start < 0) 
     2134                break; 
     2135            result.add(0, obj.substring(start+seplen, end)); 
     2136            end = start; 
     2137        } 
     2138        result.add(0, obj.substring(0, end)); 
     2139        return result; 
    21312140    } 
    21322141 
     
    21402149    public static Object rsplit(Object obj, Object arg) 
    21412150    { 
     2151        if (obj instanceof String) 
     2152        { 
     2153            if (arg == null) 
     2154                return Arrays.asList(StringUtils.split((String)obj)); 
     2155            else if (arg instanceof String) 
     2156                return rsplit((String)obj, (String)arg, 0xffffffff); 
     2157        } 
    21422158        throw new UnsupportedOperationException(objectType(obj) + ".rsplit(" + objectType(arg) + ") not supported!"); 
    21432159    } 
     
    21452161    public static Object rsplit(Object obj, Object arg1, Object arg2) 
    21462162    { 
     2163        if (obj instanceof String) 
     2164        { 
     2165            if (arg1 == null) 
     2166                return rsplit((String)obj, _toInt(arg2)); 
     2167            else 
     2168                return rsplit((String)obj, (String)arg1, _toInt(arg2)); 
     2169        } 
    21472170        throw new UnsupportedOperationException(objectType(obj) + ".rsplit(" + objectType(arg1) + ", " + objectType(arg2) + ") not supported!"); 
    21482171    } 
     
    22482271    public static SimpleDateFormat isoTimestampFormatter = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS"); 
    22492272    public static SimpleDateFormat isoTimestampMicroFormatter = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'000'"); 
    2250     public static SimpleDateFormat strDateTimeFormatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss'"); 
    2251     public static SimpleDateFormat strTimestampMicroFormatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS'000'"); 
    22522273 
    22532274    public static String isoformat(Date obj)