From a44846851d8c9970639e87003c31c0b78c5ab5aa Mon Sep 17 00:00:00 2001 From: Geoffrey Mainland <mainland@apeiron.net> Date: Thu, 28 Mar 2013 18:49:42 +0000 Subject: [PATCH] Add PackedVector and PackedMVector instances for vectors of 3-tuples. --- Data/Vector/Unboxed/Base.hs | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/Data/Vector/Unboxed/Base.hs b/Data/Vector/Unboxed/Base.hs index bf3e5f7..4405726 100644 --- a/Data/Vector/Unboxed/Base.hs +++ b/Data/Vector/Unboxed/Base.hs @@ -471,4 +471,32 @@ instance (Unbox a, G.PackedVector Vector a) => G.PackedVector Vector (a, a) wher do v1' <- G.basicUnsafePrefetchDataM v1 j k v2' <- G.basicUnsafePrefetchDataM v2 j k return $! V_2 n v1' v2' + +instance (Unbox a, M.PackedMVector MVector a) => M.PackedMVector MVector (a, a, a) where + {-# INLINE basicUnsafeReadAsMulti #-} + {-# INLINE basicUnsafeWriteAsMulti #-} + basicUnsafeReadAsMulti (MV_3 _ v1 v2 v3) j = + do x <- M.basicUnsafeReadAsMulti v1 j + y <- M.basicUnsafeReadAsMulti v2 j + z <- M.basicUnsafeReadAsMulti v3 j + return $ M_3 x y z + + basicUnsafeWriteAsMulti (MV_3 _ v1 v2 v3) j (M_3 x y z) = + do M.basicUnsafeWriteAsMulti v1 j x + M.basicUnsafeWriteAsMulti v2 j y + M.basicUnsafeWriteAsMulti v3 j z + +instance (Unbox a, G.PackedVector Vector a) => G.PackedVector Vector (a, a, a) where + {-# INLINE basicUnsafeIndexAsMultiM #-} + basicUnsafeIndexAsMultiM (V_3 _ v1 v2 v3) j = + do x <- G.basicUnsafeIndexAsMultiM v1 j + y <- G.basicUnsafeIndexAsMultiM v2 j + z <- G.basicUnsafeIndexAsMultiM v3 j + return $! M_3 x y z + + basicUnsafePrefetchDataM (V_3 n v1 v2 v3) j k = + do v1' <- G.basicUnsafePrefetchDataM v1 j k + v2' <- G.basicUnsafePrefetchDataM v2 j k + v3' <- G.basicUnsafePrefetchDataM v3 j k + return $! V_3 n v1' v2' v3' #endif /* defined(__GLASGOW_HASKELL_LLVM__) */ -- GitLab