| 640 | } |
| 641 | |
| 642 | bool |
| 643 | Config::parseArgMultiplier( |
| 644 | const std::string& opt, |
| 645 | ArgMultiplier& v) |
| 646 | { |
| 647 | boost::char_separator<char> sep(","); |
| 648 | boost::tokenizer< boost::char_separator<char> > tok(opt, sep); |
| 649 | boost::tokenizer< boost::char_separator<char> >::iterator it = tok.begin(); |
| 650 | |
| 651 | try { |
| 652 | switch (kargs_.dtype) { |
| 653 | case TYPE_FLOAT: |
| 654 | v.argFloat = boost::lexical_cast<float>(*it); |
| 655 | ++it; |
| 656 | break; |
| 657 | case TYPE_DOUBLE: |
| 658 | v.argDouble = boost::lexical_cast<double>(*it); |
| 659 | ++it; |
| 660 | break; |
| 661 | case TYPE_COMPLEX_FLOAT: |
| 662 | v.argFloatComplex.s[0] = boost::lexical_cast<float>(*it); |
| 663 | ++it; |
| 664 | if (it == tok.end()) { |
| 665 | v.argFloatComplex.s[1] = 0; |
| 666 | } |
| 667 | else { |
| 668 | v.argFloatComplex.s[1] = boost::lexical_cast<float>(*it); |
| 669 | ++it; |
| 670 | } |
| 671 | break; |
| 672 | case TYPE_COMPLEX_DOUBLE: |
| 673 | v.argDoubleComplex.s[0] = boost::lexical_cast<double>(*it); |
| 674 | ++it; |
| 675 | if (it == tok.end()) { |
| 676 | v.argDoubleComplex.s[1] = 0; |
| 677 | } |
| 678 | else { |
| 679 | v.argDoubleComplex.s[1] = boost::lexical_cast<double>(*it); |
| 680 | ++it; |
| 681 | } |
| 682 | break; |
| 683 | } |
| 684 | } |
| 685 | catch (boost::bad_lexical_cast&) { |
| 686 | return false; |
| 687 | } |
| 688 | |
| 689 | return (it == tok.end()); |
| 690 | } |