Updated Branches: refs/heads/trunk 2d9ce2f36 -> c6d121450
Some additional utility methods and tests Project: http://git-wip-us.apache.org/repos/asf/activemq-cpp/repo Commit: http://git-wip-us.apache.org/repos/asf/activemq-cpp/commit/c6d12145 Tree: http://git-wip-us.apache.org/repos/asf/activemq-cpp/tree/c6d12145 Diff: http://git-wip-us.apache.org/repos/asf/activemq-cpp/diff/c6d12145 Branch: refs/heads/trunk Commit: c6d121450b3f7b8a60b811b1fb887ebb554b5092 Parents: 2d9ce2f Author: Timothy Bish <[email protected]> Authored: Thu Nov 7 18:09:05 2013 -0500 Committer: Timothy Bish <[email protected]> Committed: Thu Nov 7 18:09:05 2013 -0500 ---------------------------------------------------------------------- activemq-cpp/src/main/decaf/lang/String.cpp | 44 +++++++++++++++ activemq-cpp/src/main/decaf/lang/String.h | 56 ++++++++++++++++++++ activemq-cpp/src/test/decaf/lang/StringTest.cpp | 40 ++++++++++++++ activemq-cpp/src/test/decaf/lang/StringTest.h | 8 +++ 4 files changed, 148 insertions(+) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/activemq-cpp/blob/c6d12145/activemq-cpp/src/main/decaf/lang/String.cpp ---------------------------------------------------------------------- diff --git a/activemq-cpp/src/main/decaf/lang/String.cpp b/activemq-cpp/src/main/decaf/lang/String.cpp index 6070df0..80100c1 100644 --- a/activemq-cpp/src/main/decaf/lang/String.cpp +++ b/activemq-cpp/src/main/decaf/lang/String.cpp @@ -785,6 +785,50 @@ bool String::equalsIgnoreCase(const char* string) const { } //////////////////////////////////////////////////////////////////////////////// +int String::findFirstOf(const String& chars) const { + return findFirstOf(chars, 0); +} + +//////////////////////////////////////////////////////////////////////////////// +int String::findFirstOf(const String& chars, int start) const { + if (start < contents->length) { + if (start < 0) { + start = 0; + } + + for (int i = contents->offset + start; i < contents->offset + contents->length; i++) { + char c = contents->value[i]; + if (chars.indexOf(c) != -1) { + return i; + } + } + } + return -1; +} + +//////////////////////////////////////////////////////////////////////////////// +int String::findFirstNotOf(const String& chars) const { + return findFirstNotOf(chars, 0); +} + +//////////////////////////////////////////////////////////////////////////////// +int String::findFirstNotOf(const String& chars, int start) const { + if (start < contents->length) { + if (start < 0) { + start = 0; + } + + for (int i = contents->offset + start; i < contents->offset + contents->length; i++) { + char c = contents->value[i]; + if (chars.indexOf(c) == -1) { + return i; + } + } + } + return -1; +} + +//////////////////////////////////////////////////////////////////////////////// int String::hashCode() const { if (contents->hashCode == 0) { http://git-wip-us.apache.org/repos/asf/activemq-cpp/blob/c6d12145/activemq-cpp/src/main/decaf/lang/String.h ---------------------------------------------------------------------- diff --git a/activemq-cpp/src/main/decaf/lang/String.h b/activemq-cpp/src/main/decaf/lang/String.h index 722942b..8a5ec88 100644 --- a/activemq-cpp/src/main/decaf/lang/String.h +++ b/activemq-cpp/src/main/decaf/lang/String.h @@ -534,6 +534,62 @@ namespace lang { bool equalsIgnoreCase(const char* string) const; /** + * Searches in this string for the first index of any character in the specified + * String. The search for the matching characters starts at the beginning and moves + * towards the end of this string. + * + * @param string + * the characters to find the first of within this String. + * + * @return the index of the first character of the specified string in this + * string, -1 if none of the characters in the String exist in this String. + */ + int findFirstOf(const String& chars) const; + + /** + * Searches in this string for the first index of any character in the specified + * String. The search for the matching characters starts at the given index and moves + * towards the end of this string. + * + * @param chars + * the characters to find the first of within this String. + * @param start + * the starting offset. + * + * @return the index of the first character of the specified string in this + * string, -1 if none of the characters in the String exist in this String. + */ + int findFirstOf(const String& chars, int start) const; + + /** + * Searches in this string for the first index of any character that is not in the + * specified String. The search for the non-matching characters starts at the beginning + * and moves towards the end of this string. + * + * @param chars + * the characters to find the first non-matching index of within this String. + * + * @return the index of the first character not in the specified string in this + * string, -1 if all of the characters in the given String exist in this String. + */ + int findFirstNotOf(const String& chars) const; + + /** + * Searches in this string for the first index of any character that is not in the + * specified String. The search for the non-matching characters starts at the given index + * and moves towards the end of this string. + * + * @param chars + * the characters to find the first non-matching index of within this String. + * @param start + * the starting offset. + * + * @return the index of the first character not in the specified string in this + * string, -1 if all of the characters in the given String exist in this String. + */ + int findFirstNotOf(const String& chars, int start) const; + + /** * Returns a hash code for this String instance, the hash code for an empty * String will always be zero. * http://git-wip-us.apache.org/repos/asf/activemq-cpp/blob/c6d12145/activemq-cpp/src/test/decaf/lang/StringTest.cpp ---------------------------------------------------------------------- diff --git a/activemq-cpp/src/test/decaf/lang/StringTest.cpp b/activemq-cpp/src/test/decaf/lang/StringTest.cpp index 604f211..d1e474e 100644 --- a/activemq-cpp/src/test/decaf/lang/StringTest.cpp +++ b/activemq-cpp/src/test/decaf/lang/StringTest.cpp @@ -540,6 +540,46 @@ void StringTest::testEqualsIgnoreCaseStdString() { } //////////////////////////////////////////////////////////////////////////////// +void StringTest::testFindFirstOf() { + + const String input("HelloWorld"); + + CPPUNIT_ASSERT_EQUAL(0, input.findFirstOf("H")); + CPPUNIT_ASSERT_EQUAL(-1, input.findFirstOf("z")); +} + +//////////////////////////////////////////////////////////////////////////////// +void StringTest::testFindFirstOf2() { + + const String input("HelloWorld"); + + CPPUNIT_ASSERT_EQUAL(0, input.findFirstOf("H", 0)); + CPPUNIT_ASSERT_EQUAL(0, input.findFirstOf("H", -1)); + CPPUNIT_ASSERT_EQUAL(-1, input.findFirstOf("H", 1)); + CPPUNIT_ASSERT_EQUAL(-1, input.findFirstOf("H", 25)); +} + +//////////////////////////////////////////////////////////////////////////////// +void StringTest::testFindFirstNotOf() { + + const String input("HelloWorld"); + + CPPUNIT_ASSERT_EQUAL(1, input.findFirstNotOf("H")); + CPPUNIT_ASSERT_EQUAL(0, input.findFirstNotOf("z")); +} + +//////////////////////////////////////////////////////////////////////////////// +void StringTest::testFindFirstNotOf2() { + + const String input("HelloWorld"); + + CPPUNIT_ASSERT_EQUAL(5, input.findFirstNotOf("Hello", 5)); + CPPUNIT_ASSERT_EQUAL(0, input.findFirstNotOf("z", -1)); + CPPUNIT_ASSERT_EQUAL(1, input.findFirstNotOf("H", 1)); + CPPUNIT_ASSERT_EQUAL(-1, input.findFirstNotOf("H", 25)); +} + +//////////////////////////////////////////////////////////////////////////////// void StringTest::testIndexOfChar() { const String input("HelloWorld"); http://git-wip-us.apache.org/repos/asf/activemq-cpp/blob/c6d12145/activemq-cpp/src/test/decaf/lang/StringTest.h ---------------------------------------------------------------------- diff --git a/activemq-cpp/src/test/decaf/lang/StringTest.h b/activemq-cpp/src/test/decaf/lang/StringTest.h index e482bf4..5181065 100644 --- a/activemq-cpp/src/test/decaf/lang/StringTest.h +++ b/activemq-cpp/src/test/decaf/lang/StringTest.h @@ -97,6 +97,10 @@ namespace lang { CPPUNIT_TEST( testOperatorPlusString ); CPPUNIT_TEST( testOperatorPlusStdString ); CPPUNIT_TEST( testOperatorPlusCString ); + CPPUNIT_TEST( testFindFirstOf ); + CPPUNIT_TEST( testFindFirstOf2 ); + CPPUNIT_TEST( testFindFirstNotOf ); + CPPUNIT_TEST( testFindFirstNotOf2 ); CPPUNIT_TEST_SUITE_END(); public: @@ -137,6 +141,10 @@ namespace lang { void testIndexOfChar2(); void testIndexOfString(); void testIndexOfString2(); + void testFindFirstOf(); + void testFindFirstOf2(); + void testFindFirstNotOf(); + void testFindFirstNotOf2(); void testIndexOfStdString(); void testIndexOfStdString2(); void testIndexOfCString();
