//______________________________________________________________________ int optionmm::basic_option::position(size_t i) const { if (i >= _positions.size()) return 0; if (!many_values()) return _positions[0]; return _positions[i]; }
inline void option<Type,arg,multi,Convert,Toggle>::push_arg(int pos) { if (many_values()) push(_values[0], pos); else { // value_type& v = _values[0]; toggle_value<value_type>()(_values[0]); if (_positions.size() <= 0) _positions.push_back(pos); _positions[0] = pos; } }
inline void option<Type,arg,multi,Convert,Toggle>::push(const value_type& v, int pos) { if (!many_values() || (_values.size() == 1 && !_got_one) ) { _got_one = true; _values[0] = v; if (_positions.size() <= 0) _positions.push_back(pos); _positions[0] = pos; } else { _values.push_back(v); _positions.push_back(pos); } }
//____________________________________________________________________ void optionmm::basic_option::print(int ll, std::ostream& o) const { if (ll <= 0) ll=16; if (_short_name != '\0') o << "-" << _short_name <<", "; else o << " "; if (!_long_name.empty()) { o << "--" << _long_name; if (need_argument()) o << "=VALUE"; else o << " "; for (int i = _long_name.size(); i < ll; i++) o << " "; } else { o << std::setw(ll+2) << " "; if (need_argument()) o << " VALUE"; else o << " "; } o << "\t" << _help_string; if (many_values()) o << " (*)"; }
inline Type option<Type,arg,multi,Convert,Toggle>::value(size_t i) const { if (!many_values() || i >= _values.size()) return _values[0]; return _values[i]; }