[mlpack-svn] r10460 - in mlpack/trunk/src/mlpack: core/utilities tests

fastlab-svn at coffeetalk-1.cc.gatech.edu fastlab-svn at coffeetalk-1.cc.gatech.edu
Tue Nov 29 21:16:36 EST 2011


Author: nslagle
Date: 2011-11-29 21:16:36 -0500 (Tue, 29 Nov 2011)
New Revision: 10460

Modified:
   mlpack/trunk/src/mlpack/core/utilities/save_restore_utility.hpp
   mlpack/trunk/src/mlpack/core/utilities/save_restore_utility_impl.hpp
   mlpack/trunk/src/mlpack/tests/save_restore_utility_test.cpp
Log:
mlpack/core: add std::vector as a save/load valid type (so long as the templated type is basic, for now)

Modified: mlpack/trunk/src/mlpack/core/utilities/save_restore_utility.hpp
===================================================================
--- mlpack/trunk/src/mlpack/core/utilities/save_restore_utility.hpp	2011-11-30 01:44:15 UTC (rev 10459)
+++ mlpack/trunk/src/mlpack/core/utilities/save_restore_utility.hpp	2011-11-30 02:16:36 UTC (rev 10460)
@@ -11,7 +11,6 @@
 #ifndef SAVE_RESTORE_MODEL_HPP
 #define SAVE_RESTORE_MODEL_HPP
 
-#include <err.h>
 #include <list>
 #include <map>
 #include <sstream>
@@ -20,8 +19,8 @@
 #include <libxml/parser.h>
 #include <libxml/tree.h>
 
+#include <boost/tokenizer.hpp>
 #include <mlpack/core.hpp>
-#include <boost/tokenizer.hpp>
 
 namespace mlpack {
 namespace utilities {
@@ -54,6 +53,11 @@
   template<typename T>
   T& LoadParameter(T& t, std::string name);
   /**
+   * LoadParameter loads a parameter from the parameters map.
+   */
+  template<typename T>
+  std::vector<T>& LoadParameter(std::vector<T>& v, std::string name);
+  /**
    * LoadParameter loads a character from the parameters map.
    */
   char LoadParameter(char c, std::string name);
@@ -71,6 +75,11 @@
   template<typename T>
   void SaveParameter(T& t, std::string name);
   /**
+   * SaveParameter saves a parameter to the parameters map.
+   */
+  template<typename T>
+  void SaveParameter(std::vector<T>& v, std::string name);
+  /**
    * SaveParameter saves a character to the parameters map.
    */
   void SaveParameter(char c, std::string name);
@@ -79,7 +88,7 @@
    */
   void SaveParameter(arma::mat& mat, std::string name);
 };
-} /* namespace model */
+} /* namespace utilities */
 } /* namespace mlpack */
 
 #include "save_restore_utility_impl.hpp"

Modified: mlpack/trunk/src/mlpack/core/utilities/save_restore_utility_impl.hpp
===================================================================
--- mlpack/trunk/src/mlpack/core/utilities/save_restore_utility_impl.hpp	2011-11-30 01:44:15 UTC (rev 10459)
+++ mlpack/trunk/src/mlpack/core/utilities/save_restore_utility_impl.hpp	2011-11-30 02:16:36 UTC (rev 10460)
@@ -32,9 +32,50 @@
   return t;
 }
 template<typename T>
+std::vector<T>& SaveRestoreUtility::LoadParameter(std::vector<T>& v, std::string name)
+{
+  std::map<std::string, std::string>::iterator it = parameters.find(name);
+  if (it != parameters.end())
+  {
+    v.clear();
+    std::string value = (*it).second;
+    boost::char_separator<char> sep (",");
+    boost::tokenizer<boost::char_separator<char> > tok (value, sep);
+    std::list<std::list<double> > rows;
+    for (boost::tokenizer<boost::char_separator<char> >::iterator
+           tokIt = tok.begin();
+         tokIt != tok.end();
+         ++tokIt)
+    {
+      T t;
+      std::istringstream iss (*tokIt);
+      iss >> t;
+      v.push_back(t);
+    }
+  }
+  else
+  {
+    Log::Fatal << "Failed to load the parameter " << name << std::endl;
+  }
+  return v;
+}
+template<typename T>
 void SaveRestoreUtility::SaveParameter(T& t, std::string name)
 {
   std::ostringstream output;
   output << t;
   parameters[name] = output.str();
 }
+
+template<typename T>
+void SaveRestoreUtility::SaveParameter(std::vector<T>& t, std::string name)
+{
+  std::ostringstream output;
+  for (size_t index = 0; index < t.size(); ++index)
+  {
+    output << t[index] << ",";
+  }
+  std::string vectorAsStr = output.str();
+  vectorAsStr.erase(vectorAsStr.length() - 1);
+  parameters[name] = vectorAsStr;
+}

Modified: mlpack/trunk/src/mlpack/tests/save_restore_utility_test.cpp
===================================================================
--- mlpack/trunk/src/mlpack/tests/save_restore_utility_test.cpp	2011-11-30 01:44:15 UTC (rev 10459)
+++ mlpack/trunk/src/mlpack/tests/save_restore_utility_test.cpp	2011-11-30 02:16:36 UTC (rev 10460)
@@ -100,6 +100,27 @@
   delete sRM;
 }
 
+BOOST_AUTO_TEST_CASE(save_restore_std_vector)
+{
+  size_t numbers[] = {0,3,6,2,6};
+  std::vector<size_t> vec (numbers,
+                           numbers + sizeof (numbers) / sizeof (size_t));
+  SaveRestoreUtility* sRM = new SaveRestoreUtility();
+
+  sRM->SaveParameter(ARGSTR(vec));
+
+  sRM->WriteFile("test_std_vector_type.xml");
+
+  sRM->ReadFile("test_std_vector_type.xml");
+
+  std::vector<size_t> loadee = sRM->LoadParameter(ARGSTR(vec));
+
+  for (size_t index = 0; index < loadee.size(); ++index)
+  {
+    BOOST_REQUIRE_EQUAL(numbers[index], loadee[index]);
+  }
+}
+
 /**
  * Test the arma::mat functionality.
  */




More information about the mlpack-svn mailing list