/** * Copyright (c) 2009-2011, The HATS Consortium. All rights reserved. * This file is licensed under the terms of the Modified BSD License. */ package abs.backend.java.lib.types; public class ABSString extends ABSBuiltInDataType { public static final ABSString EMPTY = new ABSString(""); private final String value; private ABSString(String s) { super(""); this.value = s; } public ABSString add(ABSString s) { return fromString(value + s.value); } @Override public ABSBool eq(ABSValue o) { if (!super.eq(o).toBoolean()) return ABSBool.FALSE; ABSString s = (ABSString) o; return ABSBool.fromBoolean(this.value.equals(s.value)); } public ABSBool gt(ABSValue o) { if (o == null) return ABSBool.FALSE; if (!o.getClass().equals(ABSString.class)) return ABSBool.FALSE; ABSString oi = (ABSString) o; return ABSBool.fromBoolean(this.value.compareTo(oi.value) > 0); } public ABSBool lt(ABSValue o) { if (o == null) return ABSBool.FALSE; if (!o.getClass().equals(ABSString.class)) return ABSBool.FALSE; ABSString oi = (ABSString) o; return ABSBool.fromBoolean(this.value.compareTo(oi.value) < 0); } public ABSBool gtEq(ABSValue o) { if (o == null) return ABSBool.FALSE; if (!o.getClass().equals(ABSString.class)) return ABSBool.FALSE; ABSString oi = (ABSString) o; int res = this.value.compareTo(oi.value); return ABSBool.fromBoolean(res == 0 || res == 1); } public ABSBool ltEq(ABSValue o) { if (o == null) return ABSBool.FALSE; if (!o.getClass().equals(ABSString.class)) return ABSBool.FALSE; ABSString oi = (ABSString) o; int res = this.value.compareTo(oi.value); return ABSBool.fromBoolean(res == 0 || res == -1); } public static ABSString fromString(String s) { if (s.isEmpty()) return EMPTY; return new ABSString(s); } public String getString() { return value; } public ABSInteger strlen() { return ABSInteger.fromInt(value.length()); } public ABSString substr(ABSInteger from, ABSInteger length) { return fromString(value.substring(from.toInt(), from.toInt() + length.toInt())); } @Override public String toString() { return "\"" + value + "\""; } }