From dc0139c1880d1500b3e275b09781116613862f5f Mon Sep 17 00:00:00 2001 From: Mike Buland Date: Fri, 10 May 2013 08:36:15 -0600 Subject: Added more checking & unit-tests. --- src/options.cpp | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) (limited to 'src/options.cpp') diff --git a/src/options.cpp b/src/options.cpp index 59dd2b4..9ade56a 100644 --- a/src/options.cpp +++ b/src/options.cpp @@ -21,6 +21,10 @@ Options::Options( int argc, char *argv[] ) : addOption( Bu::slot(this, &Options::isPrime), 'p', "is-prime", "Tests every parameter after to see if it is prime then prints out " "the ones that are prime. Set radix first."); + addOption( Bu::slot(this, &Options::convert), 'c', "convert", + "Convert the provided number to the given radix in the format " + "number:to-radix or from-radix:number:to-radix. The radix should " + "be provided in base-10"); addHelpOption('h', "help", "This help"); parse( argc, argv ); @@ -118,3 +122,32 @@ int Options::isPrime( Bu::StringArray aArgs ) return aArgs.getSize(); } +int Options::convert( Bu::StringArray aArgs ) +{ + for( Bu::StringArray::iterator i = aArgs.begin()+1; i; i++ ) + { + Bu::StringList lBits = (*i).split(':'); + if( lBits.getSize() < 2 || lBits.getSize() > 3 ) + throw Bu::ExceptionBase("Invalid format"); + + int iFromRadix = iRadix; + int iToRadix; + Number n; + if( lBits.getSize() == 2 ) + { + iToRadix = strtol( lBits.last().getStr(), 0, 10 ); + n = Number( lBits.first(), 0, iFromRadix ); + } + else if( lBits.getSize() == 3 ) + { + iFromRadix = strtol( lBits.first().getStr(), 0, 10 ); + iToRadix = strtol( lBits.last().getStr(), 0, 10 ); + n = Number( *(lBits.begin()+1), 0, iFromRadix ); + } + Bu::println("%1").arg( n.toRadix( iToRadix ).toString() ); + } + + exit( 0 ); + return 0; +} + -- cgit v1.2.3