aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Buland <eichlan@xagasoft.com>2012-11-06 08:16:41 +0000
committerMike Buland <eichlan@xagasoft.com>2012-11-06 08:16:41 +0000
commit1331c762c05643d7a4fcd4abeb951ed814cea47d (patch)
tree5d15e3c9b47517f86b472a3d93c025b0ff1a84b6
parent9d507ea353a92ca51e7a9d7ae5c82d3aa35c04d1 (diff)
downloadbuild-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 '')
-rwxr-xr-xbuild.sh4
-rw-r--r--src/variable.cpp35
-rw-r--r--src/variable.h2
3 files changed, 29 insertions, 12 deletions
diff --git a/build.sh b/build.sh
index 126e6f9..0120833 100755
--- a/build.sh
+++ b/build.sh
@@ -1,7 +1,7 @@
1#!/bin/bash 1#!/bin/bash
2 2
3BUSRC="stack.cpp string.cpp hash.cpp list.cpp trace.cpp stream.cpp formatter.cpp util.cpp sharedcore.cpp exceptionbase.cpp heap.cpp archivebase.cpp archive.cpp queue.cpp archival.cpp sio.cpp stdstream.cpp process.cpp plugger.cpp optparser.cpp signals.cpp array.cpp membuf.cpp file.cpp variant.cpp random.cpp randombasic.cpp randombase.cpp" 3BUSRC="stack.cpp string.cpp hash.cpp list.cpp trace.cpp stream.cpp formatter.cpp util.cpp sharedcore.cpp exceptionbase.cpp heap.cpp archivebase.cpp archive.cpp queue.cpp archival.cpp sio.cpp stdstream.cpp process.cpp plugger.cpp optparser.cpp signals.cpp array.cpp membuf.cpp file.cpp variant.cpp random.cpp randombasic.cpp randombase.cpp streamstack.cpp"
4BUHDR="stack.h string.h hash.h list.h trace.h stream.h formatter.h util.h sharedcore.h exceptionbase.h heap.h archivebase.h archive.h queue.h archival.h sio.h stdstream.h process.h plugger.h singleton.h optparser.h array.h membuf.h file.h variant.h fmt.h extratypes.h random.h randombasic.h randombase.h" 4BUHDR="stack.h string.h hash.h list.h trace.h stream.h formatter.h util.h sharedcore.h exceptionbase.h heap.h archivebase.h archive.h queue.h archival.h sio.h stdstream.h process.h plugger.h singleton.h optparser.h array.h membuf.h file.h variant.h fmt.h extratypes.h random.h randombasic.h randombase.h streamstack.h"
5BUEXPSRC="regex.cpp" 5BUEXPSRC="regex.cpp"
6BUEXPHDR="regex.h" 6BUEXPHDR="regex.h"
7BUCOMPAT="config.h compat/linux.h compat/win32.h compat/osx.h" 7BUCOMPAT="config.h compat/linux.h compat/win32.h compat/osx.h"
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
327VarList Variable::toList() const 327VarList 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
622bool Variable::operator<( const Variable &rhs ) const 622bool 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
657bool Variable::operator>( const Variable &rhs ) const 657bool 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
692bool Variable::operator<=( const Variable &rhs ) const 692bool 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
727bool Variable::operator>=( const Variable &rhs ) const 727bool 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
762Variable Variable::operator+( const Variable &rhs ) const 762Variable 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
797Variable Variable::operator-( const Variable &rhs ) const 797Variable 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
832Variable Variable::operator*( const Variable &rhs ) const 832Variable 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
867Variable Variable::operator/( const Variable &rhs ) const 867Variable 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
1041VarList 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 );
123Bu::ArchiveBase &operator<<( Bu::ArchiveBase &ar, const Variable &v ); 123Bu::ArchiveBase &operator<<( Bu::ArchiveBase &ar, const Variable &v );
124Bu::ArchiveBase &operator>>( Bu::ArchiveBase &ar, Variable &v ); 124Bu::ArchiveBase &operator>>( Bu::ArchiveBase &ar, Variable &v );
125 125
126VarList operator-( const VarList &rBase, const VarList &rSub );
127
126#endif 128#endif