Changeset 164:007f8dbb3134 in livinglogic.java.ul4

Show
Ignore:
Timestamp:
07/31/08 14:19:18 (11 years ago)
Author:
Walter Doerwald <walter@…>
Branch:
default
Message:

Implement one-arg find and rfind methods. Fix opcode hanlding for OC_GETSLICE2.

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

Legend:

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

    r163 r164  
    118118    public static final int CM1_ENDSWITH = 6; 
    119119    public static final int CM1_FIND = 7; 
    120     public static final int CM1_FORMAT = 8; 
    121     public static final int CM1_GET = 9; 
     120    public static final int CM1_RFIND = 8; 
     121    public static final int CM1_FORMAT = 9; 
     122    public static final int CM1_GET = 10; 
    122123 
    123124    public static final int CM2_SPLIT = 0; 
     
    398399        else if (name.equals("find")) 
    399400            return CM1_FIND; 
     401        else if (name.equals("rfind")) 
     402            return CM1_RFIND; 
    400403        else if (name.equals("format")) 
    401404            return CM1_FORMAT; 
  • library/src/com/livinglogic/ul4/Template.java

    r163 r164  
    10401040                            break; 
    10411041                        case Opcode.OC_GETSLICE2: 
    1042                             reg[code.r1] = Utils.getSlice(reg[code.r2], null, reg[code.r4]); 
     1042                            reg[code.r1] = Utils.getSlice(reg[code.r2], null, reg[code.r3]); 
    10431043                            break; 
    10441044                        case Opcode.OC_NOT: 
     
    12581258                                case Opcode.CM1_ENDSWITH: 
    12591259                                    reg[code.r1] = Utils.endswith(reg[code.r2], reg[code.r3]); 
    1260                                     break; 
     1260                                    break;*/ 
    12611261                                case Opcode.CM1_FIND: 
    1262                                     reg[code.r1] = Utils.items(reg[code.r2], reg[code.r3]); 
    1263                                     break;*/ 
     1262                                    reg[code.r1] = Utils.find(reg[code.r2], reg[code.r3]); 
     1263                                    break; 
     1264                                case Opcode.CM1_RFIND: 
     1265                                    reg[code.r1] = Utils.rfind(reg[code.r2], reg[code.r3]); 
     1266                                    break; 
    12641267                                case Opcode.CM1_FORMAT: 
    12651268                                    reg[code.r1] = Utils.format(reg[code.r2], reg[code.r3], defaultLocale); 
  • library/src/com/livinglogic/ul4/Utils.java

    r160 r164  
    453453    public static Object getSlice(String arg1, Integer arg2, Integer arg3) 
    454454    { 
    455         return StringUtils.substring(arg1, arg2.intValue(), arg3.intValue()); 
     455        int size = arg1.length(); 
     456        int start = getSliceStartPos(size, arg2); 
     457        int end = getSliceEndPos(size, arg3); 
     458        if (end < start) 
     459            end = start; 
     460        return StringUtils.substring(arg1, start, end); 
    456461    } 
    457462 
     
    11881193    } 
    11891194 
     1195    public static Object find(Object obj, Object arg1) 
     1196    { 
     1197        if (obj instanceof String && arg1 instanceof String) 
     1198            return new Integer(((String)obj).indexOf((String)arg1)); 
     1199        throw new UnsupportedOperationException("Can't call find on instance of " + obj.getClass() + "!"); 
     1200    } 
     1201 
     1202    public static Object rfind(Object obj, Object arg1) 
     1203    { 
     1204        if (obj instanceof String && arg1 instanceof String) 
     1205            return new Integer(((String)obj).lastIndexOf((String)arg1)); 
     1206        throw new UnsupportedOperationException("Can't call rfind on instance of " + obj.getClass() + "!"); 
     1207    } 
     1208 
    11901209    public static Object items(Map obj) 
    11911210    {