X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Futil%2FFormat.java;h=ce7ab6df184a5984bd2262536dc43799e9bf4ce9;hb=caa5930cf71ef14a4af891f2c17aa4a6e0f72bcf;hp=46abdb95ab2648f0aa75da6aa1a8fea1d94ff6ea;hpb=506d60f0e188723ddc91c26824b41ac7034df3fe;p=jalview.git diff --git a/src/jalview/util/Format.java b/src/jalview/util/Format.java index 46abdb9..ce7ab6d 100755 --- a/src/jalview/util/Format.java +++ b/src/jalview/util/Format.java @@ -1,20 +1,22 @@ /* - * Jalview - A Sequence Alignment Editor and Viewer (Version 2.4) - * Copyright (C) 2008 AM Waterhouse, J Procter, G Barton, M Clamp, S Searle + * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$) + * Copyright (C) $$Year-Rel$$ The Jalview Authors * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. + * This file is part of Jalview. * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. + * Jalview is free software: you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation, either version 3 + * of the License, or (at your option) any later version. + * + * Jalview is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty + * of MERCHANTABILITY or FITNESS FOR A PARTICULAR + * PURPOSE. See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA + * along with Jalview. If not, see . + * The Jalview Authors are detailed in the 'AUTHORS' file. */ /** * A class for formatting numbers that follows printf conventions. @@ -24,6 +26,8 @@ */ package jalview.util; +import java.util.Arrays; + /** * DOCUMENT ME! * @@ -52,14 +56,17 @@ public class Format private char fmt; // one of cdeEfgGiosxXos + private final String formatString; + /** * Creates a new Format object. * * @param s - * DOCUMENT ME! + * DOCUMENT ME! */ public Format(String s) { + formatString = s; width = 0; precision = -1; pre = ""; @@ -212,60 +219,57 @@ public class Format * more than one number * * @param s - * the format string following printf conventions The string - * has a prefix, a format code and a suffix. The prefix and - * suffix become part of the formatted output. The format code - * directs the formatting of the (single) parameter to be - * formatted. The code has the following structure - * + * the format string following printf conventions The string has a + * prefix, a format code and a suffix. The prefix and suffix become + * part of the formatted output. The format code directs the + * formatting of the (single) parameter to be formatted. The code has + * the following structure + * * @exception IllegalArgumentException - * if bad format + * if bad format * */ public static String getHexString(java.awt.Color color) @@ -301,11 +305,11 @@ public class Format * prints a formatted number following printf conventions * * @param s - * a PrintStream + * a PrintStream * @param fmt - * the format string + * the format string * @param x - * the double to print + * the double to print */ public static void print(java.io.PrintStream s, String fmt, double x) { @@ -316,11 +320,11 @@ public class Format * prints a formatted number following printf conventions * * @param s - * a PrintStream + * a PrintStream * @param fmt - * the format string + * the format string * @param x - * the long to print + * the long to print */ public static void print(java.io.PrintStream s, String fmt, long x) { @@ -331,11 +335,11 @@ public class Format * prints a formatted number following printf conventions * * @param s - * a PrintStream + * a PrintStream * @param fmt - * the format string + * the format string * @param x - * the character to + * the character to */ public static void print(java.io.PrintStream s, String fmt, char x) { @@ -346,9 +350,9 @@ public class Format * prints a formatted number following printf conventions * * @param s - * a PrintStream, fmt the format string + * a PrintStream, fmt the format string * @param x - * a string that represents the digits to print + * a string that represents the digits to print */ public static void print(java.io.PrintStream s, String fmt, String x) { @@ -359,7 +363,7 @@ public class Format * Converts a string of digits (decimal, octal or hex) to an integer * * @param s - * a string + * a string * @return the numeric value of the prefix of s representing a base 10 integer */ public static int atoi(String s) @@ -371,7 +375,7 @@ public class Format * Converts a string of digits (decimal, octal or hex) to a long integer * * @param s - * a string + * a string * @return the numeric value of the prefix of s representing a base 10 integer */ public static long atol(String s) @@ -405,9 +409,9 @@ public class Format * DOCUMENT ME! * * @param s - * DOCUMENT ME! + * DOCUMENT ME! * @param base - * DOCUMENT ME! + * DOCUMENT ME! * * @return DOCUMENT ME! */ @@ -463,7 +467,7 @@ public class Format * Converts a string of digits to an double * * @param s - * a string + * a string */ public static double atof(String s) { @@ -537,10 +541,10 @@ public class Format * Formats a double into a string (like sprintf in C) * * @param x - * the number to format + * the number to format * @return the formatted string * @exception IllegalArgumentException - * if bad argument + * if bad argument */ public String form(double x) { @@ -579,7 +583,7 @@ public class Format * Formats a long integer into a string (like sprintf in C) * * @param x - * the number to format + * the number to format * @return the formatted string */ public String form(long x) @@ -623,8 +627,8 @@ public class Format /** * Formats a character into a string (like sprintf in C) * - * @param x - * the value to format + * @param debounceTrap + * the value to format * @return the formatted string */ public String form(char c) @@ -642,8 +646,8 @@ public class Format /** * Formats a string into a larger string (like sprintf in C) * - * @param x - * the value to format + * @param debounceTrap + * the value to format * @return the formatted string */ public String form(String s) @@ -662,43 +666,35 @@ public class Format } /** - * DOCUMENT ME! + * Returns a string consisting of n repeats of character c * * @param c - * DOCUMENT ME! * @param n - * DOCUMENT ME! * - * @return DOCUMENT ME! + * @return */ - private static String repeat(char c, int n) + static String repeat(char c, int n) { if (n <= 0) { return ""; } - - StringBuffer s = new StringBuffer(n); - - for (int i = 0; i < n; i++) - { - s.append(c); - } - - return s.toString(); + char[] chars = new char[n]; + Arrays.fill(chars, c); + return new String(chars); } /** * DOCUMENT ME! * * @param x - * DOCUMENT ME! + * DOCUMENT ME! * @param n - * DOCUMENT ME! + * DOCUMENT ME! * @param m - * DOCUMENT ME! + * DOCUMENT ME! * @param d - * DOCUMENT ME! + * DOCUMENT ME! * * @return DOCUMENT ME! */ @@ -724,7 +720,7 @@ public class Format * DOCUMENT ME! * * @param r - * DOCUMENT ME! + * DOCUMENT ME! * * @return DOCUMENT ME! */ @@ -746,9 +742,9 @@ public class Format * DOCUMENT ME! * * @param s - * DOCUMENT ME! + * DOCUMENT ME! * @param r - * DOCUMENT ME! + * DOCUMENT ME! * * @return DOCUMENT ME! */ @@ -794,8 +790,8 @@ public class Format { w = width; } - else if (((fmt == 'd') || (fmt == 'i') || (fmt == 'x') || (fmt == 'X') || (fmt == 'o')) - && (precision > 0)) + else if (((fmt == 'd') || (fmt == 'i') || (fmt == 'x') || (fmt == 'X') + || (fmt == 'o')) && (precision > 0)) { w = precision; } @@ -807,7 +803,7 @@ public class Format * DOCUMENT ME! * * @param d - * DOCUMENT ME! + * DOCUMENT ME! * * @return DOCUMENT ME! */ @@ -837,7 +833,8 @@ public class Format double factor = 1; String leading_zeroes = ""; - for (int i = 1; (i <= precision) && (factor <= 0x7FFFFFFFFFFFFFFFL); i++) + for (int i = 1; (i <= precision) + && (factor <= 0x7FFFFFFFFFFFFFFFL); i++) { factor *= 10; leading_zeroes = leading_zeroes + "0"; @@ -879,7 +876,7 @@ public class Format * DOCUMENT ME! * * @param d - * DOCUMENT ME! + * DOCUMENT ME! * * @return DOCUMENT ME! */ @@ -888,21 +885,18 @@ public class Format String f = ""; int e = 0; double dd = d; - double factor = 1; if (d != 0) { while (dd > 10) { e++; - factor /= 10; dd = dd / 10; } while (dd < 1) { e--; - factor *= 10; dd = dd * 10; } } @@ -912,8 +906,7 @@ public class Format return fixed_format(d); } - d = d * factor; - f = f + fixed_format(d); + f = f + fixed_format(dd); if ((fmt == 'e') || (fmt == 'g')) { @@ -939,4 +932,55 @@ public class Format return f + p.substring(p.length() - 3, p.length()); } + + @Override + public String toString() + { + return formatString; + } + + /** + * Bespoke method to format percentage float value to the specified number of + * decimal places. Avoids use of general-purpose format parsers as a + * processing hotspot. + * + * @param sb + * @param value + * @param dp + */ + public static void appendPercentage(StringBuilder sb, float value, int dp) + { + /* + * rounding first + */ + double d = value; + long factor = 1L; + for (int i = 0; i < dp; i++) + { + factor *= 10; + } + d *= factor; + d += 0.5; + + /* + * integer part + */ + value = (float) (d / factor); + sb.append((long) value); + + /* + * decimal places + */ + if (dp > 0) + { + sb.append("."); + while (dp > 0) + { + value = value - (int) value; + value *= 10; + sb.append((int) value); + dp--; + } + } + } }