[mlpack-svn] r16952 - mlpack/trunk/src/mlpack/core/util
fastlab-svn at coffeetalk-1.cc.gatech.edu
fastlab-svn at coffeetalk-1.cc.gatech.edu
Tue Aug 5 09:18:31 EDT 2014
Author: michaelfox99
Date: Tue Aug 5 09:18:31 2014
New Revision: 16952
Log:
Hierarchical model support
Modified:
mlpack/trunk/src/mlpack/core/util/save_restore_utility.cpp
Modified: mlpack/trunk/src/mlpack/core/util/save_restore_utility.cpp
==============================================================================
--- mlpack/trunk/src/mlpack/core/util/save_restore_utility.cpp (original)
+++ mlpack/trunk/src/mlpack/core/util/save_restore_utility.cpp Tue Aug 5 09:18:31 2014
@@ -1,6 +1,7 @@
/**
* @file save_restore_utility.cpp
* @author Neil Slagle
+ * @author Michael Fox
*
* The SaveRestoreUtility provides helper functions in saving and
* restoring models. The current output file type is XML.
@@ -19,25 +20,30 @@
}
xmlNodePtr root = xmlDocGetRootElement(xmlDocTree);
- parameters.clear();
-
- RecurseOnNodes(root->children);
+ ReadFile(root->children);
xmlFreeDoc(xmlDocTree);
return true;
}
-void SaveRestoreUtility::RecurseOnNodes(xmlNode* n)
+void SaveRestoreUtility::ReadFile(xmlNode* n)
{
+ parameters.clear();
xmlNodePtr current = NULL;
for (current = n; current; current = current->next)
{
if (current->type == XML_ELEMENT_NODE)
{
xmlChar* content = xmlNodeGetContent(current);
- parameters[(const char*) current->name] = (const char*) content;
+ if(xmlChildElementCount(current) == 0)
+ {
+ parameters[(const char*) current->name] = (const char*) content;
+ }
+ else
+ {
+ children[(const char*) current->name].ReadFile(current->children);
+ }
xmlFree(content);
}
- RecurseOnNodes(current->children);
}
}
@@ -46,30 +52,38 @@
bool success = false;
xmlDocPtr xmlDocTree = xmlNewDoc(BAD_CAST "1.0");
xmlNodePtr root = xmlNewNode(NULL, BAD_CAST "root");
-
xmlDocSetRootElement(xmlDocTree, root);
-
- for (std::map<std::string, std::string>::iterator it = parameters.begin();
- it != parameters.end();
- ++it)
- {
- xmlNewChild(root, NULL, BAD_CAST(*it).first.c_str(),
- BAD_CAST(*it).second.c_str());
- /* TODO: perhaps we'll add more later?
- * xmlNewProp(child, BAD_CAST "attr", BAD_CAST "add more addibutes?"); */
- }
+ WriteFile(root);
// Actually save the file.
- success =
- (xmlSaveFormatFileEnc(filename.c_str(), xmlDocTree, "UTF-8", 1) != -1);
+ success = (xmlSaveFormatFileEnc(filename.c_str(), xmlDocTree, "UTF-8", 1) !=
+ -1);
xmlFreeDoc(xmlDocTree);
return success;
}
+// this should be private member function
+void SaveRestoreUtility::WriteFile(xmlNode* n)
+{
+ for (std::map<std::string, std::string>::reverse_iterator it =
+ parameters.rbegin(); it != parameters.rend(); ++it)
+ {
+ xmlNewChild(n, NULL, BAD_CAST(*it).first.c_str(),
+ BAD_CAST(*it).second.c_str());
+ }
+ xmlNodePtr child;
+ for (std::map<std::string, SaveRestoreUtility>::iterator it =
+ children.begin(); it != children.end(); ++it)
+ {
+ child = xmlNewChild(n, NULL, BAD_CAST(*it).first.c_str(), NULL);
+ it->second.WriteFile(child);
+ }
+}
+
arma::mat& SaveRestoreUtility::LoadParameter(arma::mat& matrix,
- const std::string& name)
+ const std::string& name) const
{
- std::map<std::string, std::string>::iterator it = parameters.find(name);
+ std::map<std::string, std::string>::const_iterator it = parameters.find(name);
if (it != parameters.end())
{
std::string value = (*it).second;
@@ -126,9 +140,9 @@
}
std::string SaveRestoreUtility::LoadParameter(std::string& str,
- const std::string& name)
+ const std::string& name) const
{
- std::map<std::string, std::string>::iterator it = parameters.find(name);
+ std::map<std::string, std::string>::const_iterator it = parameters.find(name);
if (it != parameters.end())
{
return str = (*it).second;
@@ -140,9 +154,9 @@
return "";
}
-char SaveRestoreUtility::LoadParameter(char c, const std::string& name)
+char SaveRestoreUtility::LoadParameter(char c, const std::string& name) const
{
- std::map<std::string, std::string>::iterator it = parameters.find(name);
+ std::map<std::string, std::string>::const_iterator it = parameters.find(name);
if (it != parameters.end())
{
int temp;
@@ -190,7 +204,7 @@
template<>
arma::vec& SaveRestoreUtility::LoadParameter(arma::vec& t,
- const std::string& name)
+ const std::string& name) const
{
return (arma::vec&) LoadParameter((arma::mat&) t, name);
}
@@ -201,6 +215,13 @@
{
SaveParameter((const arma::mat&) t, name);
}
+
+void SaveRestoreUtility::AddChild(SaveRestoreUtility& mn, const std::string&
+ name)
+{
+ children[name] = mn;
+}
+
}; // namespace util
}; // namespace mlpack
More information about the mlpack-svn
mailing list