Rev 303 | Rev 324 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed
#pragma once
#include "WString.h"
#include "WStringList.h"
#include "../File_IO.h"
#include "../DirIO.h"
namespace Utils
{
class CommandLine
{
private:
std::shared_ptr<CFileIO> _file;
Utils::WStringList _options;
std::vector<Utils::WString> _args;
public:
CommandLine(int argc, char* argv[])
{
_file = std::make_shared<CFileIO>(argv[0]);
for (int i = 1; i < argc; i++)
{
Utils::WString arg(argv[i]);
if (arg.startsWith(L"--"))
{
arg = arg.substr(2);
if (arg.contains(L":"))
{
Utils::WString a = arg.token(L":", 1);
Utils::WString b = arg.tokens(L":", 2);
_options.pushBack(a, b);
}
else
_options.pushBack(arg);
}
else
_args.push_back(arg);
}
if (_file->dir().empty() || !_file->dir().contains("/"))
{
Utils::WString d;
#ifdef _WIN32
d = Utils::WString(_getcwd(NULL, 0));
#else
d = Utils::WString(getcwd(NULL, 0));
#endif
if (d.empty())
d = L"./";
_file->setDir(d);
}
}
const std::shared_ptr<CFileIO> file() const
{
return _file;
}
const Utils::WString& cmdName() const
{
return _file->filename();
}
const Utils::WString& cmdDir() const
{
return _file->dir();
}
const Utils::WStringList options() const
{
return _options;
}
const std::vector<Utils::WString>& args() const
{
return _args;
}
size_t argCount() const
{
return _args.size();
}
Utils::WString arg(size_t i) const
{
if(i >= _args.size())
return Utils::WString::Null();
return _args[i];
}
bool hasSwitch(const Utils::WString& s) const
{
return _options.contains(s);
}
Utils::WString switchData(const Utils::WString& s) const
{
if (_options.contains(s))
return _options[s]->data;
return Utils::WString::Null();
}
};
}