packages feed

HsWebots 0.1.0.1 → 0.1.1.0

raw patch · 2 files changed

+28/−20 lines, 2 files

Files

HsWebots.cabal view
@@ -4,10 +4,10 @@ -- -- see: https://github.com/sol/hpack ----- hash: 3b6e21d4ea12644e25ba1c2ef63bf2354c2a9c2624c04cf194be97b696647a81+-- hash: d7399ff5367c55e2b2afaaae32dcf8116890e0a71844b15a4b105fd4f5564ee8  name:           HsWebots-version:        0.1.0.1+version:        0.1.1.0 synopsis:       Webots bindings for Haskell description:    Please see the README on GitHub at <https://github.com/junjihashimoto/HsWebots#readme> category:       Robotics
src/Webots/Supervisor.hs view
@@ -141,10 +141,14 @@ wb_supervisor_node_get_type node =    [C.exp| WbNodeType { wb_supervisor_node_get_type($(WbNodeRef node)) } |] -wb_supervisor_node_get_field :: WbNodeRef -> String -> IO WbFieldRef -wb_supervisor_node_get_field node field_name =-  withCString field_name $ \field_name' -> -   [C.exp| WbFieldRef { wb_supervisor_node_get_field($(WbNodeRef node), $(const char* field_name')) } |]+wb_supervisor_node_get_field :: WbNodeRef -> String -> IO (Maybe WbFieldRef)+wb_supervisor_node_get_field node field_name = do+  ptr <- withCString field_name $ \field_name' -> +           [C.exp| WbFieldRef { wb_supervisor_node_get_field($(WbNodeRef node), $(const char* field_name')) } |]+  if ptr == nullPtr+  then return Nothing+  else return $ Just ptr+      wb_supervisor_node_remove :: WbNodeRef -> IO ()  wb_supervisor_node_remove node =@@ -500,10 +504,8 @@ fieldGetMfNode :: WbFieldRef -> CInt -> IO WbNodeRef fieldGetMfNode ptr i = [C.exp| WbNodeRef { wb_supervisor_field_get_mf_node($(WbFieldRef ptr), $(int i)) } |] -getField :: WbNodeRef -> String -> IO WbFieldRef-getField ptr str =-  withCString str $ \cstr -> -    [C.exp| WbFieldRef { wb_supervisor_node_get_field($(WbNodeRef ptr), $(char* cstr)) } |]+getField :: WbNodeRef -> String -> IO (Maybe WbFieldRef)+getField ptr str = wb_supervisor_node_get_field ptr str  getId :: WbNodeRef -> IO CInt getId ptr =@@ -535,14 +537,20 @@ getRootNodes :: IO [(WbNodeRef,CInt,String)] getRootNodes = do   root <- getRootNode-  children <- getField root "children"-  cnt <- fieldGetCount children-  forM [0..(cnt-1)] $ \i -> do-    node <- fieldGetMfNode children i-    nodeId <- getId node-    typeName <- getTypeName node-    return (node,nodeId,typeName)--getNodeFieldByString :: WbNodeRef -> String -> IO String-getNodeFieldByString node label = getField node label >>= fieldGetSfString+  mchildren <- getField root "children"+  case mchildren of+    Nothing -> return []+    Just children -> do+      cnt <- fieldGetCount children+      forM [0..(cnt-1)] $ \i -> do+        node <- fieldGetMfNode children i+        nodeId <- getId node+        typeName <- getTypeName node+        return (node,nodeId,typeName) +getNodeFieldByString :: WbNodeRef -> String -> IO (Maybe String)+getNodeFieldByString node label = do+  m <- getField node label+  case m of+    Nothing -> return Nothing+    Just field -> fieldGetSfString field >>= return.Just