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/02 18:23:22 UTC
svn commit: r562168 -
/activemq/activemq-cpp/trunk/src/decaf/src/main/decaf/lang/Integer.cpp
Author: tabish
Date: Thu Aug 2 09:23:14 2007
New Revision: 562168
URL: http://svn.apache.org/viewvc?view=rev&rev=562168
Log:
http://issues.apache.org/activemq/browse/AMQCPP-103
Adding in more Types wrappers
Modified:
activemq/activemq-cpp/trunk/src/decaf/src/main/decaf/lang/Integer.cpp
Modified: activemq/activemq-cpp/trunk/src/decaf/src/main/decaf/lang/Integer.cpp
URL: http://svn.apache.org/viewvc/activemq/activemq-cpp/trunk/src/decaf/src/main/decaf/lang/Integer.cpp?view=diff&rev=562168&r1=562167&r2=562168
==============================================================================
--- activemq/activemq-cpp/trunk/src/decaf/src/main/decaf/lang/Integer.cpp (original)
+++ activemq/activemq-cpp/trunk/src/decaf/src/main/decaf/lang/Integer.cpp Thu Aug 2 09:23:14 2007
@@ -45,33 +45,49 @@
return 0;
}
+ unsigned int uvalue = (unsigned int)value;
+
// 32-bit recursive reduction using SWAR...
// but first step is mapping 2-bit values
// into sum of 2 1-bit values in sneaky way
- value -= ((value >> 1) & 0x55555555);
- value = (((value >> 2) & 0x33333333) + (value & 0x33333333));
- value = (((value >> 4) + value) & 0x0F0F0F0F);
- value += (value >> 8);
- value += (value >> 16);
- return(value & 0x0000003F);
+ uvalue -= ((uvalue >> 1) & 0x55555555);
+ uvalue = (((uvalue >> 2) & 0x33333333) + (uvalue & 0x33333333));
+ uvalue = (((uvalue >> 4) + uvalue) & 0x0F0F0F0F);
+ uvalue += (uvalue >> 8);
+ uvalue += (uvalue >> 16);
+ return(uvalue & 0x0000003F);
}
////////////////////////////////////////////////////////////////////////////////
int Integer::reverseBytes( int value ) {
- int b3 = value >> 24;
- int b2 = (value >> 8) & 0xFF00;
- int b1 = (value & 0xFF00) << 8;
- int b0 = value << 24;
+
+ if( value == 0 ) {
+ return 0;
+ }
+
+ unsigned int uvalue = (unsigned int)value;
+
+ unsigned int b3 = uvalue >> 24;
+ unsigned int b2 = (uvalue >> 8) & 0xFF00;
+ unsigned int b1 = (uvalue & 0xFF00) << 8;
+ unsigned int b0 = uvalue << 24;
return (b0 | b1 | b2 | b3);
}
////////////////////////////////////////////////////////////////////////////////
int Integer::reverse( int value ) {
- value = (((value & 0xAAAAAAAA) >> 1) | ((value & 0x55555555) << 1));
- value = (((value & 0xCCCCCCCC) >> 2) | ((value & 0x33333333) << 2));
- value = (((value & 0xF0F0F0F0) >> 4) | ((value & 0x0F0F0F0F) << 4));
- value = (((value & 0xFF00FF00) >> 8) | ((value & 0x00FF00FF) << 8));
- return ((value >> 16) | (value << 16));
+
+ if( value == 0 ) {
+ return 0;
+ }
+
+ unsigned int uvalue = (unsigned int)value;
+
+ uvalue = (((uvalue & 0xAAAAAAAA) >> 1) | ((uvalue & 0x55555555) << 1));
+ uvalue = (((uvalue & 0xCCCCCCCC) >> 2) | ((uvalue & 0x33333333) << 2));
+ uvalue = (((uvalue & 0xF0F0F0F0) >> 4) | ((uvalue & 0x0F0F0F0F) << 4));
+ uvalue = (((uvalue & 0xFF00FF00) >> 8) | ((uvalue & 0x00FF00FF) << 8));
+ return ((uvalue >> 16) | (uvalue << 16));
}
////////////////////////////////////////////////////////////////////////////////
@@ -383,33 +399,55 @@
////////////////////////////////////////////////////////////////////////////////
int Integer::highestOneBit( int value ) {
- value |= (value >> 1);
- value |= (value >> 2);
- value |= (value >> 4);
- value |= (value >> 8);
- value |= (value >> 16);
- return ( value & ~(value >> 1));
+ if( value == 0 ) {
+ return 0;
+ }
+
+ unsigned int uvalue = (unsigned int)value;
+
+ uvalue |= (uvalue >> 1);
+ uvalue |= (uvalue >> 2);
+ uvalue |= (uvalue >> 4);
+ uvalue |= (uvalue >> 8);
+ uvalue |= (uvalue >> 16);
+ return ( uvalue & ~(uvalue >> 1));
}
////////////////////////////////////////////////////////////////////////////////
int Integer::lowestOneBit( int value ) {
- return ( value & (-value) );
+ if( value == 0 ) {
+ return 0;
+ }
+
+ unsigned int uvalue = (unsigned int)value;
+ return ( uvalue & (-uvalue) );
}
////////////////////////////////////////////////////////////////////////////////
int Integer::numberOfLeadingZeros( int value ) {
+ if( value == 0 ) {
+ return 0;
+ }
+
+ unsigned int uvalue = (unsigned int)value;
+
value |= value >> 1;
value |= value >> 2;
value |= value >> 4;
value |= value >> 8;
value |= value >> 16;
- return Integer::bitCount( ~value );
+ return Integer::bitCount( ~uvalue );
}
////////////////////////////////////////////////////////////////////////////////
int Integer::numberOfTrailingZeros( int value ) {
- return bitCount( (value & -value) - 1 );
+ if( value == 0 ) {
+ return 0;
+ }
+
+ unsigned int uvalue = (unsigned int)value;
+ return bitCount( (uvalue & -uvalue) - 1 );
}
////////////////////////////////////////////////////////////////////////////////