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 _WIN32d = Utils::WString(_getcwd(NULL, 0));#elsed = Utils::WString(getcwd(NULL, 0));#endifif (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();}};}