diff options
Diffstat (limited to '')
| -rw-r--r-- | src/cache.h | 7 | ||||
| -rw-r--r-- | src/fbasicstring.h | 98 | ||||
| -rw-r--r-- | src/tests/cache.cpp | 5 | ||||
| -rw-r--r-- | src/unit/fstring.unit | 9 |
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 | ||
| 176 | private: | 177 | private: |
| @@ -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} |
