don't use bit-wise test for equality when using floats.
authorreed@google.com <reed@google.com@2bbb7eff-a529-9590-31e7-b0007b416f81>
Tue, 27 Nov 2012 13:13:22 +0000 (13:13 +0000)
committerreed@google.com <reed@google.com@2bbb7eff-a529-9590-31e7-b0007b416f81>
Tue, 27 Nov 2012 13:13:22 +0000 (13:13 +0000)
git-svn-id: http://skia.googlecode.com/svn/trunk@6557 2bbb7eff-a529-9590-31e7-b0007b416f81

include/utils/SkMatrix44.h
src/utils/SkMatrix44.cpp

index e1de7c72a2f12ec3ea523b771f676947d4d1a1ca..c082e964c536b7c19bf9e4583990ec95b7874c2e 100644 (file)
@@ -105,20 +105,27 @@ public:
         return *this;
     }
 
-    bool operator==(const SkMatrix44& other) const {
-        return !memcmp(this, &other, sizeof(*this));
-    }
+    bool operator==(const SkMatrix44& other) const;
     bool operator!=(const SkMatrix44& other) const {
-        return !!memcmp(this, &other, sizeof(*this));
+        return !(other == *this);
     }
 
     SkMatrix44(const SkMatrix&);
     SkMatrix44& operator=(const SkMatrix& src);
     operator SkMatrix() const;
 
-    SkMScalar get(int row, int col) const;
-    void set(int row, int col, const SkMScalar& value);
+    SkMScalar get(int row, int col) const {
+        SkASSERT((unsigned)row <= 3);
+        SkASSERT((unsigned)col <= 3);
+        return fMat[col][row];
+    }
 
+    void set(int row, int col, SkMScalar value) {
+        SkASSERT((unsigned)row <= 3);
+        SkASSERT((unsigned)col <= 3);
+        fMat[col][row] = value;
+    }
+    
     double getDouble(int row, int col) const {
         return SkMScalarToDouble(this->get(row, col));
     }
index 42c38f7b4fa5e67bad698d14ada41c41c0544d2c..7dd174ad9346bb561d7d047734bc823430a91a54 100644 (file)
@@ -22,16 +22,15 @@ SkMatrix44::SkMatrix44(const SkMatrix44& a, const SkMatrix44& b) {
     this->setConcat(a, b);
 }
 
-SkMScalar SkMatrix44::get(int row, int col) const {
-    SkASSERT(row <= 3 && row >= 0);
-    SkASSERT(col <= 3 && col >= 0);
-    return fMat[col][row];
-}
-
-void SkMatrix44::set(int row, int col, const SkMScalar& value) {
-    SkASSERT(row <= 3 && row >= 0);
-    SkASSERT(col <= 3 && col >= 0);
-    fMat[col][row] = value;
+bool SkMatrix44::operator==(const SkMatrix44& other) const {
+    const SkMScalar* a = &fMat[0][0];
+    const SkMScalar* b = &other.fMat[0][0];
+    for (int i = 0; i < 16; ++i) {
+        if (a[i] != b[i]) {
+            return false;
+        }
+    }
+    return true;
 }
 
 ///////////////////////////////////////////////////////////////////////////////