[SNMP4J] More Info About Counter64 Bug
Frank Fock
fock at agentpp.com
Sat Aug 6 14:00:16 CEST 2005
Hi Jim,
Thanks for the fix. The last proposed code snippet will be in release 1.6.
Best regards,
Frank
Jim Doble wrote:
>I've been testing one of the proposed fixes to the problem in the
>getBERLength method in the Counter64 class, and noticed that the code I
>proposed needs a modification to handle the case where the Java will treat
>the long value as negative (because a 64 bit unsigned value is being
>represented as a Java long, which is a 64 bit signed value. The modified
>code is:
>
>public int getBERLength() {
> if (value < 0L) {
> return 11;
> }
> if (value < 0x80L) {
> return 3;
> }
> if (value < 0x8000L) {
> return 4;
> }
> if (value < 0x800000L) {
> return 5;
> }
> if (value < 0x80000000L) {
> return 6;
> }
> if (value < 0x8000000000L) {
> return 7;
> }
> if (value < 0x800000000000L) {
> return 8;
> }
> if (value < 0x80000000000000L) {
> return 9;
> }
> return 10;
>}
>
>A similar approach, which looks a little more complicated but might be
>faster if the values are uniformly distributed across the entire range of
>possible values is to essentially perform the equivalent of a binary search:
>
>public int getBERLength() {
> if (value < 0L) {
> return 11;
> }
> if (value < 0x80000000L) {
> if (value < 0x8000L) {
> if (value < 0x80L) {
> return 3;
> }
> else {
> return 4;
> }
> }
> else {
> if (value < 0x800000L) {
> return 5;
> }
> else {
> return 6;
> }
> }
> }
> else {
> if (value < 0x800000000000L) {
> if (value < 0x8000000000L) {
> return 7;
> }
> else {
> return 8;
> }
> }
> else {
> if (value < 0x80000000000000L) {
> return 9;
> }
> else {
> return 10;
> }
> }
> }
>}
>
>If there is a preference for more concise code, the same logic can be
>expressed as:
>
>public int getBERLength() {
> if (value < 0L) {
> return 11;
> }
> if (value < 0x80000000L) {
> if (value < 0x8000L) {
> return value < 0x80L ? 3 : 4;
> }
> return value < 0x800000L ? 5 : 6;
> }
> if (value < 0x800000000000L) {
> return value < 0x8000000000L ? 7 : 8;
> }
> return value < 0x80000000000000L ? 9 : 10;
>}
>
>
>_______________________________________________
>SNMP4J mailing list
>SNMP4J at agentpp.org
>http://lists.agentpp.org/mailman/listinfo/snmp4j
>
>
>
>
--
AGENT++
http://www.agentpp.com
http://www.mibexplorer.com
http://www.mibdesigner.com
More information about the SNMP4J
mailing list