61 lines
1.0 KiB
C++
61 lines
1.0 KiB
C++
// TJP COPYRIGHT HEADER
|
|
|
|
#ifdef TJP_CORE_HEADER_ONLY
|
|
#pragma once
|
|
#endif
|
|
|
|
#include <tjp/core/header_only/compile.h>
|
|
|
|
#include "ArgsFile.h"
|
|
#include <tjp/core/exception/Exception.hpp>
|
|
|
|
#include <tjp/core/string/String.hpp>
|
|
#include <tjp/core/string/StringView.hpp>
|
|
#include <tjp/core/string/trim.h>
|
|
|
|
#include <fstream>
|
|
#include <string>
|
|
#include <map>
|
|
|
|
namespace tjp::core {
|
|
|
|
TJP_CORE_HEADER_ONLY_INLINE
|
|
Optional<Args> readArgsFile(const std::string& filename)
|
|
{
|
|
std::ifstream file(filename);
|
|
if (!file)
|
|
throw Exception("Failed to open file");
|
|
|
|
Args result;
|
|
String line_;
|
|
|
|
while (std::getline(file, line_))
|
|
{
|
|
auto line = trim_copy(StringView(line_));
|
|
// Skip empty lines and comments
|
|
if (line.empty() || line[0] == '#')
|
|
continue;
|
|
|
|
auto pos = line.find('=');
|
|
if (pos == line.npos)
|
|
continue;
|
|
|
|
auto key = line.substr(0, pos);
|
|
auto value = line.substr(pos + 1);
|
|
|
|
result[String(key)] = String(value);
|
|
}
|
|
|
|
return result;
|
|
}
|
|
|
|
TJP_CORE_HEADER_ONLY_INLINE
|
|
void mergeArgs(Args &args, Args &rhs)
|
|
{
|
|
args.merge(rhs);
|
|
}
|
|
|
|
|
|
} // namespace
|
|
|