@@ -99,11 +99,11 @@ string DroppingPacketQueue::to_string( void ) const
9999 return ret;
100100}
101101
102- unsigned int DroppingPacketQueue::get_arg ( const string & args, const string & name )
102+ string DroppingPacketQueue::parse_number_arg ( const string & args, const string & name, bool isfloat )
103103{
104104 auto offset = args.find ( name );
105105 if ( offset == string::npos ) {
106- return 0 ; /* default value */
106+ return " " ; /* default value */
107107 } else {
108108 /* extract the value */
109109
@@ -112,21 +112,52 @@ unsigned int DroppingPacketQueue::get_arg( const string & args, const string & n
112112
113113 /* make sure next char is "=" */
114114 if ( args.substr ( offset, 1 ) != " =" ) {
115- throw runtime_error ( " could not parse queue arguments: " + args );
115+ throw runtime_error ( " could not parse queue arguments: " + args);
116116 }
117117
118118 /* advance by length of "=" */
119119 offset++;
120120
121- /* find the first non-digit character */
122- auto offset2 = args.substr ( offset ).find_first_not_of ( " 0123456789" );
121+ /* find the first non-valid character */
122+ string validchars;
123+ if (isfloat) {
124+ validchars = " 0123456789." ;
125+ } else {
126+ validchars = " 0123456789" ;
127+ }
128+ auto offset2 = args.substr ( offset ).find_first_not_of ( validchars );
123129
124130 auto digit_string = args.substr ( offset ).substr ( 0 , offset2 );
125131
126132 if ( digit_string.empty () ) {
127133 throw runtime_error ( " could not parse queue arguments: " + args );
128134 }
135+ return digit_string;
136+ }
137+ }
138+
139+ unsigned int DroppingPacketQueue::get_arg ( const string & args, const string & name)
140+ {
141+ auto offset = args.find ( name );
142+ if ( offset == string::npos ) {
143+ return 0 ; /* default value */
144+ } else {
145+ auto digit_string = parse_number_arg (args, name, false );
129146
130147 return myatoi ( digit_string );
131148 }
132149}
150+
151+ double DroppingPacketQueue::get_float_arg ( const string & args, const string & name)
152+ {
153+ auto offset = args.find ( name );
154+ if ( offset == string::npos ) {
155+ return 0 ; /* default value */
156+ } else {
157+ auto digit_string = parse_number_arg (args, name, true );
158+ return myatof ( digit_string );
159+ }
160+
161+ }
162+
163+
0 commit comments