You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by gs...@apache.org on 2008/05/02 00:20:25 UTC

svn commit: r652689 - in /incubator/qpid/trunk/qpid/cpp/src: Makefile.am qpid/StringUtils.cpp qpid/StringUtils.h qpid/broker/Message.cpp qpid/broker/Queue.cpp tests/Makefile.am tests/StringUtils.cpp

Author: gsim
Date: Thu May  1 15:20:24 2008
New Revision: 652689

URL: http://svn.apache.org/viewvc?rev=652689&view=rev
Log:
Boost's string split function causes problems on older versions of the library. Replaced with homegrown equivalent.


Added:
    incubator/qpid/trunk/qpid/cpp/src/qpid/StringUtils.cpp   (with props)
    incubator/qpid/trunk/qpid/cpp/src/qpid/StringUtils.h   (with props)
    incubator/qpid/trunk/qpid/cpp/src/tests/StringUtils.cpp   (with props)
Modified:
    incubator/qpid/trunk/qpid/cpp/src/Makefile.am
    incubator/qpid/trunk/qpid/cpp/src/qpid/broker/Message.cpp
    incubator/qpid/trunk/qpid/cpp/src/qpid/broker/Queue.cpp
    incubator/qpid/trunk/qpid/cpp/src/tests/Makefile.am

Modified: incubator/qpid/trunk/qpid/cpp/src/Makefile.am
URL: http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/cpp/src/Makefile.am?rev=652689&r1=652688&r2=652689&view=diff
==============================================================================
--- incubator/qpid/trunk/qpid/cpp/src/Makefile.am (original)
+++ incubator/qpid/trunk/qpid/cpp/src/Makefile.am Thu May  1 15:20:24 2008
@@ -203,6 +203,7 @@
   qpid/assert.cpp qpid/assert.h \
   qpid/Exception.cpp \
   qpid/Plugin.cpp \
+  qpid/StringUtils.cpp \
   qpid/Url.cpp \
   qpid/sys/AggregateOutput.cpp \
   qpid/sys/AsynchIOHandler.cpp \
@@ -326,6 +327,7 @@
   qpid/RangeSet.h \
   qpid/RefCounted.h \
   qpid/SharedObject.h \
+  qpid/StringUtils.h \
   qpid/Url.h \
   qpid/InlineVector.h \
   qpid/InlineAllocator.h \

Added: incubator/qpid/trunk/qpid/cpp/src/qpid/StringUtils.cpp
URL: http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/cpp/src/qpid/StringUtils.cpp?rev=652689&view=auto
==============================================================================
--- incubator/qpid/trunk/qpid/cpp/src/qpid/StringUtils.cpp (added)
+++ incubator/qpid/trunk/qpid/cpp/src/qpid/StringUtils.cpp Thu May  1 15:20:24 2008
@@ -0,0 +1,50 @@
+/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ */
+#include "StringUtils.h"
+
+namespace qpid {
+
+using std::string;
+using std::vector;
+
+void split(vector<string>& out, const string& in, const string& delims)
+{
+    string::size_type start = in.find_first_not_of(delims);
+    if (start == string::npos) return;
+
+    string::size_type end = in.find_first_of(delims, start);
+    while (end != string::npos) {
+        out.push_back(in.substr(start, end - start));
+        start = in.find_first_not_of(delims, end);
+        if (start == string::npos) return;
+        end = in.find_first_of(delims, start);
+    }
+    out.push_back(in.substr(start));
+}
+
+vector<string> split(const string& in, const string& delims)
+{
+    vector<string> out;
+    split(out, in, delims);
+    return out;
+}
+
+} // namespace qpid

