Mercurial > hg > Members > toma > Jungle-haskell
diff Jungle.hs @ 10:29d0f605efa9
add updateRootNodeWith
author | Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp> |
---|---|
date | Tue, 21 Jan 2014 15:51:34 +0900 |
parents | 947c5cfa4149 |
children | 7360fbfc7e62 |
line wrap: on
line diff
--- a/Jungle.hs Tue Jan 21 13:17:02 2014 +0900 +++ b/Jungle.hs Tue Jan 21 15:51:34 2014 +0900 @@ -7,6 +7,7 @@ , createTree , getRootNode , updateRootNode +, updateRootNodeWith , addNewChildAt , deleteChildAt , putAttribute @@ -65,17 +66,26 @@ getTreeByName (Jungle map) tree_name = M.lookup tree_name map getRootNode :: Jungle -> String -> IO Node -getRootNode (Jungle map) tree_name = atomically $ readTVar (rootNode tree) +getRootNode (Jungle map) tree_name = atomically $ readTVar root_node where - tree = case M.lookup tree_name map of - Just x -> x + root_node = case M.lookup tree_name map of + Just x -> rootNode x -- ルートノードを更新する updateRootNode :: Jungle -> String -> Node -> IO () -updateRootNode (Jungle map) tree_name node = atomically $ writeTVar (rootNode tree) node +updateRootNode (Jungle map) tree_name node = atomically $ writeTVar root_node node where - tree = case M.lookup tree_name map of - Just x -> x + root_node = case M.lookup tree_name map of + Just x -> rootNode x + +updateRootNodeWith :: (Node -> Node) -> Jungle -> String -> IO () +updateRootNodeWith f (Jungle map) tree_name = + atomically $ do + n <- readTVar root_node + writeTVar root_node (f n) + where + root_node = case M.lookup tree_name map of + Just x -> rootNode x -- 新しい木構造を作成し、最新のルートノードとなるNodeを返す -- Pathの位置にNodeが存在しない場合どうするか?