Fix underflow in Position
authorIra W. Snyder <devel@irasnyder.com>
Fri, 5 Oct 2007 18:26:17 +0000 (11:26 -0700)
committerIra W. Snyder <devel@irasnyder.com>
Fri, 5 Oct 2007 18:26:17 +0000 (11:26 -0700)
The operator-=() function in Position could underflow the part right of the
decimal point. Fix it.

Signed-off-by: Ira W. Snyder <devel@irasnyder.com>
position.cpp

index f1cfc90..e0da0f4 100644 (file)
@@ -44,7 +44,18 @@ Position& Position::operator+= (const float rhs)
 
 Position& Position::operator-= (const float rhs)
 {
-       *this += -rhs;
+       int major = (int)rhs;
+       int minor = (int)((rhs - major) * 10);
+
+       major_ -= major;
+       minor_ -= minor;
+
+       /* Check for underflow */
+       if (minor_ < 0)
+       {
+               major_ -= 1;
+               minor_ += 10;
+       }
 
        return *this;
 }