[openrtm-commit:02598] r2990 - trunk/OpenRTM-aist/src/lib/rtm

openrtm @ openrtm.org openrtm @ openrtm.org
2017年 4月 26日 (水) 22:48:07 JST


Author: n-ando
Date: 2017-04-26 22:48:07 +0900 (Wed, 26 Apr 2017)
New Revision: 2990

Modified:
   trunk/OpenRTM-aist/src/lib/rtm/Manager.cpp
   trunk/OpenRTM-aist/src/lib/rtm/Manager.h
   trunk/OpenRTM-aist/src/lib/rtm/ModuleManager.h
Log:
[incompat,return] Now Manager::load() function returns error code. refs #4028

Modified: trunk/OpenRTM-aist/src/lib/rtm/Manager.cpp
===================================================================
--- trunk/OpenRTM-aist/src/lib/rtm/Manager.cpp	2017-04-25 08:59:00 UTC (rev 2989)
+++ trunk/OpenRTM-aist/src/lib/rtm/Manager.cpp	2017-04-26 13:48:07 UTC (rev 2990)
@@ -543,10 +543,12 @@
    * @brief Load module
    * @endif
    */
-  void Manager::load(const char* fname, const char* initfunc)
+  ReturnCode_t Manager::load(const std::string& fname,
+                             const std::string& initfunc)
   {
     RTC_TRACE(("Manager::load(fname = %s, initfunc = %s)",
-               fname, initfunc));
+               fname.c_str(), initfunc.c_str()));
+
     std::string file_name(fname);
     std::string init_func(initfunc);
     m_listeners.module_.preLoad(file_name, init_func);
@@ -554,18 +556,42 @@
       {
         if (init_func.empty())
           {
-            coil::vstring mod(coil::split(fname, "."));
+            coil::vstring mod(coil::split(file_name, "."));
             init_func = mod[0] + "Init";
           }
         std::string path(m_module->load(file_name, init_func));
         RTC_DEBUG(("module path: %s", path.c_str()));
         m_listeners.module_.postLoad(path, init_func);
       }
+    catch(RTC::ModuleManager::NotAllowedOperation& e)
+      {
+        RTC_ERROR(("Operation not allowed: %s",
+                   e.reason.c_str()));
+        return RTC::PRECONDITION_NOT_MET;
+      }
+    catch(RTC::ModuleManager::NotFound& e)
+      {
+        RTC_ERROR(("Not found: %s",
+                   e.name.c_str()));
+        return RTC::RTC_ERROR;
+      }
+    catch(RTC::ModuleManager::InvalidArguments& e)
+      {
+        RTC_ERROR(("Invalid argument: %s",
+                   e.reason.c_str()));
+        return RTC::BAD_PARAMETER;
+      }
+    catch(RTC::ModuleManager::Error& e)
+      {
+        RTC_ERROR(("Error: %s", e.reason.c_str()));
+        return RTC::RTC_ERROR;
+      }
     catch (...)
       {
-        RTC_ERROR(("module load error."));
+        RTC_ERROR(("Unknown error."));
+        return RTC::RTC_ERROR;
       }
-    return;
+    return RTC::RTC_OK;
   }
   
   /*!

Modified: trunk/OpenRTM-aist/src/lib/rtm/Manager.h
===================================================================
--- trunk/OpenRTM-aist/src/lib/rtm/Manager.h	2017-04-25 08:59:00 UTC (rev 2989)
+++ trunk/OpenRTM-aist/src/lib/rtm/Manager.h	2017-04-26 13:48:07 UTC (rev 2990)
@@ -409,6 +409,11 @@
      *
      * @param fname   モジュールファイル名
      * @param initfunc 初期化関数名
+     * @return 終了コード
+     *         RTC::RTC_OK 正常終了
+     *         RTC::RTC_ERROR ロード失敗・不明なエラー
+     *         RTC::PRECONDITION_NOT_MET 設定にり許可されない操作
+     *         RTC::BAD_PARAMETER 不正なパラメータ
      * 
      * @else
      *
@@ -419,10 +424,15 @@
      *
      * @param fname    The module file name
      * @param initfunc The initialize function name
+     * @return Return code
+     *         RTC::RTC_OK Normal return
+     *         RTC::RTC_ERROR Load failed, or unknown error
+     *         RTC::PRECONDITION_NOT_MET Not allowed operation by conf
+     *         RTC::BAD_PARAMETER Invalid parameter
      *
      * @endif
      */  
-    void load(const char* fname, const char* initfunc);
+    ReturnCode_t load(const std::string& fname, const std::string& initfunc);
     
     /*!
      * @if jp

Modified: trunk/OpenRTM-aist/src/lib/rtm/ModuleManager.h
===================================================================
--- trunk/OpenRTM-aist/src/lib/rtm/ModuleManager.h	2017-04-25 08:59:00 UTC (rev 2989)
+++ trunk/OpenRTM-aist/src/lib/rtm/ModuleManager.h	2017-04-26 13:48:07 UTC (rev 2990)
@@ -5,7 +5,7 @@
  * @date $Date: 2007-12-31 03:08:04 $
  * @author Noriaki Ando <n-ando at aist.go.jp>
  *
- * Copyright (C) 2006-2010
+ * Copyright (C) 2006-2017
  *     Noriaki Ando
  *     Task-intelligence Research Group,
  *     Intelligent Systems Research Institute,



openrtm-commit メーリングリストの案内