Files
core_misc/tjp/core/args/ArgsFile.cpp
Timothy Prepscius fa54be052a flatten 20260225
2026-02-25 12:39:24 -05:00

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