Skip to content

Commit

Permalink
Moves to the OpenJDK FloatingDecimal for floating point conversions i…
Browse files Browse the repository at this point in the history
…n string concatenation.

	Change on 2017/01/05 by kstanger <kstanger@google.com>

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=143681084
  • Loading branch information
kstanger authored and tomball committed Jan 6, 2017
1 parent d08f1fa commit cce1517
Show file tree
Hide file tree
Showing 4 changed files with 34 additions and 30 deletions.
4 changes: 2 additions & 2 deletions jre_emul/Classes/J2ObjC_common.m
Expand Up @@ -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':
Expand Down
2 changes: 2 additions & 0 deletions jre_emul/Classes/java/lang/AbstractStringBuilder.h
Expand Up @@ -124,6 +124,8 @@ void JreStringBuilder_appendCharSequence(
JreStringBuilder *sb, id<JavaLangCharSequence> 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);
Expand Down
9 changes: 9 additions & 0 deletions jre_emul/Classes/java/lang/AbstractStringBuilder.m
Expand Up @@ -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
Expand Down Expand Up @@ -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_;
}
Expand Down
Expand Up @@ -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
Expand Down Expand Up @@ -81,20 +85,20 @@ public static String toJavaFormatString(float f) {
}

/**
* Appends a double precision floating point value to an <code>Appendable</code>.
* Appends a double precision floating point value to a <code>JreStringBuilder</code>.
* @param d The double precision value.
* @param buf The <code>Appendable</code> with the value appended.
* @param buf The <code>JreStringBuilder</code> 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 <code>Appendable</code>.
* Appends a single precision floating point value to a <code>JreStringBuilder</code>.
* @param f The single precision value.
* @param buf The <code>Appendable</code> with the value appended.
* @param buf The <code>JreStringBuilder</code> with the value appended.
*/
public static void appendTo(float f, Appendable buf) {
public static void appendTo(float f, Object buf) {
getBinaryToASCIIConverter(f).appendTo(buf);
}

Expand Down Expand Up @@ -134,10 +138,10 @@ public interface BinaryToASCIIConverter {
public String toJavaFormatString();

/**
* Appends a floating point value to an <code>Appendable</code>.
* @param buf The <code>Appendable</code> to receive the value.
* Appends a floating point value to a <code>JreStringBuilder</code>.
* @param buf The <code>JreStringBuilder</code> to receive the value.
*/
public void appendTo(Appendable buf);
public void appendTo(Object buf);

/**
* Retrieves the decimal exponent most closely corresponding to this value.
Expand Down Expand Up @@ -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() {
Expand Down Expand Up @@ -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() {
Expand Down

0 comments on commit cce1517

Please sign in to comment.