diff options
| author | Mike Buland <eichlan@xagasoft.com> | 2012-11-06 08:16:41 +0000 |
|---|---|---|
| committer | Mike Buland <eichlan@xagasoft.com> | 2012-11-06 08:16:41 +0000 |
| commit | 1331c762c05643d7a4fcd4abeb951ed814cea47d (patch) | |
| tree | 5d15e3c9b47517f86b472a3d93c025b0ff1a84b6 /src | |
| parent | 9d507ea353a92ca51e7a9d7ae5c82d3aa35c04d1 (diff) | |
| download | build-1331c762c05643d7a4fcd4abeb951ed814cea47d.tar.gz build-1331c762c05643d7a4fcd4abeb951ed814cea47d.tar.bz2 build-1331c762c05643d7a4fcd4abeb951ed814cea47d.tar.xz build-1331c762c05643d7a4fcd4abeb951ed814cea47d.zip | |
Slightly optimized list operations, and added list subtraction. If you subtract
any item from a list it will remove one matching item from the source list for
each item in the subtracted list.
Diffstat (limited to 'src')
| -rw-r--r-- | src/variable.cpp | 35 | ||||
| -rw-r--r-- | src/variable.h | 2 |
2 files changed, 27 insertions, 10 deletions
diff --git a/src/variable.cpp b/src/variable.cpp index f638dc9..ffc41a6 100644 --- a/src/variable.cpp +++ b/src/variable.cpp | |||
| @@ -327,7 +327,7 @@ Bu::String Variable::toString() const | |||
| 327 | VarList Variable::toList() const | 327 | VarList Variable::toList() const |
| 328 | { | 328 | { |
| 329 | if( eType == typeList ) | 329 | if( eType == typeList ) |
| 330 | return *this; | 330 | return *uVal.lVal; |
| 331 | return VarList( *this ); | 331 | return VarList( *this ); |
| 332 | } | 332 | } |
| 333 | 333 | ||
| @@ -621,7 +621,7 @@ bool Variable::operator!=( const Variable &rhs ) const | |||
| 621 | 621 | ||
| 622 | bool Variable::operator<( const Variable &rhs ) const | 622 | bool Variable::operator<( const Variable &rhs ) const |
| 623 | { | 623 | { |
| 624 | Type eTop = Bu::max( eType, rhs.eType ); | 624 | Type eTop = Bu::buMax( eType, rhs.eType ); |
| 625 | switch( eTop ) | 625 | switch( eTop ) |
| 626 | { | 626 | { |
| 627 | case typeNone: | 627 | case typeNone: |
| @@ -656,7 +656,7 @@ bool Variable::operator<( const Variable &rhs ) const | |||
| 656 | 656 | ||
| 657 | bool Variable::operator>( const Variable &rhs ) const | 657 | bool Variable::operator>( const Variable &rhs ) const |
| 658 | { | 658 | { |
| 659 | Type eTop = Bu::max( eType, rhs.eType ); | 659 | Type eTop = Bu::buMax( eType, rhs.eType ); |
| 660 | switch( eTop ) | 660 | switch( eTop ) |
| 661 | { | 661 | { |
| 662 | case typeNone: | 662 | case typeNone: |
| @@ -691,7 +691,7 @@ bool Variable::operator>( const Variable &rhs ) const | |||
| 691 | 691 | ||
| 692 | bool Variable::operator<=( const Variable &rhs ) const | 692 | bool Variable::operator<=( const Variable &rhs ) const |
| 693 | { | 693 | { |
| 694 | Type eTop = Bu::max( eType, rhs.eType ); | 694 | Type eTop = Bu::buMax( eType, rhs.eType ); |
| 695 | switch( eTop ) | 695 | switch( eTop ) |
| 696 | { | 696 | { |
| 697 | case typeNone: | 697 | case typeNone: |
| @@ -726,7 +726,7 @@ bool Variable::operator<=( const Variable &rhs ) const | |||
| 726 | 726 | ||
| 727 | bool Variable::operator>=( const Variable &rhs ) const | 727 | bool Variable::operator>=( const Variable &rhs ) const |
| 728 | { | 728 | { |
| 729 | Type eTop = Bu::max( eType, rhs.eType ); | 729 | Type eTop = Bu::buMax( eType, rhs.eType ); |
| 730 | switch( eTop ) | 730 | switch( eTop ) |
| 731 | { | 731 | { |
| 732 | case typeNone: | 732 | case typeNone: |
| @@ -761,7 +761,7 @@ bool Variable::operator>=( const Variable &rhs ) const | |||
| 761 | 761 | ||
| 762 | Variable Variable::operator+( const Variable &rhs ) const | 762 | Variable Variable::operator+( const Variable &rhs ) const |
| 763 | { | 763 | { |
| 764 | Type eTop = Bu::max( eType, rhs.eType ); | 764 | Type eTop = Bu::buMax( eType, rhs.eType ); |
| 765 | switch( eTop ) | 765 | switch( eTop ) |
| 766 | { | 766 | { |
| 767 | case typeNone: | 767 | case typeNone: |
| @@ -796,7 +796,7 @@ Variable Variable::operator+( const Variable &rhs ) const | |||
| 796 | 796 | ||
| 797 | Variable Variable::operator-( const Variable &rhs ) const | 797 | Variable Variable::operator-( const Variable &rhs ) const |
| 798 | { | 798 | { |
| 799 | Type eTop = Bu::max( eType, rhs.eType ); | 799 | Type eTop = Bu::buMax( eType, rhs.eType ); |
| 800 | switch( eTop ) | 800 | switch( eTop ) |
| 801 | { | 801 | { |
| 802 | case typeNone: | 802 | case typeNone: |
| @@ -818,7 +818,7 @@ Variable Variable::operator-( const Variable &rhs ) const | |||
| 818 | throw Bu::ExceptionBase("You cannot subtract string values."); | 818 | throw Bu::ExceptionBase("You cannot subtract string values."); |
| 819 | 819 | ||
| 820 | case typeList: | 820 | case typeList: |
| 821 | throw Bu::ExceptionBase("You cannot subtract list values."); | 821 | return Variable( toList() - rhs.toList() ); |
| 822 | 822 | ||
| 823 | case typeRef: | 823 | case typeRef: |
| 824 | throw Bu::ExceptionBase("You cannot subtract reference values."); | 824 | throw Bu::ExceptionBase("You cannot subtract reference values."); |
| @@ -831,7 +831,7 @@ Variable Variable::operator-( const Variable &rhs ) const | |||
| 831 | 831 | ||
| 832 | Variable Variable::operator*( const Variable &rhs ) const | 832 | Variable Variable::operator*( const Variable &rhs ) const |
| 833 | { | 833 | { |
| 834 | Type eTop = Bu::max( eType, rhs.eType ); | 834 | Type eTop = Bu::buMax( eType, rhs.eType ); |
| 835 | switch( eTop ) | 835 | switch( eTop ) |
| 836 | { | 836 | { |
| 837 | case typeNone: | 837 | case typeNone: |
| @@ -866,7 +866,7 @@ Variable Variable::operator*( const Variable &rhs ) const | |||
| 866 | 866 | ||
| 867 | Variable Variable::operator/( const Variable &rhs ) const | 867 | Variable Variable::operator/( const Variable &rhs ) const |
| 868 | { | 868 | { |
| 869 | Type eTop = Bu::max( eType, rhs.eType ); | 869 | Type eTop = Bu::buMax( eType, rhs.eType ); |
| 870 | switch( eTop ) | 870 | switch( eTop ) |
| 871 | { | 871 | { |
| 872 | case typeNone: | 872 | case typeNone: |
| @@ -1038,3 +1038,18 @@ Bu::ArchiveBase &operator>>( Bu::ArchiveBase &ar, Variable &v ) | |||
| 1038 | return ar; | 1038 | return ar; |
| 1039 | } | 1039 | } |
| 1040 | 1040 | ||
| 1041 | VarList operator-( const VarList &rBase, const VarList &rSub ) | ||
| 1042 | { | ||
| 1043 | VarList lRet( rBase ); | ||
| 1044 | |||
| 1045 | for( VarList::const_iterator i = rSub.begin(); i; i++ ) | ||
| 1046 | { | ||
| 1047 | VarList::const_iterator k; | ||
| 1048 | for( k = lRet.begin(); k && *k != *i; k++ ) { } | ||
| 1049 | if( k ) | ||
| 1050 | lRet.erase( k ); | ||
| 1051 | } | ||
| 1052 | |||
| 1053 | return lRet; | ||
| 1054 | } | ||
| 1055 | |||
diff --git a/src/variable.h b/src/variable.h index 241393e..890552a 100644 --- a/src/variable.h +++ b/src/variable.h | |||
| @@ -123,4 +123,6 @@ Bu::Formatter &operator<<( Bu::Formatter &f, const Variable &v ); | |||
| 123 | Bu::ArchiveBase &operator<<( Bu::ArchiveBase &ar, const Variable &v ); | 123 | Bu::ArchiveBase &operator<<( Bu::ArchiveBase &ar, const Variable &v ); |
| 124 | Bu::ArchiveBase &operator>>( Bu::ArchiveBase &ar, Variable &v ); | 124 | Bu::ArchiveBase &operator>>( Bu::ArchiveBase &ar, Variable &v ); |
| 125 | 125 | ||
| 126 | VarList operator-( const VarList &rBase, const VarList &rSub ); | ||
| 127 | |||
| 126 | #endif | 128 | #endif |