Propchange: incubator/qpid/trunk/qpid/cpp/src/qpid/StringUtils.cpp
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/qpid/trunk/qpid/cpp/src/qpid/StringUtils.cpp
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Added: incubator/qpid/trunk/qpid/cpp/src/qpid/StringUtils.h
URL: http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/cpp/src/qpid/StringUtils.h?rev=652689&view=auto
==============================================================================
--- incubator/qpid/trunk/qpid/cpp/src/qpid/StringUtils.h (added)
+++ incubator/qpid/trunk/qpid/cpp/src/qpid/StringUtils.h Thu May  1 15:20:24 2008
@@ -0,0 +1,43 @@
+#ifndef QPID_STRINGUTILS_H
+#define QPID_STRINGUTILS_H
+
+/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ */
+
+#include <string>
+#include <vector>
+
+namespace qpid {
+
+/**
+ * Split 'in' into words using delimiters in 'delims' and put
+ * resulting strings into 'out' vector.
+ */
+void split(std::vector<std::string>& out, const std::string& in, const std::string& delims);
+/**
+ * Split 'in' into words using delimiters in 'delims' and return the
+ * resulting strings in a vector.
+ */
+std::vector<std::string> split(const std::string& in, const std::string& delims);
+
+} // namespace qpid
+
+#endif  /*!QPID_STRINGUTILS_H*/

Propchange: incubator/qpid/trunk/qpid/cpp/src/qpid/StringUtils.h
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/qpid/trunk/qpid/cpp/src/qpid/StringUtils.h
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Modified: incubator/qpid/trunk/qpid/cpp/src/qpid/broker/Message.cpp
URL: http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/cpp/src/qpid/broker/Message.cpp?rev=652689&r1=652688&r2=652689&view=diff
==============================================================================
--- incubator/qpid/trunk/qpid/cpp/src/qpid/broker/Message.cpp (original)
+++ incubator/qpid/trunk/qpid/cpp/src/qpid/broker/Message.cpp Thu May  1 15:20:24 2008
@@ -21,6 +21,7 @@
 
 #include "Message.h"
 #include "ExchangeRegistry.h"
+#include "qpid/StringUtils.h"
 #include "qpid/framing/frame_functors.h"
 #include "qpid/framing/FieldTable.h"
 #include "qpid/framing/MessageTransferBody.h"
@@ -28,8 +29,6 @@
 #include "qpid/framing/SequenceNumber.h"
 #include "qpid/framing/TypeFilter.h"
 #include "qpid/log/Statement.h"
-#include <boost/algorithm/string/classification.hpp>
-#include <boost/algorithm/string/split.hpp>
 
 using boost::intrusive_ptr;
 using namespace qpid::broker;
