-\r
-package javajs.util;\r
-\r
-import javajs.J2SIgnoreImport;\r
-\r
-/**\r
- * Interesting thing here is that JavaScript is 3x faster than Java in handling strings.\r
- * \r
- * Java StringBuilder is final, unfortunately. I guess they weren't thinking about Java2Script!\r
- * \r
- * The reason we have to do this that several overloaded append methods is WAY too expensive\r
- * \r
- */\r
-\r
-@J2SIgnoreImport({java.lang.StringBuilder.class})\r
-public class SB {\r
- \r
- private java.lang.StringBuilder sb;\r
- String s; // used by JavaScript only; no Java references\r
- \r
- //TODO: JS experiment with using array and .push() here\r
-\r
- public SB() {\r
- /**\r
- * @j2sNative\r
- * \r
- * this.s = "";\r
- * \r
- */\r
- {\r
- sb = new java.lang.StringBuilder();\r
- }\r
- }\r
-\r
- public static SB newN(int n) {\r
- /**\r
- * @j2sNative\r
- * return new javajs.util.SB(); \r
- */\r
- {\r
- // not perfect, because it requires defining sb twice. \r
- // We can do better...\r
- SB sb = new SB();\r
- sb.sb = new java.lang.StringBuilder(n);\r
- return sb;\r
- }\r
- }\r
-\r
- public static SB newS(String s) {\r
- /**\r
- * @j2sNative \r
- * \r
- * var sb = new javajs.util.SB();\r
- * sb.s = s;\r
- * return sb; \r
- * \r
- */\r
- {\r
- SB sb = new SB();\r
- sb.sb = new java.lang.StringBuilder(s);\r
- return sb;\r
- }\r
- }\r
-\r
- public SB append(String s) {\r
- /**\r
- * @j2sNative\r
- * \r
- * this.s += s\r
- * \r
- */\r
- {\r
- sb.append(s);\r
- }\r
- return this;\r
- }\r
- \r
- public SB appendC(char c) {\r
- /**\r
- * @j2sNative\r
- * \r
- * this.s += c;\r
- */\r
- {\r
- sb.append(c);\r
- }\r
- return this;\r
- \r
- }\r
-\r
- public SB appendI(int i) {\r
- /**\r
- * @j2sNative\r
- * \r
- * this.s += i\r
- * \r
- */\r
- {\r
- sb.append(i);\r
- }\r
- return this;\r
- }\r
-\r
- public SB appendB(boolean b) {\r
- /**\r
- * @j2sNative\r
- * \r
- * this.s += b\r
- * \r
- */\r
- {\r
- sb.append(b);\r
- }\r
- return this;\r
- }\r
-\r
- /**\r
- * note that JavaScript could drop off the ".0" in "1.0"\r
- * @param f\r
- * @return this\r
- */\r
- public SB appendF(float f) {\r
- /**\r
- * @j2sNative\r
- * \r
- * var sf = "" + f;\r
- * if (sf.indexOf(".") < 0 && sf.indexOf("e") < 0)\r
- * sf += ".0" ;\r
- * this.s += sf;\r
- * \r
- */\r
- {\r
- sb.append(f);\r
- }\r
- return this;\r
- }\r
-\r
- public SB appendD(double d) {\r
- /**\r
- * @j2sNative\r
- * \r
- * var sf = "" + d;\r
- * if (sf.indexOf(".") < 0 && sf.indexOf("e") < 0)\r
- * sf += ".0" ;\r
- * this.s += sf;\r
- * \r
- */\r
- {\r
- sb.append(d);\r
- }\r
- return this;\r
- }\r
-\r
- public SB appendSB(SB buf) {\r
- /**\r
- * @j2sNative\r
- * \r
- * this.s += buf.s;\r
- * \r
- */\r
- {\r
- sb.append(buf.sb);\r
- }\r
- return this;\r
- }\r
-\r
- public SB appendO(Object data) {\r
- if (data != null) {\r
- /**\r
- * @j2sNative\r
- * \r
- * this.s += data.toString();\r
- * \r
- */\r
- {\r
- sb.append(data);\r
- }\r
- }\r
- return this;\r
- }\r
-\r
- public void appendCB(char[] cb, int off, int len) {\r
- /**\r
- * @j2sNative\r
- * \r
- * for (var i = len,j=off; --i >= 0;)\r
- * this.s += cb[j++];\r
- * \r
- */\r
- {\r
- sb.append(cb, off, len);\r
- }\r
- }\r
-\r
- @Override\r
- public String toString() {\r
- /**\r
- * @j2sNative\r
- * \r
- * return this.s;\r
- * \r
- */\r
- {\r
- return sb.toString();\r
- }\r
- }\r
-\r
- public int length() {\r
- /**\r
- * @j2sNative\r
- * \r
- * return this.s.length;\r
- * \r
- */\r
- {\r
- return sb.length();\r
- }\r
- }\r
-\r
- public int indexOf(String s) {\r
- /**\r
- * @j2sNative\r
- * \r
- * return this.s.indexOf(s);\r
- * \r
- */\r
- {\r
- return sb.indexOf(s);\r
- }\r
- }\r
-\r
- public char charAt(int i) {\r
- /**\r
- * @j2sNative\r
- * \r
- * return this.s.charAt(i);\r
- * \r
- */\r
- {\r
- return sb.charAt(i);\r
- }\r
- }\r
-\r
- public int charCodeAt(int i) {\r
- /**\r
- * @j2sNative\r
- * \r
- * return this.s.charCodeAt(i);\r
- * \r
- */\r
- {\r
- return sb.codePointAt(i);\r
- }\r
- }\r
-\r
- public void setLength(int n) {\r
- /**\r
- * @j2sNative\r
- * \r
- * this.s = this.s.substring(0, n);\r
- */\r
- {\r
- sb.setLength(n);\r
- }\r
- }\r
-\r
- public int lastIndexOf(String s) {\r
- /**\r
- * @j2sNative\r
- * \r
- * return this.s.lastIndexOf(s);\r
- */\r
- {\r
- return sb.lastIndexOf(s);\r
- }\r
- }\r
-\r
- public int indexOf2(String s, int i) {\r
- /**\r
- * @j2sNative\r
- * \r
- * return this.s.indexOf(s, i);\r
- */\r
- {\r
- return sb.indexOf(s, i);\r
- }\r
- }\r
-\r
- public String substring(int i) {\r
- /**\r
- * @j2sNative\r
- * \r
- * return this.s.substring(i);\r
- */\r
- {\r
- return sb.substring(i);\r
- }\r
- }\r
-\r
- public String substring2(int i, int j) {\r
- /**\r
- * @j2sNative\r
- * \r
- * return this.s.substring(i, j);\r
- */\r
- {\r
- return sb.substring(i, j);\r
- }\r
- }\r
-\r
- /**\r
- * simple byte conversion not allowing for unicode.\r
- * Used for base64 conversion and allows for offset\r
- * @param off \r
- * @param len or -1 for full length (then off must = 0)\r
- * @return byte[]\r
- */\r
- public byte[] toBytes(int off, int len) {\r
- if (len < 0)\r
- len = length() - off;\r
- byte[] b = new byte[len];\r
- for (int i = off + len, j = i - off; --i >= off;)\r
- b[--j] = (byte) charAt(i);\r
- return b;\r
- }\r
-\r
- public void replace(int start, int end, String str) {\r
- /**\r
- * @j2sNative\r
- * \r
- * this.s = this.s.substring(0, start) + str + this.s.substring(end);\r
- */\r
- {\r
- sb.replace(start, end, str);\r
- }\r
- }\r
-\r
- public void insert(int offset, String str) {\r
- replace(offset, offset, str);\r
- }\r
-\r
-}\r
+
+package javajs.util;
+
+import javajs.J2SIgnoreImport;
+
+/**
+ * Interesting thing here is that JavaScript is 3x faster than Java in handling strings.
+ *
+ * Java StringBuilder is final, unfortunately. I guess they weren't thinking about Java2Script!
+ *
+ * The reason we have to do this that several overloaded append methods is WAY too expensive
+ *
+ */
+
+@J2SIgnoreImport({java.lang.StringBuilder.class})
+public class SB {
+
+ private java.lang.StringBuilder sb;
+ String s; // used by JavaScript only; no Java references
+
+ //TODO: JS experiment with using array and .push() here
+
+ public SB() {
+ /**
+ * @j2sNative
+ *
+ * this.s = "";
+ *
+ */
+ {
+ sb = new java.lang.StringBuilder();
+ }
+ }
+
+ public static SB newN(int n) {
+ /**
+ * @j2sNative
+ * return new javajs.util.SB();
+ */
+ {
+ // not perfect, because it requires defining sb twice.
+ // We can do better...
+ SB sb = new SB();
+ sb.sb = new java.lang.StringBuilder(n);
+ return sb;
+ }
+ }
+
+ public static SB newS(String s) {
+ /**
+ * @j2sNative
+ *
+ * var sb = new javajs.util.SB();
+ * sb.s = s;
+ * return sb;
+ *
+ */
+ {
+ SB sb = new SB();
+ sb.sb = new java.lang.StringBuilder(s);
+ return sb;
+ }
+ }
+
+ public SB append(String s) {
+ /**
+ * @j2sNative
+ *
+ * this.s += s
+ *
+ */
+ {
+ sb.append(s);
+ }
+ return this;
+ }
+
+ public SB appendC(char c) {
+ /**
+ * @j2sNative
+ *
+ * this.s += c;
+ */
+ {
+ sb.append(c);
+ }
+ return this;
+
+ }
+
+ public SB appendI(int i) {
+ /**
+ * @j2sNative
+ *
+ * this.s += i
+ *
+ */
+ {
+ sb.append(i);
+ }
+ return this;
+ }
+
+ public SB appendB(boolean b) {
+ /**
+ * @j2sNative
+ *
+ * this.s += b
+ *
+ */
+ {
+ sb.append(b);
+ }
+ return this;
+ }
+
+ /**
+ * note that JavaScript could drop off the ".0" in "1.0"
+ * @param f
+ * @return this
+ */
+ public SB appendF(float f) {
+ /**
+ * @j2sNative
+ *
+ * var sf = "" + f;
+ * if (sf.indexOf(".") < 0 && sf.indexOf("e") < 0)
+ * sf += ".0" ;
+ * this.s += sf;
+ *
+ */
+ {
+ sb.append(f);
+ }
+ return this;
+ }
+
+ public SB appendD(double d) {
+ /**
+ * @j2sNative
+ *
+ * var sf = "" + d;
+ * if (sf.indexOf(".") < 0 && sf.indexOf("e") < 0)
+ * sf += ".0" ;
+ * this.s += sf;
+ *
+ */
+ {
+ sb.append(d);
+ }
+ return this;
+ }
+
+ public SB appendSB(SB buf) {
+ /**
+ * @j2sNative
+ *
+ * this.s += buf.s;
+ *
+ */
+ {
+ sb.append(buf.sb);
+ }
+ return this;
+ }
+
+ public SB appendO(Object data) {
+ if (data != null) {
+ /**
+ * @j2sNative
+ *
+ * this.s += data.toString();
+ *
+ */
+ {
+ sb.append(data);
+ }
+ }
+ return this;
+ }
+
+ public void appendCB(char[] cb, int off, int len) {
+ /**
+ * @j2sNative
+ *
+ * for (var i = len,j=off; --i >= 0;)
+ * this.s += cb[j++];
+ *
+ */
+ {
+ sb.append(cb, off, len);
+ }
+ }
+
+ @Override
+ public String toString() {
+ /**
+ * @j2sNative
+ *
+ * return this.s;
+ *
+ */
+ {
+ return sb.toString();
+ }
+ }
+
+ public int length() {
+ /**
+ * @j2sNative
+ *
+ * return this.s.length;
+ *
+ */
+ {
+ return sb.length();
+ }
+ }
+
+ public int indexOf(String s) {
+ /**
+ * @j2sNative
+ *
+ * return this.s.indexOf(s);
+ *
+ */
+ {
+ return sb.indexOf(s);
+ }
+ }
+
+ public char charAt(int i) {
+ /**
+ * @j2sNative
+ *
+ * return this.s.charAt(i);
+ *
+ */
+ {
+ return sb.charAt(i);
+ }
+ }
+
+ public int charCodeAt(int i) {
+ /**
+ * @j2sNative
+ *
+ * return this.s.charCodeAt(i);
+ *
+ */
+ {
+ return sb.codePointAt(i);
+ }
+ }
+
+ public void setLength(int n) {
+ /**
+ * @j2sNative
+ *
+ * this.s = this.s.substring(0, n);
+ */
+ {
+ sb.setLength(n);
+ }
+ }
+
+ public int lastIndexOf(String s) {
+ /**
+ * @j2sNative
+ *
+ * return this.s.lastIndexOf(s);
+ */
+ {
+ return sb.lastIndexOf(s);
+ }
+ }
+
+ public int indexOf2(String s, int i) {
+ /**
+ * @j2sNative
+ *
+ * return this.s.indexOf(s, i);
+ */
+ {
+ return sb.indexOf(s, i);
+ }
+ }
+
+ public String substring(int i) {
+ /**
+ * @j2sNative
+ *
+ * return this.s.substring(i);
+ */
+ {
+ return sb.substring(i);
+ }
+ }
+
+ public String substring2(int i, int j) {
+ /**
+ * @j2sNative
+ *
+ * return this.s.substring(i, j);
+ */
+ {
+ return sb.substring(i, j);
+ }
+ }
+
+ /**
+ * simple byte conversion not allowing for unicode.
+ * Used for base64 conversion and allows for offset
+ * @param off
+ * @param len or -1 for full length (then off must = 0)
+ * @return byte[]
+ */
+ public byte[] toBytes(int off, int len) {
+ if (len < 0)
+ len = length() - off;
+ byte[] b = new byte[len];
+ for (int i = off + len, j = i - off; --i >= off;)
+ b[--j] = (byte) charAt(i);
+ return b;
+ }
+
+ public void replace(int start, int end, String str) {
+ /**
+ * @j2sNative
+ *
+ * this.s = this.s.substring(0, start) + str + this.s.substring(end);
+ */
+ {
+ sb.replace(start, end, str);
+ }
+ }
+
+ public void insert(int offset, String str) {
+ replace(offset, offset, str);
+ }
+
+}