Jouni's Incremental BWT integrated into TextCollection
[SXSI/TextCollection.git] / incbwt / misc / parameters.cpp
diff --git a/incbwt/misc/parameters.cpp b/incbwt/misc/parameters.cpp
new file mode 100644 (file)
index 0000000..7f7d0dd
--- /dev/null
@@ -0,0 +1,108 @@
+#include <cstdlib>
+#include <iostream>
+#include <map>
+
+#include "parameters.h"
+
+
+namespace CSA
+{
+
+
+Parameters::Parameters()
+{
+}
+
+Parameters::~Parameters()
+{
+}
+
+bool
+Parameters::contains(const std::string& key)
+{
+  return (this->parameters.find(key) != this->parameters.end());
+}
+
+usint
+Parameters::get(const std::string& key)
+{
+  std::map<std::string, usint>::iterator iter = this->parameters.find(key);
+  if(iter == this->parameters.end()) { return 0; }
+  return iter->second;
+}
+
+usint
+Parameters::get(const parameter_type& param)
+{
+  return this->get(param.first);
+}
+
+void
+Parameters::set(const std::string& key, usint value)
+{
+  this->parameters[key] = value;
+}
+
+void
+Parameters::set(const parameter_type& param)
+{
+  this->set(param.first, param.second);
+}
+
+void
+Parameters::read(std::ifstream& file)
+{
+  while(file)
+  {
+    std::string key;
+    std::string c;
+    usint value;
+
+    file >> key >> c >> value;
+    if(c == "=") { this->parameters[key] = value; }
+  }
+}
+
+void Parameters::read(const std::string& file_name)
+{
+  std::ifstream file(file_name.c_str(), std::ios_base::binary);
+  if(!file)
+  {
+    std::cerr << "Cannot open parameter file " << file_name << " for reading!" << std::endl;
+    return;
+  }
+  this->read(file);
+  file.close();
+}
+
+void
+Parameters::print()
+{
+  this->write(std::cout);
+  std::cout << std::endl;
+}
+
+void
+Parameters::write(std::ostream& stream)
+{
+  for(std::map<std::string, usint>::iterator iter = this->parameters.begin(); iter != this->parameters.end(); iter++)
+  {
+    stream << iter->first << " = " << iter->second << std::endl;
+  }
+}
+
+void
+Parameters::write(const std::string& file_name)
+{
+  std::ofstream file(file_name.c_str(), std::ios_base::binary);
+  if(!file)
+  {
+    std::cerr << "Cannot open parameter file " << file_name << " for writing!" << std::endl;
+    return;
+  }
+  this->write(file);
+  file.close();
+}
+
+
+} // namespace CSA