diff options
author | Alberto Ruiz <aruiz@um.es> | 2012-01-07 04:28:58 -0800 |
---|---|---|
committer | Alberto Ruiz <aruiz@um.es> | 2012-01-07 04:28:58 -0800 |
commit | a6c307a0d9c3b48bf80d7012b893f2f9d1db9487 (patch) | |
tree | ca761c585a7a5287eae45a673f10f58931c8353a /lib/Data/Packed/ST.hs | |
parent | 2b009db14f1d3d4985f0274b71ed9ad86e9e2b7b (diff) | |
parent | fdf8d8778d52cf14aec493ef5ab18d363b900ed7 (diff) |
Merge pull request #6 from reinerp/unsafe-building-primitives
Unsafe building/reading primitives
Diffstat (limited to 'lib/Data/Packed/ST.hs')
-rw-r--r-- | lib/Data/Packed/ST.hs | 13 |
1 files changed, 5 insertions, 8 deletions
diff --git a/lib/Data/Packed/ST.hs b/lib/Data/Packed/ST.hs index 22aff07..c96a209 100644 --- a/lib/Data/Packed/ST.hs +++ b/lib/Data/Packed/ST.hs | |||
@@ -98,7 +98,6 @@ readVector = safeIndexV unsafeReadVector | |||
98 | writeVector :: Storable t => STVector s t -> Int -> t -> ST s () | 98 | writeVector :: Storable t => STVector s t -> Int -> t -> ST s () |
99 | writeVector = safeIndexV unsafeWriteVector | 99 | writeVector = safeIndexV unsafeWriteVector |
100 | 100 | ||
101 | {-# NOINLINE newUndefinedVector #-} | ||
102 | newUndefinedVector :: Storable t => Int -> ST s (STVector s t) | 101 | newUndefinedVector :: Storable t => Int -> ST s (STVector s t) |
103 | newUndefinedVector = unsafeIOToST . fmap STVector . createVector | 102 | newUndefinedVector = unsafeIOToST . fmap STVector . createVector |
104 | 103 | ||
@@ -114,13 +113,13 @@ newVector x n = do | |||
114 | 113 | ||
115 | {-# INLINE ioReadM #-} | 114 | {-# INLINE ioReadM #-} |
116 | ioReadM :: Storable t => Matrix t -> Int -> Int -> IO t | 115 | ioReadM :: Storable t => Matrix t -> Int -> Int -> IO t |
117 | ioReadM (MC _ nc cv) r c = ioReadV cv (r*nc+c) | 116 | ioReadM (Matrix _ nc cv RowMajor) r c = ioReadV cv (r*nc+c) |
118 | ioReadM (MF nr _ fv) r c = ioReadV fv (c*nr+r) | 117 | ioReadM (Matrix nr _ fv ColumnMajor) r c = ioReadV fv (c*nr+r) |
119 | 118 | ||
120 | {-# INLINE ioWriteM #-} | 119 | {-# INLINE ioWriteM #-} |
121 | ioWriteM :: Storable t => Matrix t -> Int -> Int -> t -> IO () | 120 | ioWriteM :: Storable t => Matrix t -> Int -> Int -> t -> IO () |
122 | ioWriteM (MC _ nc cv) r c val = ioWriteV cv (r*nc+c) val | 121 | ioWriteM (Matrix _ nc cv RowMajor) r c val = ioWriteV cv (r*nc+c) val |
123 | ioWriteM (MF nr _ fv) r c val = ioWriteV fv (c*nr+r) val | 122 | ioWriteM (Matrix nr _ fv ColumnMajor) r c val = ioWriteV fv (c*nr+r) val |
124 | 123 | ||
125 | newtype STMatrix s t = STMatrix (Matrix t) | 124 | newtype STMatrix s t = STMatrix (Matrix t) |
126 | 125 | ||
@@ -154,8 +153,7 @@ unsafeFreezeMatrix (STMatrix x) = unsafeIOToST . return $ x | |||
154 | freezeMatrix :: (Storable t) => STMatrix s1 t -> ST s2 (Matrix t) | 153 | freezeMatrix :: (Storable t) => STMatrix s1 t -> ST s2 (Matrix t) |
155 | freezeMatrix m = liftSTMatrix id m | 154 | freezeMatrix m = liftSTMatrix id m |
156 | 155 | ||
157 | cloneMatrix (MC r c d) = cloneVector d >>= return . MC r c | 156 | cloneMatrix (Matrix r c d o) = cloneVector d >>= return . (\d' -> Matrix r c d' o) |
158 | cloneMatrix (MF r c d) = cloneVector d >>= return . MF r c | ||
159 | 157 | ||
160 | {-# INLINE safeIndexM #-} | 158 | {-# INLINE safeIndexM #-} |
161 | safeIndexM f (STMatrix m) r c | 159 | safeIndexM f (STMatrix m) r c |
@@ -172,7 +170,6 @@ readMatrix = safeIndexM unsafeReadMatrix | |||
172 | writeMatrix :: Storable t => STMatrix s t -> Int -> Int -> t -> ST s () | 170 | writeMatrix :: Storable t => STMatrix s t -> Int -> Int -> t -> ST s () |
173 | writeMatrix = safeIndexM unsafeWriteMatrix | 171 | writeMatrix = safeIndexM unsafeWriteMatrix |
174 | 172 | ||
175 | {-# NOINLINE newUndefinedMatrix #-} | ||
176 | newUndefinedMatrix :: Storable t => MatrixOrder -> Int -> Int -> ST s (STMatrix s t) | 173 | newUndefinedMatrix :: Storable t => MatrixOrder -> Int -> Int -> ST s (STMatrix s t) |
177 | newUndefinedMatrix order r c = unsafeIOToST $ fmap STMatrix $ createMatrix order r c | 174 | newUndefinedMatrix order r c = unsafeIOToST $ fmap STMatrix $ createMatrix order r c |
178 | 175 | ||