@@ -259,8 +258,7 @@
     if (headers) {
         std::string traceStr = headers->getString(X_QPID_TRACE);
         if (traceStr.size()) {
-            std::vector<std::string> trace;
-            boost::split(trace, traceStr, boost::is_any_of(", ") );
+            std::vector<std::string> trace = split(traceStr, ", ");
 
             for (std::vector<std::string>::const_iterator i = excludes.begin(); i != excludes.end(); i++) {
                 for (std::vector<std::string>::const_iterator j = trace.begin(); j != trace.end(); j++) {

Modified: incubator/qpid/trunk/qpid/cpp/src/qpid/broker/Queue.cpp
URL: http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/cpp/src/qpid/broker/Queue.cpp?rev=652689&r1=652688&r2=652689&view=diff
==============================================================================
--- incubator/qpid/trunk/qpid/cpp/src/qpid/broker/Queue.cpp (original)
+++ incubator/qpid/trunk/qpid/cpp/src/qpid/broker/Queue.cpp Thu May  1 15:20:24 2008
@@ -26,6 +26,7 @@
 #include "MessageStore.h"
 #include "QueueRegistry.h"
 
+#include "qpid/StringUtils.h"
 #include "qpid/log/Statement.h"
 #include "qpid/framing/reply_exceptions.h"
 #include "qpid/sys/Monitor.h"
@@ -37,8 +38,6 @@
 
 #include <boost/bind.hpp>
 #include <boost/intrusive_ptr.hpp>
-#include <boost/algorithm/string/classification.hpp>
-#include <boost/algorithm/string/split.hpp>
 
 using namespace qpid::broker;
 using namespace qpid::sys;
@@ -517,9 +516,9 @@
     traceId = _settings.getString(qpidTraceIdentity);
     std::string excludeList = _settings.getString(qpidTraceExclude);
     if (excludeList.size()) {
-        boost::split(traceExclude, excludeList, boost::is_any_of(", ") );
+        split(traceExclude, excludeList, ", ");
     }
-    QPID_LOG(info, "Configured queue " << getName() << " with qpid.trace.id='" << traceId 
+    QPID_LOG(debug, "Configured queue " << getName() << " with qpid.trace.id='" << traceId 
              << "' and qpid.trace.exclude='"<< excludeList << "' i.e. " << traceExclude.size() << " elements");
 
     if (mgmtObject.get() != 0)

Modified: incubator/qpid/trunk/qpid/cpp/src/tests/Makefile.am
URL: http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/cpp/src/tests/Makefile.am?rev=652689&r1=652688&r2=652689&view=diff
==============================================================================
--- incubator/qpid/trunk/qpid/cpp/src/tests/Makefile.am (original)
+++ incubator/qpid/trunk/qpid/cpp/src/tests/Makefile.am Thu May  1 15:20:24 2008
@@ -41,6 +41,7 @@
 	ISList.cpp IList.cpp \
 	ClientSessionTest.cpp \
 	SequenceSet.cpp \
+	StringUtils.cpp \
 	IncompleteMessageList.cpp \
 	RangeSet.cpp
 

Added: incubator/qpid/trunk/qpid/cpp/src/tests/StringUtils.cpp
URL: http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/cpp/src/tests/StringUtils.cpp?rev=652689&view=auto
==============================================================================
--- incubator/qpid/trunk/qpid/cpp/src/tests/StringUtils.cpp (added)
+++ incubator/qpid/trunk/qpid/cpp/src/tests/StringUtils.cpp Thu May  1 15:20:24 2008
@@ -0,0 +1,77 @@
+/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ */
+#include <iostream>
+#include "qpid/StringUtils.h"
+
+#include "unit_test.h"
+
+QPID_AUTO_TEST_SUITE(StringUtilsTestSuite)
+
+using namespace qpid;
+using std::string;
+
+QPID_AUTO_TEST_CASE(testSplit_general)
+{
+    std::vector<std::string> results = split("a bbbb, car,d123,,,e", ", ");
+    BOOST_CHECK_EQUAL(5u, results.size());
+    BOOST_CHECK_EQUAL(string("a"), results[0]);
+    BOOST_CHECK_EQUAL(string("bbbb"), results[1]);
+    BOOST_CHECK_EQUAL(string("car"), results[2]);
+    BOOST_CHECK_EQUAL(string("d123"), results[3]);
+    BOOST_CHECK_EQUAL(string("e"), results[4]);
+}
+
+QPID_AUTO_TEST_CASE(testSplit_noDelims)
+{
+    std::vector<std::string> results = split("abc", ", ");
+    BOOST_CHECK_EQUAL(1u, results.size());
+    BOOST_CHECK_EQUAL(string("abc"), results[0]);
+}
+
+QPID_AUTO_TEST_CASE(testSplit_delimAtEnd)
+{
+    std::vector<std::string> results = split("abc def,,", ", ");
+    BOOST_CHECK_EQUAL(2u, results.size());
+    BOOST_CHECK_EQUAL(string("abc"), results[0]);
+    BOOST_CHECK_EQUAL(string("def"), results[1]);
+}
+
+QPID_AUTO_TEST_CASE(testSplit_delimAtStart)
+{
+    std::vector<std::string> results = split(",,abc def", ", ");
+    BOOST_CHECK_EQUAL(2u, results.size());
+    BOOST_CHECK_EQUAL(string("abc"), results[0]);
+    BOOST_CHECK_EQUAL(string("def"), results[1]);
+}
+
+QPID_AUTO_TEST_CASE(testSplit_onlyDelims)
+{
+    std::vector<std::string> results = split(",, ,  ", ", ");
+    BOOST_CHECK_EQUAL(0u, results.size());
+}
+
+QPID_AUTO_TEST_CASE(testSplit_empty)
+{
+    std::vector<std::string> results = split("", ", ");
+    BOOST_CHECK_EQUAL(0u, results.size());
+}
+
+QPID_AUTO_TEST_SUITE_END()

Propchange: incubator/qpid/trunk/qpid/cpp/src/tests/StringUtils.cpp
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/qpid/trunk/qpid/cpp/src/tests/StringUtils.cpp
------------------------------------------------------------------------------
    svn:keywords = Rev Date