Changeset 11716 for third-party
- Timestamp:
- 07/24/06 00:34:43 (2 years ago)
- Location:
- third-party/HsJudy
- Files:
-
- 6 modified
-
Judy/Map.hs (modified) (3 diffs)
-
Judy/Map2.hs (modified) (3 diffs)
-
Judy/MapSL.hs (modified) (4 diffs)
-
Judy/MiniGC.hs (modified) (4 diffs)
-
Judy/Refeable.hs (modified) (2 diffs)
-
TODO (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
third-party/HsJudy/Judy/Map.hs
r11676 r11716 117 117 rawElems = internalMap $ \r _ _ -> peek r 118 118 119 new_ :: IO (Map k a) 119 dummy :: Refeable a => Map k a -> a 120 dummy = undefined 121 122 123 new_ :: Refeable a => IO (Map k a) 120 124 new_ = do 121 125 fp <- mallocForeignPtr 122 finalize' <- mkFin $ finalize (needGC (undefined :: a)) 126 withForeignPtr fp $ flip poke nullPtr 127 m <- return $ Map fp 128 129 finalize' <- mkFin $ finalize $ needGC (dummy m) 123 130 addForeignPtrFinalizer finalize' fp 124 withForeignPtr fp $ flip poke nullPtr 125 return $ Map fp 131 return m 126 132 127 133 insert_ :: (Stringable k, Refeable a) => k -> a -> Map k a -> IO () … … 154 160 return Nothing 155 161 else if v /= (fromJust fv) 156 then do when (needGC ( undefined :: a)) $ GC.freeRef v'162 then do when (needGC (fromJust fv)) $ GC.freeRef v' 157 163 x <- toRef (fromJust fv) 158 164 poke r x … … 180 186 181 187 delete_ :: Stringable k => k -> Map k a -> IO Bool 182 delete_ k (Map j) = withForeignPtr j $ \j' -> do188 delete_ k m@(Map j) = withForeignPtr j $ \j' -> do 183 189 j'' <- peek j' 184 190 useAsCSLen k $ \(cp, len) -> do 185 when (needGC ( undefined :: a)) $ do191 when (needGC (dummy m)) $ do 186 192 r <- judyHSGet j'' cp (fromIntegral len) 187 193 if r == nullPtr -
third-party/HsJudy/Judy/Map2.hs
r11676 r11716 74 74 rawElems = internalMap $ \r _ -> peek r 75 75 76 new_ :: IO (Map2 k a) 76 dummy :: Refeable a => Map2 k a -> a 77 dummy = undefined 78 79 new_ :: Refeable a => IO (Map2 k a) 77 80 new_ = do 78 81 fp <- mallocForeignPtr 79 finalize' <- mkFin $ finalize (needGC (undefined :: a)) 82 withForeignPtr fp $ flip poke nullPtr 83 m <- return $ Map2 fp 84 85 finalize' <- mkFin $ finalize $ needGC (dummy m) 80 86 addForeignPtrFinalizer finalize' fp 81 withForeignPtr fp $ flip poke nullPtr 82 return $ Map2 fp 87 return m 83 88 84 89 insert_ :: (ReversibleHashIO k, Refeable a) => k -> a -> Map2 k a -> IO () … … 107 112 return Nothing -- FIXME check delete output 108 113 else if v /= (fromJust fv) 109 then do when (needGC ( undefined :: a)) $ GC.freeRef v'114 then do when (needGC (fromJust fv)) $ GC.freeRef v' 110 115 x <- toRef (fromJust fv) 111 116 poke r x … … 130 135 131 136 delete_ :: ReversibleHashIO k => k -> Map2 k a -> IO Bool 132 delete_ k (Map2 j) = withForeignPtr j $ \j' -> do137 delete_ k m@(Map2 j) = withForeignPtr j $ \j' -> do 133 138 j'' <- peek j' 134 139 k' <- hashIO k 135 when (needGC ( undefined :: a)) $ do140 when (needGC (dummy m)) $ do 136 141 r <- judyLGet j'' k' judyError 137 142 if r == nullPtr -
third-party/HsJudy/Judy/MapSL.hs
r11676 r11716 58 58 show (MapSL j) = "<MapSL " ++ show j ++ ">" 59 59 60 61 60 foreign import ccall "wrapper" mkFin :: (Ptr JudySL -> IO ()) -> IO (FunPtr (Ptr JudySL -> IO ())) 62 61 63 62 finalize :: Bool -> Ptr JudySL -> IO () 64 63 finalize need j = do 64 putStrLn $ show $ need 65 65 when need $ do 66 66 j_ <- newForeignPtr_ j … … 73 73 rawElems = internalMap $ \r _ -> peek r 74 74 75 new_ :: IO (MapSL k a) 75 dummy :: Refeable a => MapSL k a -> a 76 dummy = undefined 77 78 new_ :: Refeable a => IO (MapSL k a) 76 79 new_ = do 77 80 fp <- mallocForeignPtr 78 finalize' <- mkFin $ finalize (needGC (undefined :: a)) 81 withForeignPtr fp $ flip poke nullPtr 82 m <- return $ MapSL fp 83 84 -- putStrLn $ show $ needGC $ dummy m 85 finalize' <- mkFin $ finalize $ needGC $ dummy m 79 86 addForeignPtrFinalizer finalize' fp 80 withForeignPtr fp $ flip poke nullPtr 81 return $ MapSL fp 87 return m 82 88 83 89 insert_ :: (Stringable k, Refeable a) => k -> a -> MapSL k a -> IO () … … 106 112 return Nothing 107 113 else if v /= (fromJust fv) 108 then do when (needGC ( undefined :: a)) $ GC.freeRef v'114 then do when (needGC (fromJust fv)) $ GC.freeRef v' 109 115 x <- toRef (fromJust fv) 110 116 poke r x … … 128 134 return $ r /= nullPtr 129 135 130 delete_ :: Stringable k=> k -> MapSL k a -> IO Bool131 delete_ k (MapSL j) = withForeignPtr j $ \j' -> do136 delete_ :: (Stringable k, Refeable a) => k -> MapSL k a -> IO Bool 137 delete_ k m@(MapSL j) = withForeignPtr j $ \j' -> do 132 138 j'' <- peek j' 133 139 useAsCS k $ \k' -> do 134 when (needGC ( undefined :: a)) $ do140 when (needGC (dummy m)) $ do 135 141 r <- judySLGet j'' k' judyError 136 142 if r == nullPtr -
third-party/HsJudy/Judy/MiniGC.hs
r11694 r11716 19 19 v <- newStablePtr a 20 20 let v' = ptrToWordPtr $ castStablePtrToPtr v 21 alter 2f v' judyGC21 alter f v' judyGC 22 22 return v' 23 23 where f Nothing = Just 1 … … 26 26 freeRef v = do 27 27 --putStr "(free? " 28 alter 2f v judyGC28 alter f v judyGC 29 29 x <- member v judyGC 30 30 if x … … 35 35 f (Just 1) = Nothing 36 36 f (Just n) = Just (n-1) 37 38 37 39 38 {- Special implementation of (GCMap Value Int) over JudyL for use in GC -} … … 60 59 else poke r (toEnum v) 61 60 62 alter 2:: (Maybe Int -> Maybe Int) -> Value -> GCMap -> IO ()63 alter 2f k m@(GCMap j) = do61 alter :: (Maybe Int -> Maybe Int) -> Value -> GCMap -> IO () 62 alter f k m@(GCMap j) = do 64 63 j' <- withForeignPtr j peek 65 64 r <- judyLGet j' k judyError -
third-party/HsJudy/Judy/Refeable.hs
r11676 r11716 15 15 -- out of "Refeable a" context. Maybe something arch related, dunno. =P 16 16 17 class Dummy a18 instance Dummy a17 --class Dummy a 18 --instance Dummy a 19 19 20 20 class Refeable a where … … 23 23 needGC :: a -> Bool 24 24 25 instance Dummy a => Refeable a where26 --instance Refeable a where25 --instance Dummy a => Refeable a where 26 instance Refeable a where 27 27 toRef = GC.newRef 28 28 fromRef v = do -
third-party/HsJudy/TODO
r11645 r11716 2 2 - Use Judy to implement Pugs IHash substitute. (First patch done, but it's old by now) 3 3 - CollectionsM: complete the subset of MapM and uncomment/complete CollectionM. 4 - See if needGC hack can be improved. It seems its eating CPU time. 4 5 5 6 - First RBR test: 1/3 running time when using MapL (via Map2). Not sure … … 8 9 - Other missing malloc error checking 9 10 - Tests that stress MiniGC (w/ two maps at same time would be nice too) 10 11 - Good application for Judy: Interning 12 http://repetae.net/dw/darcsweb.cgi?r=jhc;a=headblob;f=/Atom.hs 13 And check how GHC do it. 14 11 - Check how GHC do interning 15 12 16 13 # "CRAZY" BUGS
