Add ostream helpers for FX String classes.
[pdfium.git] / core / src / fxcrt / fx_basic_util.cpp
index 1d947d3..5a40c2b 100644 (file)
@@ -273,7 +273,7 @@ CFX_WideString FX_DecodeURI(const CFX_ByteString& bsURI)
             rURI += bsURI[i];
         }
     }
-    return CFX_WideString::FromUTF8(rURI);
+    return CFX_WideString::FromUTF8(rURI, rURI.GetLength());
 }
 #if _FXM_PLATFORM_ == _FXM_PLATFORM_WINDOWS_
 class CFindFileData : public CFX_Object
@@ -442,3 +442,46 @@ FX_WCHAR FX_GetFolderSeparator()
     return '/';
 #endif
 }
+
+CFX_Matrix_3by3 CFX_Matrix_3by3::Inverse()
+{
+    FX_FLOAT det = a*(e*i - f*h) - b*(i*d - f*g) + c*(d*h - e*g);
+    if (FXSYS_fabs(det) < 0.0000001)
+        return CFX_Matrix_3by3();
+    else
+        return CFX_Matrix_3by3(
+            (e*i - f*h) / det,
+            -(b*i - c*h) / det,
+            (b*f - c*e) / det,
+            -(d*i - f*g) / det,
+            (a*i - c*g) / det,
+            -(a*f - c*d) / det,
+            (d*h - e*g) / det,
+            -(a*h - b*g) / det,
+            (a*e - b*d) / det
+        );
+}
+
+CFX_Matrix_3by3 CFX_Matrix_3by3::Multiply(const CFX_Matrix_3by3 &m)
+{
+    return CFX_Matrix_3by3(
+        a*m.a + b*m.d + c*m.g,
+        a*m.b + b*m.e + c*m.h,
+        a*m.c + b*m.f + c*m.i,
+        d*m.a + e*m.d + f*m.g,
+        d*m.b + e*m.e + f*m.h,
+        d*m.c + e*m.f + f*m.i,
+        g*m.a + h*m.d + i*m.g,
+        g*m.b + h*m.e + i*m.h,
+        g*m.c + h*m.f + i*m.i
+      );
+}
+
+CFX_Vector_3by1 CFX_Matrix_3by3::TransformVector(const CFX_Vector_3by1 &v)
+{
+    return CFX_Vector_3by1(
+        a * v.a + b * v.b + c * v.c,
+        d * v.a + e * v.b + f * v.c,
+        g * v.a + h * v.b + i * v.c
+    );
+}