1 import "JavaBuiltin" as Java
3 importJava "javax.vecmath.Tuple3d" where
9 getX' :: Tuple3d -> Double
12 getY' :: Tuple3d -> Double
15 getZ' :: Tuple3d -> Double
21 getXM :: MTuple3d -> <Proc> Double
23 getYM :: MTuple3d -> <Proc> Double
25 getZM :: MTuple3d -> <Proc> Double
27 setX :: MTuple3d -> Double -> <Proc> ()
28 setY :: MTuple3d -> Double -> <Proc> ()
29 setZ :: MTuple3d -> Double -> <Proc> ()
32 addM :: MTuple3d -> Tuple3d -> <Proc> ()
34 addM2 :: MTuple3d -> Tuple3d -> Tuple3d -> <Proc> ()
37 subM :: MTuple3d -> Tuple3d -> <Proc> ()
39 subM2 :: MTuple3d -> Tuple3d -> Tuple3d -> <Proc> ()
42 negateM :: MTuple3d -> <Proc> ()
44 negateM2 :: MTuple3d -> Tuple3d -> <Proc> ()
47 scaleM :: MTuple3d -> Double -> <Proc> ()
49 scaleM2 :: MTuple3d -> Double -> Tuple3d -> <Proc> ()
52 clone :: Tuple3d -> <Proc> a
54 copyMTuple3d :: Tuple3d -> <Proc> MTuple3d
55 copyMTuple3d = Java.unsafeCoerce . clone
58 applyMOp :: (MTuple3d -> <Proc> ()) -> Tuple3d -> Tuple3d
59 applyMOp f x = runProc let
64 freeze :: MTuple3d -> <Proc> Tuple3d
65 freeze = Java.unsafeCoerce
67 addTuple x y = applyMOp (flip addM y) x
68 subTuple x y = applyMOp (flip subM y) x
69 negateTuple = applyMOp negateM
70 scaleTuple x s = applyMOp (flip scaleM s) x
72 class Tuple3dClass a where
73 asTuple :: a -> Tuple3d
74 asTuple = Java.unsafeCoerce
76 asMTuple :: a -> <Proc> MTuple3d
77 asMTuple x = copyMTuple3d (asTuple x)
80 getX = getX' . asTuple
83 getY = getY' . asTuple
86 getZ = getZ' . asTuple
89 add x y = Java.unsafeCoerce $ addTuple (asTuple x) (asTuple y)
92 sub x y = Java.unsafeCoerce $ subTuple (asTuple x) (asTuple y)
95 negate x = Java.unsafeCoerce $ negateTuple (asTuple x)
97 scale :: a -> Double -> a
98 scale x s = Java.unsafeCoerce $ scaleTuple (asTuple x) s
100 instance Tuple3dClass Tuple3d where