yes
This commit is contained in:
72
Runtime/Includes/Core/CLI.inl
git.filemode.normal_file
72
Runtime/Includes/Core/CLI.inl
git.filemode.normal_file
@@ -0,0 +1,72 @@
|
||||
#pragma once
|
||||
#include <Core/CLI.h>
|
||||
|
||||
#include <algorithm>
|
||||
|
||||
namespace Scop
|
||||
{
|
||||
CommandLineInterface::CommandLineInterface()
|
||||
{
|
||||
s_instance = this;
|
||||
}
|
||||
|
||||
std::optional<std::string> CommandLineInterface::GetOption(std::string_view option) const
|
||||
{
|
||||
auto it = m_options.find(static_cast<std::string>(option));
|
||||
if(it == m_options.end())
|
||||
return std::nullopt;
|
||||
return it->second;
|
||||
}
|
||||
|
||||
std::optional<std::string> CommandLineInterface::GetArgument(std::string_view arg) const
|
||||
{
|
||||
auto it = std::find(m_args.begin(), m_args.end(), arg);
|
||||
if(it == m_args.end())
|
||||
return std::nullopt;
|
||||
return *it;
|
||||
}
|
||||
|
||||
bool CommandLineInterface::HasFlag(std::string_view flag) const
|
||||
{
|
||||
return std::find(m_flags.begin(), m_flags.end(), flag) != m_flags.end();
|
||||
}
|
||||
|
||||
const std::string& CommandLineInterface::GetCommand() const
|
||||
{
|
||||
return m_cmd;
|
||||
}
|
||||
|
||||
void CommandLineInterface::Feed(int ac, char** av)
|
||||
{
|
||||
if(ac == 0 || av == nullptr)
|
||||
return;
|
||||
m_cmd = av[0];
|
||||
for(int i = 1; i < ac; i++)
|
||||
{
|
||||
std::string_view arg{ av[i] };
|
||||
if(arg.front() == '-')
|
||||
{
|
||||
arg.remove_prefix(1);
|
||||
if(arg.front() == '-') // in case of arg begenning with --
|
||||
arg.remove_prefix(1);
|
||||
std::size_t finder = arg.find_first_of('=');
|
||||
if(finder != std::string_view::npos)
|
||||
m_options.emplace(std::make_pair(arg.substr(0, finder), arg.substr(finder + 1)));
|
||||
else
|
||||
m_flags.emplace(arg);
|
||||
}
|
||||
else
|
||||
m_args.emplace(arg);
|
||||
}
|
||||
}
|
||||
|
||||
CommandLineInterface& CommandLineInterface::Get() noexcept
|
||||
{
|
||||
return *s_instance;
|
||||
}
|
||||
|
||||
CommandLineInterface::~CommandLineInterface()
|
||||
{
|
||||
s_instance = nullptr;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user