first commit

This commit is contained in:
2026-01-18 20:37:50 +08:00
commit fff9f18287
123 changed files with 1385491 additions and 0 deletions

220
src/YAML_Element.cpp Normal file
View File

@@ -0,0 +1,220 @@
//@HEADER
// ***************************************************
//
// HPCG: High Performance Conjugate Gradient Benchmark
//
// Contact:
// Michael A. Heroux ( maherou@sandia.gov)
// Jack Dongarra (dongarra@eecs.utk.edu)
// Piotr Luszczek (luszczek@eecs.utk.edu)
//
// ***************************************************
//@HEADER
/*!
@file YAML_Element.cpp
HPCG routine
*/
#include "YAML_Element.hpp"
#include <fstream>
#include <iostream>
#include <sstream>
using namespace std;
YAML_Element::YAML_Element(const std::string& key_arg, const std::string& value_arg)
{
key = key_arg;
value = value_arg;
}
YAML_Element::~YAML_Element()
{
for (size_t i = 0; i < children.size(); i++)
{
delete children[i];
}
children.clear();
}
/*!
Add an element to the vector
QUESTION: if an element is not added because the key already exists,
will this lead to memory leakage?
@param[in] key_arg The key under which the element is stored
@param[in] value_arg The value of the element
@return Returns the added element
*/
YAML_Element* YAML_Element::add(const std::string& key_arg, double value_arg)
{
this->value = "";
string converted_value = convert_double_to_string(value_arg);
YAML_Element* element = new YAML_Element(key_arg, converted_value);
children.push_back(element);
return element;
}
/*!
Add an element to the vector
@param[in] key_arg The key under which the element is stored
@param[in] value_arg The value of the element
@return Returns the added element
*/
YAML_Element* YAML_Element::add(const std::string& key_arg, int value_arg)
{
this->value = "";
string converted_value = convert_int_to_string(value_arg);
YAML_Element* element = new YAML_Element(key_arg, converted_value);
children.push_back(element);
return element;
}
#ifndef HPCG_NO_LONG_LONG
/*!
Add an element to the vector
@param[in] key_arg The key under which the element is stored
@param[in] value_arg The value of the element
@return Returns the added element
*/
YAML_Element* YAML_Element::add(const std::string& key_arg, long long value_arg)
{
this->value = "";
string converted_value = convert_long_long_to_string(value_arg);
YAML_Element* element = new YAML_Element(key_arg, converted_value);
children.push_back(element);
return element;
}
#endif
/*!
Add an element to the vector
@param[in] key_arg The key under which the element is stored
@param[in] value_arg The value of the element
@return Returns the added element
*/
YAML_Element* YAML_Element::add(const std::string& key_arg, size_t value_arg)
{
this->value = "";
string converted_value = convert_size_t_to_string(value_arg);
YAML_Element* element = new YAML_Element(key_arg, converted_value);
children.push_back(element);
return element;
}
/*!
Add an element to the vector
@param[in] key_arg The key under which the element is stored
@param[in] value_arg The value of the element
@return Returns the added element
*/
YAML_Element* YAML_Element::add(const std::string& key_arg, const std::string& value_arg)
{
this->value = "";
YAML_Element* element = new YAML_Element(key_arg, value_arg);
children.push_back(element);
return element;
}
/*!
Returns the pointer to the YAML_Element for the given key.
@param[in] key_arg The key under which the element was stored
@return If found, returns the element, otherwise returns NULL
*/
YAML_Element* YAML_Element::get(const std::string& key_arg)
{
for (size_t i = 0; i < children.size(); i++)
{
if (children[i]->getKey() == key_arg)
{
return children[i];
}
}
return 0;
}
/*!
Prints a line of a YAML document. Correct YAML depends on
correct spacing; the parameter space should be the proper
amount of space for the parent element
@param[in] space spacing inserted at the beginning of the line
@return Returns a single line of the YAML document without the leading white space
*/
string YAML_Element::printYAML(std::string space)
{
string yaml_line = space + key + ": " + value + "\n";
for (int i = 0; i < 2; i++)
space = space + " ";
for (size_t i = 0; i < children.size(); i++)
{
yaml_line = yaml_line + children[i]->printYAML(space);
}
return yaml_line;
}
/*!
Converts a double precision value to a string.
@param[in] value_arg The value to be converted.
*/
string YAML_Element::convert_double_to_string(double value_arg)
{
stringstream strm;
strm << value_arg;
return strm.str();
}
/*!
Converts a integer value to a string.
@param[in] value_arg The value to be converted.
*/
string YAML_Element::convert_int_to_string(int value_arg)
{
stringstream strm;
strm << value_arg;
return strm.str();
}
#ifndef HPCG_NO_LONG_LONG
/*!
Converts a "long long" integer value to a string.
@param[in] value_arg The value to be converted.
*/
string YAML_Element::convert_long_long_to_string(long long value_arg)
{
stringstream strm;
strm << value_arg;
return strm.str();
}
#endif
/*!
Converts a "size_t" integer value to a string.
@param[in] value_arg The value to be converted.
*/
string YAML_Element::convert_size_t_to_string(size_t value_arg)
{
stringstream strm;
strm << value_arg;
return strm.str();
}