You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@activemq.apache.org by ta...@apache.org on 2007/08/06 21:58:01 UTC
svn commit: r563239 - in
/activemq/activemq-cpp/trunk/src/decaf/src/main/decaf/internal/util:
NumberConverter.cpp NumberConverter.h
Author: tabish
Date: Mon Aug 6 12:58:00 2007
New Revision: 563239
URL: http://svn.apache.org/viewvc?view=rev&rev=563239
Log:
http://issues.apache.org/activemq/browse/AMQCPP-103
Implementing the Primitive Wrappers fully
Modified:
activemq/activemq-cpp/trunk/src/decaf/src/main/decaf/internal/util/NumberConverter.cpp
activemq/activemq-cpp/trunk/src/decaf/src/main/decaf/internal/util/NumberConverter.h
Modified: activemq/activemq-cpp/trunk/src/decaf/src/main/decaf/internal/util/NumberConverter.cpp
URL: http://svn.apache.org/viewvc/activemq/activemq-cpp/trunk/src/decaf/src/main/decaf/internal/util/NumberConverter.cpp?view=diff&rev=563239&r1=563238&r2=563239
==============================================================================
--- activemq/activemq-cpp/trunk/src/decaf/src/main/decaf/internal/util/NumberConverter.cpp (original)
+++ activemq/activemq-cpp/trunk/src/decaf/src/main/decaf/internal/util/NumberConverter.cpp Mon Aug 6 12:58:00 2007
@@ -17,49 +17,44 @@
#include "NumberConverter.h"
+#include <decaf/lang/Math.h>
+
using namespace decaf;
+using namespace decaf::lang;
using namespace decaf::internal;
using namespace decaf::internal::util;
////////////////////////////////////////////////////////////////////////////////
-NumberConverter::NumberConverter() {
-}
+const double NumberConverter::invLogOfTenBaseTwo =
+ Math::log(2.0) / Math::log(10.0);
+NumberConverter::StaticInitializer NumberConverter::init;
+////////////////////////////////////////////////////////////////////////////////
+NumberConverter::StaticInitializer::StaticInitializer() {
-public final class NumberConverter {
-
- private int setCount; // number of times u and k have been gotten
-
- private int getCount; // number of times u and k have been set
+ NumberConverter::TEN_TO_THE.resize(20);
+ NumberConverter::TEN_TO_THE[0] = 1L;
- private int[] uArray = new int[64];
+ for( int i = 1; i < TEN_TO_THE.length; ++i ) {
+ long long previous = TEN_TO_THE[i - 1];
+ TEN_TO_THE[i] = ( previous << 1 ) + ( previous << 3 );
+ }
+}
- private int firstK;
+////////////////////////////////////////////////////////////////////////////////
+NumberConverter::NumberConverter() {
- private final static double invLogOfTenBaseTwo = Math.log(2.0)
- / Math.log(10.0);
+ this->getCount = 0;
+ this->setCount = 0;
+ this->firstK = 0;
+ this->uArray.resize(64);
+}
- private final static long[] TEN_TO_THE = new long[20];
- static {
- TEN_TO_THE[0] = 1L;
- for (int i = 1; i < TEN_TO_THE.length; ++i) {
- long previous = TEN_TO_THE[i - 1];
- TEN_TO_THE[i] = (previous << 1) + (previous << 3);
- }
- }
+public final class NumberConverter {
- private static NumberConverter getConverter() {
- return new NumberConverter();
- }
- public static String convert(double input) {
- return getConverter().convertD(input);
- }
- public static String convert(float input) {
- return getConverter().convertF(input);
- }
public String convertD(double inputNumber) {
int p = 1023 + 52; // the power offset (precision)
Modified: activemq/activemq-cpp/trunk/src/decaf/src/main/decaf/internal/util/NumberConverter.h
URL: http://svn.apache.org/viewvc/activemq/activemq-cpp/trunk/src/decaf/src/main/decaf/internal/util/NumberConverter.h?view=diff&rev=563239&r1=563238&r2=563239
==============================================================================
--- activemq/activemq-cpp/trunk/src/decaf/src/main/decaf/internal/util/NumberConverter.h (original)
+++ activemq/activemq-cpp/trunk/src/decaf/src/main/decaf/internal/util/NumberConverter.h Mon Aug 6 12:58:00 2007
@@ -25,12 +25,65 @@
class NumberConverter {
private:
+ int setCount;
+ int getCount;
+ int firstK;
+ std::vector<int> uArray;
+
+ static std::vector<long long> TEN_TO_THE;
+ static const double invLogOfTenBaseTwo;
+
+ // Internal class used to init static arrays
+ struct StaticInitializer {
+ StaticInitializer();
+ };
+
+ static StaticInitializer init;
+
public:
NumberConverter();
virtual ~NumberConverter() {}
+ /**
+ * @param value - the double to convert
+ * @returns the string representation of value
+ */
+ std::string convertD( double value );
+
+ /**
+ * @param value - the float to convert
+ * @returns the string representation of value
+ */
+ std::string convertF( float value );
+
public: // Statics
+
+ /**
+ * @param value to convert to a string
+ * @returns the value converted to a string
+ */
+ static std::string convert( double value ) {
+ return NumberConverter().convertD( value );
+ }
+
+ /**
+ * @param value to convert to a string
+ * @returns the value converted to a string
+ */
+ static std::string convert( float value ) {
+ return NumberConverter().convertF( value );
+ }
+
+ private:
+
+ std::string freeFormatExponential();
+ std::string freeFormat();
+
+ void bigIntDigitGeneratorInstImpl(
+ long f, int e, bool isDenormalized, bool mantissaIsZero, int p );
+ void longDigitGenerator(
+ long f, int e, bool isDenormalized, bool mantissaIsZero, int p );
};