TCache 0.9.0.2 → 0.9.0.3
raw patch · 4 files changed
+20/−18 lines, 4 filesPVP: major bump suggested
API removals or changes: PVP suggests a major version bump
API changes (from Hackage documentation)
- Data.TCache.Defs: DBRef :: String -> (TPVar a) -> DBRef a
+ Data.TCache.Defs: DBRef :: !String -> !TPVar a -> DBRef a
- Data.TCache.Defs: Elem :: a -> AccessTime -> ModifTime -> Elem a
+ Data.TCache.Defs: Elem :: !a -> !AccessTime -> !ModifTime -> Elem a
- Data.TCache.Triggers: DBRef :: String -> (TPVar a) -> DBRef a
+ Data.TCache.Triggers: DBRef :: !String -> !TPVar a -> DBRef a
- Data.TCache.Triggers: Elem :: a -> AccessTime -> ModifTime -> Elem a
+ Data.TCache.Triggers: Elem :: !a -> !AccessTime -> !ModifTime -> Elem a
Files
- Data/TCache.hs +8/−7
- Data/TCache/DefaultPersistence.hs +8/−7
- Data/TCache/Defs.hs +2/−2
- TCache.cabal +2/−2
Data/TCache.hs view
@@ -267,9 +267,9 @@ import Control.Concurrent.MVar import Control.Exception(catch, throw)---import Debug.Trace+import Debug.Trace ---(!>) = flip trace+(!>) = flip trace -- there are two references to the DBRef here -- The Maybe one keeps it alive until the cache releases it for *Resources@@ -348,9 +348,9 @@ if newkey /= key then error $ "writeDBRef: law of key conservation broken: old , new= " ++ key ++ " , "++newkey else do- applyTriggers [dbref] [Just x] -- !> ("writeDBRef "++ key)+ applyTriggers [dbref] [Just x] t <- unsafeIOToSTM timeInteger- writeTVar tv $ Exist $ Elem x t t+ writeTVar tv $ Exist $ Elem x t t !> ("writeDBRef "++ key) return() @@ -453,11 +453,12 @@ newDBRef :: (IResource a, Typeable a) => a -> STM (DBRef a) newDBRef x = do- let ref= getDBRef $ keyResource x+ let ref= getDBRef $! keyResource x+ mr <- readDBRef ref case mr of- Nothing -> writeDBRef ref x >> return ref- Just r -> return ref+ Nothing -> writeDBRef ref x >> return ref !> " write"+ Just r -> return ref !> " non write" --newDBRef :: (IResource a, Typeable a) => a -> STM (DBRef a) --newDBRef x = do
Data/TCache/DefaultPersistence.hs view
@@ -30,10 +30,12 @@ import Data.TCache.Defs(castErr) import qualified Data.ByteString.Lazy.Char8 as B -import Debug.Trace+--import Debug.Trace+--+--a !> b = trace b a -a !> b = trace b a + {- | Indexable is an utility class used to derive instances of IResource Example:@@ -81,11 +83,10 @@ deserialize :: {-serialFormat-} B.ByteString -> a setPersist :: a -> Persist setPersist _= defaultPersist-{--instance (Show a, Read a)=> Serializable a where- serialize= show- deserialize= read--}++--instance (Show a, Read a)=> Serializable a where+-- serialize= show+-- deserialize= read -- |
Data/TCache/Defs.hs view
@@ -12,11 +12,11 @@ data Status a= NotRead | DoNotExist | Exist a deriving Typeable -data Elem a= Elem a AccessTime ModifTime deriving Typeable+data Elem a= Elem !a !AccessTime !ModifTime deriving Typeable type TPVar a= TVar (Status(Elem a)) -data DBRef a= DBRef String (TPVar a) deriving Typeable+data DBRef a= DBRef !String !(TPVar a) deriving Typeable
TCache.cabal view
@@ -1,5 +1,5 @@ name: TCache-version: 0.9.0.2+version: 0.9.0.3 synopsis: A Transactional cache with user-defined persistence description: TCache is a transactional cache with configurable persitence. It allows conventional@@ -7,7 +7,7 @@ their user defined storages. Default persistence in files is provided for testing purposes State in memory and into permanent storage is transactionally coherent. -+ 0.9.0.3 : Solved a "lost registers" bug. 0.9.0.1 : Solves a bug when object keys generate invalid filenames. changes in defaultPersistence to further separate serialization from input-output .