aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--src/cache.h7
-rw-r--r--src/fbasicstring.h98
-rw-r--r--src/tests/cache.cpp5
-rw-r--r--src/unit/fstring.unit9
4 files changed, 110 insertions, 9 deletions
diff --git a/src/cache.h b/src/cache.h
index f36c29b..2b93479 100644
--- a/src/cache.h
+++ b/src/cache.h
@@ -90,7 +90,12 @@ namespace Bu
90 return pData; 90 return pData;
91 } 91 }
92 92
93 bool isLoaded() const 93 bool isValid() const
94 {
95 return pCache != NULL;
96 }
97
98 bool isBound() const
94 { 99 {
95 return pData != NULL; 100 return pData != NULL;
96 } 101 }
diff --git a/src/fbasicstring.h b/src/fbasicstring.h
index a532d69..853625c 100644
--- a/src/fbasicstring.h
+++ b/src/fbasicstring.h
@@ -947,7 +947,7 @@ namespace Bu
947 return pFirst->pData; 947 return pFirst->pData;
948 } 948 }
949 949
950 MyType getSubStr( long iStart, long iSize=-1 ) const 950 MyType getSubStrIdx( long iStart, long iSize=-1 ) const
951 { 951 {
952 if( iStart < 0 ) 952 if( iStart < 0 )
953 iStart = 0; 953 iStart = 0;
@@ -965,6 +965,50 @@ namespace Bu
965 return ret; 965 return ret;
966 } 966 }
967 967
968 MyType getSubStr( const_iterator iBegin,
969 const_iterator iEnd=typename MyType::const_iterator() ) const
970 {
971 if( !iBegin.isValid() )
972 return MyType();
973 if( iBegin.pChunk == iEnd.pChunk )
974 {
975 return MyType( iBegin.pChunk->pData+iBegin.iPos,
976 iEnd.iPos-iBegin.iPos );
977 }
978 else if( !iEnd.isValid() )
979 {
980 MyType ret;
981 ret.append(
982 iBegin.pChunk->pData+iBegin.iPos,
983 iBegin.pChunk->nLength-iBegin.iPos
984 );
985 for( Chunk *pCur = iBegin.pChunk->pNext;
986 pCur; pCur = pCur->pNext )
987 {
988 ret.append( pCur->pData, pCur->nLength );
989 }
990 return ret;
991 }
992 else
993 {
994 MyType ret;
995 ret.append(
996 iBegin.pChunk->pData+iBegin.iPos,
997 iBegin.pChunk->nLength-iBegin.iPos
998 );
999 for( Chunk *pCur = iBegin.pChunk->pNext;
1000 pCur != iEnd.pChunk; pCur = pCur->pNext )
1001 {
1002 ret.append( pCur->pData, pCur->nLength );
1003 }
1004 ret.append(
1005 iEnd.pChunk->pData,
1006 iEnd.iPos
1007 );
1008 return ret;
1009 }
1010 }
1011
968 /** 1012 /**
969 * (std::string compatability) Get a pointer to the string array. 1013 * (std::string compatability) Get a pointer to the string array.
970 *@returns (chr *) The string data. 1014 *@returns (chr *) The string data.
@@ -1401,6 +1445,7 @@ namespace Bu
1401 const_iterator find( const chr cChar, 1445 const_iterator find( const chr cChar,
1402 const_iterator iStart=typename MyType::const_iterator() ) const 1446 const_iterator iStart=typename MyType::const_iterator() ) const
1403 { 1447 {
1448 if( !iStart ) iStart = begin();
1404 for( ; iStart; iStart++ ) 1449 for( ; iStart; iStart++ )
1405 { 1450 {
1406 if( cChar == *iStart ) 1451 if( cChar == *iStart )
@@ -1412,6 +1457,7 @@ namespace Bu
1412 const_iterator find( const chr *sText, int nLen, 1457 const_iterator find( const chr *sText, int nLen,
1413 const_iterator iStart=typename MyType::const_iterator() ) const 1458 const_iterator iStart=typename MyType::const_iterator() ) const
1414 { 1459 {
1460 if( !iStart ) iStart = begin();
1415 for( ; iStart; iStart++ ) 1461 for( ; iStart; iStart++ )
1416 { 1462 {
1417 if( iStart.compare( sText, nLen ) ) 1463 if( iStart.compare( sText, nLen ) )
@@ -1423,6 +1469,7 @@ namespace Bu
1423 const_iterator find( const MyType &rStr, 1469 const_iterator find( const MyType &rStr,
1424 const_iterator iStart=typename MyType::const_iterator() ) const 1470 const_iterator iStart=typename MyType::const_iterator() ) const
1425 { 1471 {
1472 if( !iStart ) iStart = begin();
1426 for( ; iStart; iStart++ ) 1473 for( ; iStart; iStart++ )
1427 { 1474 {
1428 if( iStart.compare( rStr ) ) 1475 if( iStart.compare( rStr ) )
@@ -1434,6 +1481,7 @@ namespace Bu
1434 const_iterator find( const MyType &rStr, int nLen, 1481 const_iterator find( const MyType &rStr, int nLen,
1435 const_iterator iStart=typename MyType::const_iterator() ) const 1482 const_iterator iStart=typename MyType::const_iterator() ) const
1436 { 1483 {
1484 if( !iStart ) iStart = begin();
1437 for( ; iStart; iStart++ ) 1485 for( ; iStart; iStart++ )
1438 { 1486 {
1439 if( iStart.compare( rStr, nLen ) ) 1487 if( iStart.compare( rStr, nLen ) )
@@ -1442,6 +1490,54 @@ namespace Bu
1442 return end(); 1490 return end();
1443 } 1491 }
1444 1492
1493 iterator find( const chr cChar,
1494 const_iterator iStart=typename MyType::const_iterator() )
1495 {
1496 if( !iStart ) iStart = begin();
1497 for( ; iStart; iStart++ )
1498 {
1499 if( cChar == *iStart )
1500 return iterator( iStart.pChunk, iStart.iPos );
1501 }
1502 return end();
1503 }
1504
1505 iterator find( const chr *sText, int nLen,
1506 const_iterator iStart=typename MyType::const_iterator() )
1507 {
1508 if( !iStart ) iStart = begin();
1509 for( ; iStart; iStart++ )
1510 {
1511 if( iStart.compare( sText, nLen ) )
1512 return iterator( iStart.pChunk, iStart.iPos );
1513 }
1514 return end();
1515 }
1516
1517 iterator find( const MyType &rStr,
1518 const_iterator iStart=typename MyType::const_iterator() )
1519 {
1520 if( !iStart ) iStart = begin();
1521 for( ; iStart; iStart++ )
1522 {
1523 if( iStart.compare( rStr ) )
1524 return iterator( iStart.pChunk, iStart.iPos );
1525 }
1526 return end();
1527 }
1528
1529 iterator find( const MyType &rStr, int nLen,
1530 const_iterator iStart=typename MyType::const_iterator() )
1531 {
1532 if( !iStart ) iStart = begin();
1533 for( ; iStart; iStart++ )
1534 {
1535 if( iStart.compare( rStr, nLen ) )
1536 return iterator( iStart.pChunk, iStart.iPos );
1537 }
1538 return end();
1539 }
1540
1445 /** 1541 /**
1446 * Find the index of the first occurrance of cChar 1542 * Find the index of the first occurrance of cChar
1447 *@param sText (const chr *) The string to search for. 1543 *@param sText (const chr *) The string to search for.
diff --git a/src/tests/cache.cpp b/src/tests/cache.cpp
index 8d95a9d..5d542ed 100644
--- a/src/tests/cache.cpp
+++ b/src/tests/cache.cpp
@@ -171,6 +171,7 @@ public:
171 171
172 virtual bool shouldSync( Bob *, const long &, time_t ) 172 virtual bool shouldSync( Bob *, const long &, time_t )
173 { 173 {
174 return false;
174 } 175 }
175 176
176private: 177private:
@@ -224,9 +225,9 @@ int main( int argc, char *argv[] )
224 case 'l': 225 case 'l':
225 { 226 {
226 BobCache::Ptr pBob = cBob.getLazy( strtol( argv[2], NULL, 0 ) ); 227 BobCache::Ptr pBob = cBob.getLazy( strtol( argv[2], NULL, 0 ) );
227 printf("isLoaded: %s\n", pBob.isLoaded()?"yes":"no"); 228 printf("isBound: %s\n", pBob.isBound()?"yes":"no");
228 printf("Value = %d\n", pBob->getInt() ); 229 printf("Value = %d\n", pBob->getInt() );
229 printf("isLoaded: %s\n", pBob.isLoaded()?"yes":"no"); 230 printf("isBound: %s\n", pBob.isBound()?"yes":"no");
230 } 231 }
231 return 0; 232 return 0;
232 } 233 }
diff --git a/src/unit/fstring.unit b/src/unit/fstring.unit
index fbebd39..7314095 100644
--- a/src/unit/fstring.unit
+++ b/src/unit/fstring.unit
@@ -141,11 +141,10 @@
141{%subStr1} 141{%subStr1}
142{ 142{
143 Bu::FString a("abcdefghijklmnop"); 143 Bu::FString a("abcdefghijklmnop");
144 unitTest( a.getSubStr( 5, 3 ) == "fgh" ); 144 Bu::FString::iterator i = a.find('f');
145 unitTest( a.getSubStr( 10 ) == "klmnop" ); 145 unitTest( a.getSubStr( i, Bu::FString::iterator() ) == "fghijklmnop" );
146 unitTest( a.getSubStr( 40 ) == "" ); 146 Bu::FString::iterator j = i.find('l');
147 unitTest( a.getSubStr( -10 ) == "abcdefghijklmnop" ); 147 unitTest( a.getSubStr( i, j ) == "fghijk" );
148 unitTest( a.getSubStr( -15, 4 ) == "abcd" );
149} 148}
150 149
151{%compareSub1} 150{%compareSub1}