libcopp 2.3.1
All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
cmd_option_list.cpp
Go to the documentation of this file.
1/*
2 * cmd_option_list.cpp
3 *
4 * Created on: 2011-12-29
5 * Author: OWenT
6 *
7 * 应用程序命令处理
8 *
9 */
10
11#include "cli/cmd_option_list.h"
12#include "cli/cmd_option.h"
13
14namespace util {
15namespace cli {
17
18cmd_option_list::cmd_option_list() : ext_param_(nullptr) {}
19
20cmd_option_list::cmd_option_list(int argv, const char *argc[]) : ext_param_(nullptr) {
21 for (int i = 0; i < argv; ++i) keys_.push_back(std::make_shared<cmd_option_value>(argc[i]));
22}
23
24cmd_option_list::cmd_option_list(const std::vector<std::string> &cmds) : ext_param_(nullptr) {
25 std::vector<std::string>::size_type uSize = cmds.size();
26 for (std::vector<std::string>::size_type i = 0; i < uSize; ++i) {
27 keys_.push_back(std::make_shared<cmd_option_value>(cmds[i].c_str()));
28 }
29}
30
32 typedef std::map<std::string, value_type> key_map_type;
33 typedef std::vector<value_type> keys_type;
34 // 已经初始化,跳过
35 if (key_value_.get() != nullptr) return;
36
37 key_value_ = std::shared_ptr<key_map_type>(new key_map_type());
38
39 for (keys_type::size_type i = 0; i < keys_.size(); ++i) {
40 const char *str_key = keys_[i]->to_string();
41 if (nullptr == str_key) {
42 continue;
43 }
44
45 const char *str_val = str_key;
46 for (; *str_val && ':' != *str_val && '=' != *str_val; ++str_val);
47 if (*str_val) {
48 ++str_val;
49 } else {
50 continue;
51 }
52
53 std::string val;
54 cmd_option::get_segment(str_val, val);
55 (*key_value_)[std::string(str_key, str_val - 1)] = std::make_shared<cmd_option_value>(val);
56 }
57}
58
59void cmd_option_list::add(const char *param) { keys_.push_back(std::make_shared<cmd_option_value>(param)); }
60
62 key_value_.reset(); // 删除key-value映射
63 keys_.clear(); // 删除索引下标映射
64 cmd_array_.clear(); // 删除指令栈集合
65 ext_param_ = nullptr; // 透传参数置空
66}
67
69
70void cmd_option_list::append_cmd(const char *cmd_content, std::shared_ptr<binder::cmd_option_bind_base> base_node) {
71 cmd_array_.push_back(std::make_pair(cmd_content, base_node));
72}
73
75
77
78cmd_option_list::value_type cmd_option_list::get(std::string key, const char *default_val) {
79 value_type ret_ptr = get(key);
80 if (ret_ptr.get() == nullptr) return std::make_shared<cmd_option_value>(default_val);
81 return ret_ptr;
82}
83
86
87 std::map<std::string, value_type>::const_iterator itr;
88 itr = key_value_->find(key);
89 if (itr == key_value_->end()) return value_type();
90 return itr->second;
91}
92
94
95// 操作符重载,功能和上面一样
97
98// 获取参数数量
100
101// 重置Key-Value映射表
103
104void cmd_option_list::set_ext_param(void *param) { ext_param_ = param; }
105
107} // namespace cli
108} // namespace util
static const char * get_segment(const char *begin_str, std::string &val)
Definition cmd_option.h:225
value_type get(std::string key, const char *default_val)
value_type operator[](size_type index) const
std::shared_ptr< cmd_option_value > value_type
void append_cmd(const char *cmd_content, std::shared_ptr< binder::cmd_option_bind_base > base_node)
size_type get_params_number() const
void load_cmd_array(const cmd_array_type &cmds)
std::shared_ptr< std::map< std::string, std::shared_ptr< cmd_option_value > > > key_value_
const cmd_array_type & get_cmd_array() const
std::vector< std::shared_ptr< cmd_option_value > > keys_
std::vector< value_type >::size_type size_type
std::vector< std::pair< std::string, std::shared_ptr< binder::cmd_option_bind_base > > > cmd_array_type
void add(const char *param)