00001 #pragma once
00002
00003 #include "common.h"
00004 #include <iostream>
00005 #include <map>
00006
00007
00008
00009 class Arguments
00010 {
00011 friend std::ostream & operator << (std::ostream & os, const Arguments & argArguments);
00012
00013 public:
00014
00015 Arguments(int argc = 0, char **argv = NULL) : m_strApplicationFilename("VisLuFramework.exe")
00016 {
00017 if (argc > 0)
00018 {
00019 m_strApplicationFilename = argv[0];
00020
00021 for (int i=1;i<argc;i++)
00022 {
00023 const std::string strArgument = trim(argv[i]);
00024
00025 if (strArgument.size() > 1)
00026 {
00027 if (strArgument[0] == '-')
00028 {
00029 const std::string strOptionName = trim(strArgument.substr(1,strArgument.size()-1));
00030
00031 if (i < argc-1)
00032 {
00033 const std::string strOptionValue = trim(argv[i+1]);
00034 m_mapOptions[strOptionName] = strOptionValue;
00035 i++;
00036 }
00037 }
00038
00039 }
00040 }
00041 }
00042 };
00043
00044 ~Arguments()
00045 {
00046
00047 };
00048
00049 void SetApplicationFilename(const std::string & strApplicationFilename)
00050 {
00051 m_strApplicationFilename = strApplicationFilename;
00052 };
00053
00054 const std::string & GetApplicationFilename() const
00055 {
00056 return m_strApplicationFilename;
00057 };
00058
00059 const bool HasOption(const std::string & strOptionName) const
00060 {
00061 return m_mapOptions.find(strOptionName) != m_mapOptions.end();
00062 };
00063
00064 void SetOption(const std::string & strOptionName, const std::string & strOptionValue)
00065 {
00066 m_mapOptions[strOptionName] = strOptionValue;
00067 };
00068
00069 const std::string GetOption(const std::string & strOptionName) const
00070 {
00071 std::map<std::string,std::string>::const_iterator i = m_mapOptions.find(strOptionName);
00072
00073 if (i != m_mapOptions.end())
00074 return i->second;
00075
00076 return std::string();
00077 };
00078
00079 private:
00080 std::string m_strApplicationFilename;
00081 std::map<std::string,std::string> m_mapOptions;
00082 };
00083
00084 inline std::ostream & operator << (std::ostream & os, const Arguments & argArguments)
00085 {
00086 if (argArguments.GetApplicationFilename().find(" ") != std::string::npos)
00087 os << "\"" << argArguments.GetApplicationFilename() << "\"";
00088 else
00089 os << argArguments.GetApplicationFilename();
00090
00091
00092 for (std::map<std::string,std::string>::const_iterator i=argArguments.m_mapOptions.begin();i!=argArguments.m_mapOptions.end();i++)
00093 {
00094 if (i->second.find(" ") != std::string::npos)
00095 os << " -" << i->first << " " << "\"" << i->second << "\"";
00096 else
00097 os << " -" << i->first << " " << i->second;
00098 }
00099
00100 return os;
00101 }
00102