     public static var e: CGFloat {
         return CGFloat(M_E)
     }
-}+}
+
+public func + (left: CGPoint, right: CGSize) -> CGPoint {
+    return CGPoint(x: left.x + right.width, y: left.y + right.height)
+}
+
+public func + (left: CGSize, right: CGPoint) -> CGPoint {
+    return CGPoint(x: left.width + right.x, y: left.height + right.y)
+}
+
+public func - (left: CGPoint, right: CGSize) -> CGPoint {
+    return CGPoint(x: left.x - right.width, y: left.y - right.height)
+}
+
+public func - (left: CGSize, right: CGPoint) -> CGPoint {
+    return CGPoint(x: left.width - right.x, y: left.height - right.y)
+}


public func == (left: CGAffineTransform, right: CGAffineTransform) -> Bool {
    return CGAffineTransformEqualToTransform(left, right)
}

extension CGFloat {

    left = left / right
}

extension CGAffineTransform: CustomStringConvertible {
    public var description: String {
        return "(\(a), \(b), \(c), \(d), \(tx), \(ty))"
    }
    
    public var inverse: CGAffineTransform {
        return CGAffineTransformInvert(self)
    }
