diff --git a/jre_emul/Classes/J2ObjC_common.m b/jre_emul/Classes/J2ObjC_common.m index 567a6828b2..45a5bfce34 100644 --- a/jre_emul/Classes/J2ObjC_common.m +++ b/jre_emul/Classes/J2ObjC_common.m @@ -332,10 +332,10 @@ static void AppendArgs( JreStringBuilder_appendChar(sb, (jchar)va_arg(va, jint)); break; case 'D': - RealToString_appendDouble(sb, va_arg(va, jdouble)); + JreStringBuilder_appendDouble(sb, va_arg(va, jdouble)); break; case 'F': - RealToString_appendFloat(sb, (jfloat)va_arg(va, jdouble)); + JreStringBuilder_appendFloat(sb, (jfloat)va_arg(va, jdouble)); break; case 'B': case 'I': diff --git a/jre_emul/Classes/java/lang/AbstractStringBuilder.h b/jre_emul/Classes/java/lang/AbstractStringBuilder.h index 27dcd96009..c6de566203 100644 --- a/jre_emul/Classes/java/lang/AbstractStringBuilder.h +++ b/jre_emul/Classes/java/lang/AbstractStringBuilder.h @@ -124,6 +124,8 @@ void JreStringBuilder_appendCharSequence( JreStringBuilder *sb, id s, jint start, jint end); void JreStringBuilder_appendInt(JreStringBuilder *sb, jint i); void JreStringBuilder_appendLong(JreStringBuilder *sb, jlong l); +void JreStringBuilder_appendDouble(JreStringBuilder *sb, jdouble d); +void JreStringBuilder_appendFloat(JreStringBuilder *sb, jfloat f); void JreStringBuilder_delete(JreStringBuilder *sb, jint start, jint end); void JreStringBuilder_deleteCharAt(JreStringBuilder *sb, jint index); diff --git a/jre_emul/Classes/java/lang/AbstractStringBuilder.m b/jre_emul/Classes/java/lang/AbstractStringBuilder.m index 1b536472a2..01b5be43ff 100644 --- a/jre_emul/Classes/java/lang/AbstractStringBuilder.m +++ b/jre_emul/Classes/java/lang/AbstractStringBuilder.m @@ -27,6 +27,7 @@ #include "java_lang_Integer.h" #include "java_lang_Long.h" #include "libcore/util/EmptyArray.h" +#include "sun/misc/FloatingDecimal.h" // Full name as expected by generated metadata. #define JavaLangAbstractStringBuilder_INITIAL_CAPACITY 16 @@ -235,6 +236,14 @@ void JreStringBuilder_appendLong(JreStringBuilder *sb, jlong l) { sb->count_ = newCount; } +void JreStringBuilder_appendDouble(JreStringBuilder *sb, jdouble d) { + SunMiscFloatingDecimal_appendToWithDouble_withId_(d, (id)sb); +} + +void JreStringBuilder_appendFloat(JreStringBuilder *sb, jfloat f) { + SunMiscFloatingDecimal_appendToWithFloat_withId_(f, (id)sb); +} + - (jint)capacity { return delegate_.bufferSize_; } diff --git a/jre_emul/android/platform/libcore/ojluni/src/main/java/sun/misc/FloatingDecimal.java b/jre_emul/android/platform/libcore/ojluni/src/objc/java/sun/misc/FloatingDecimal.java similarity index 98% rename from jre_emul/android/platform/libcore/ojluni/src/main/java/sun/misc/FloatingDecimal.java rename to jre_emul/android/platform/libcore/ojluni/src/objc/java/sun/misc/FloatingDecimal.java index ddd8790bc1..2dfe219387 100644 --- a/jre_emul/android/platform/libcore/ojluni/src/main/java/sun/misc/FloatingDecimal.java +++ b/jre_emul/android/platform/libcore/ojluni/src/objc/java/sun/misc/FloatingDecimal.java @@ -28,6 +28,10 @@ import java.util.Arrays; import java.util.regex.*; +/*-[ +#include "java/lang/AbstractStringBuilder.h" +]-*/ + /** * A class for converting between ASCII and decimal representations of a single * or double precision floating point number. Most conversions are provided via @@ -81,20 +85,20 @@ public static String toJavaFormatString(float f) { } /** - * Appends a double precision floating point value to an Appendable. + * Appends a double precision floating point value to a JreStringBuilder. * @param d The double precision value. - * @param buf The Appendable with the value appended. + * @param buf The JreStringBuilder with the value appended. */ - public static void appendTo(double d, Appendable buf) { + public static void appendTo(double d, Object buf) { getBinaryToASCIIConverter(d).appendTo(buf); } /** - * Appends a single precision floating point value to an Appendable. + * Appends a single precision floating point value to a JreStringBuilder. * @param f The single precision value. - * @param buf The Appendable with the value appended. + * @param buf The JreStringBuilder with the value appended. */ - public static void appendTo(float f, Appendable buf) { + public static void appendTo(float f, Object buf) { getBinaryToASCIIConverter(f).appendTo(buf); } @@ -134,10 +138,10 @@ public interface BinaryToASCIIConverter { public String toJavaFormatString(); /** - * Appends a floating point value to an Appendable. - * @param buf The Appendable to receive the value. + * Appends a floating point value to a JreStringBuilder. + * @param buf The JreStringBuilder to receive the value. */ - public void appendTo(Appendable buf); + public void appendTo(Object buf); /** * Retrieves the decimal exponent most closely corresponding to this value. @@ -201,15 +205,9 @@ public String toJavaFormatString() { } @Override - public void appendTo(Appendable buf) { - if (buf instanceof StringBuilder) { - ((StringBuilder) buf).append(image); - } else if (buf instanceof StringBuffer) { - ((StringBuffer) buf).append(image); - } else { - assert false; - } - } + public native void appendTo(Object buf) /*-[ + JreStringBuilder_appendString((JreStringBuilder *)buf, image_); + ]-*/; @Override public int getDecimalExponent() { @@ -303,16 +301,11 @@ public String toJavaFormatString() { } @Override - public void appendTo(Appendable buf) { - int len = getChars(buffer); - if (buf instanceof StringBuilder) { - ((StringBuilder) buf).append(buffer, 0, len); - } else if (buf instanceof StringBuffer) { - ((StringBuffer) buf).append(buffer, 0, len); - } else { - assert false; - } - } + public native void appendTo(Object buf) /*-[ + jint len = SunMiscFloatingDecimal_BinaryToASCIIBuffer_getCharsWithCharArray_( + self, buffer_); + JreStringBuilder_appendCharArraySubset((JreStringBuilder *)buf, buffer_, 0, len); + ]-*/; @Override public int getDecimalExponent() {