@@ -1633,6 +1633,62 @@ namespace po {
1633
1633
}
1634
1634
return result.error ;
1635
1635
}
1636
+
1637
+ void print_data ( std::ostream& stream ) const {
1638
+ if ( !available () ) {
1639
+ if ( is_multi () )
1640
+ stream << " []" ;
1641
+ else
1642
+ stream << " <unavailable>" ;
1643
+ return ;
1644
+ }
1645
+
1646
+ void ( *printer )( std::ostream&, value const & );
1647
+ switch ( get_type () ) {
1648
+ case void_:
1649
+ printer = []( std::ostream& s, value const & /* v*/ ){ s << " <void>" ; };
1650
+ break ;
1651
+ case string:
1652
+ printer = []( std::ostream& s, value const & v ){ s << ' "' << v.string << ' "' ; };
1653
+ break ;
1654
+ case i32 :
1655
+ printer = []( std::ostream& s, value const & v ){ s << v.i32 ; };
1656
+ break ;
1657
+ case i64 :
1658
+ printer = []( std::ostream& s, value const & v ){ s << v.i64 ; };
1659
+ break ;
1660
+ case u32 :
1661
+ printer = []( std::ostream& s, value const & v ){ s << v.u32 ; };
1662
+ break ;
1663
+ case u64 :
1664
+ printer = []( std::ostream& s, value const & v ){ s << v.u64 ; };
1665
+ break ;
1666
+ case f32 :
1667
+ printer = []( std::ostream& s, value const & v ){ s << v.f32 ; };
1668
+ break ;
1669
+ case f64 :
1670
+ printer = []( std::ostream& s, value const & v ){ s << v.f64 ; };
1671
+ break ;
1672
+ default :
1673
+ assert ( false );
1674
+ }
1675
+
1676
+ if ( is_multi () )
1677
+ stream << " [ " ;
1678
+ value_vector_base const & data = get_vector ();
1679
+ auto begin = data.begin ();
1680
+ auto end = data.end ();
1681
+ if ( begin != end ) {
1682
+ for ( ;; ) {
1683
+ ( *printer )( stream, *begin++ );
1684
+ if ( begin == end )
1685
+ break ;
1686
+ stream << " , " ;
1687
+ }
1688
+ }
1689
+ if ( is_multi () )
1690
+ stream << " ]" ;
1691
+ }
1636
1692
};
1637
1693
1638
1694
class parser {
@@ -1971,6 +2027,18 @@ namespace po {
1971
2027
return operator_brackets_helper ( std::move ( designator ) );
1972
2028
}
1973
2029
2030
+ void print_data ( std::ostream& stream, char delim = ' :' ) const {
2031
+ for ( auto iter = m_order.begin (); iter != m_order.end (); ++iter ) {
2032
+ auto & opt = **iter;
2033
+ if ( opt.first .empty () )
2034
+ stream << " <unnamed>" ;
2035
+ else
2036
+ stream << opt.first ;
2037
+ stream << delim;
2038
+ opt.second .print_data (stream);
2039
+ stream << ' \n ' ;
2040
+ }
2041
+ }
1974
2042
void print_help ( std::ostream& stream ) const {
1975
2043
enum : std::size_t {
1976
2044
console_width = 80 - 1 , // -1 because writing until the real end returns the carriage
0 commit comments