util/DivideString: add option "strip"
This commit is contained in:
parent
79d2d1c201
commit
4b70f9d213
|
@ -128,7 +128,7 @@ AoOutput::Configure(const config_param ¶m, Error &error)
|
|||
value = param.GetBlockValue("options", nullptr);
|
||||
if (value != nullptr) {
|
||||
for (const auto &i : SplitString(value, ';')) {
|
||||
const DivideString ss(i.c_str(), '=');
|
||||
const DivideString ss(i.c_str(), '=', true);
|
||||
|
||||
if (!ss.IsDefined()) {
|
||||
error.Format(ao_output_domain,
|
||||
|
|
|
@ -18,10 +18,11 @@
|
|||
*/
|
||||
|
||||
#include "DivideString.hxx"
|
||||
#include "StringUtil.hxx"
|
||||
|
||||
#include <string.h>
|
||||
|
||||
DivideString::DivideString(const char *s, char separator)
|
||||
DivideString::DivideString(const char *s, char separator, bool strip)
|
||||
:first(nullptr)
|
||||
{
|
||||
const char *x = strchr(s, separator);
|
||||
|
@ -31,6 +32,16 @@ DivideString::DivideString(const char *s, char separator)
|
|||
size_t length = x - s;
|
||||
second = x + 1;
|
||||
|
||||
if (strip)
|
||||
second = StripLeft(second);
|
||||
|
||||
if (strip) {
|
||||
const char *end = s + length;
|
||||
s = StripLeft(s);
|
||||
end = StripRight(s, end);
|
||||
length = end - s;
|
||||
}
|
||||
|
||||
first = new char[length + 1];
|
||||
memcpy(first, s, length);
|
||||
first[length] = 0;
|
||||
|
|
|
@ -33,7 +33,11 @@ class DivideString {
|
|||
const char *second;
|
||||
|
||||
public:
|
||||
DivideString(const char *s, char separator);
|
||||
/**
|
||||
* @param strip strip the first part and left-strip the second
|
||||
* part?
|
||||
*/
|
||||
DivideString(const char *s, char separator, bool strip=false);
|
||||
|
||||
~DivideString() {
|
||||
delete[] first;
|
||||
|
|
|
@ -15,6 +15,7 @@ class DivideStringTest : public CppUnit::TestFixture {
|
|||
CPPUNIT_TEST(TestBasic);
|
||||
CPPUNIT_TEST(TestEmpty);
|
||||
CPPUNIT_TEST(TestFail);
|
||||
CPPUNIT_TEST(TestStrip);
|
||||
CPPUNIT_TEST_SUITE_END();
|
||||
|
||||
public:
|
||||
|
@ -41,4 +42,13 @@ public:
|
|||
const DivideString ds(input, '.');
|
||||
CPPUNIT_ASSERT(!ds.IsDefined());
|
||||
}
|
||||
|
||||
void TestStrip() {
|
||||
constexpr char input[] = " foo\t.\nbar\r";
|
||||
const DivideString ds(input, '.', true);
|
||||
CPPUNIT_ASSERT(ds.IsDefined());
|
||||
CPPUNIT_ASSERT(!ds.IsEmpty());
|
||||
CPPUNIT_ASSERT_EQUAL(0, strcmp(ds.GetFirst(), "foo"));
|
||||
CPPUNIT_ASSERT_EQUAL(input + 7, ds.GetSecond());
|
||||
}
|
||||
};
|
||||
|
|
Loading…
Reference in New Issue