2023-03-06 14:42:04 +01:00
|
|
|
// SPDX-License-Identifier: GPL-2.0-or-later
|
|
|
|
// Copyright The Music Player Daemon Project
|
2013-12-14 12:58:26 +01:00
|
|
|
|
2014-12-03 21:38:06 +01:00
|
|
|
#ifndef MPD_DIVIDE_STRING_HXX
|
|
|
|
#define MPD_DIVIDE_STRING_HXX
|
2013-12-14 12:58:26 +01:00
|
|
|
|
2020-03-12 23:20:59 +01:00
|
|
|
#include <cassert>
|
2013-12-14 12:58:26 +01:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Split a given constant string at a separator character. Duplicates
|
|
|
|
* the first part to be able to null-terminate it.
|
|
|
|
*/
|
2014-12-03 21:38:06 +01:00
|
|
|
class DivideString {
|
2013-12-14 12:58:26 +01:00
|
|
|
char *first;
|
|
|
|
const char *second;
|
|
|
|
|
|
|
|
public:
|
2014-12-04 23:05:44 +01:00
|
|
|
/**
|
|
|
|
* @param strip strip the first part and left-strip the second
|
|
|
|
* part?
|
|
|
|
*/
|
2017-05-16 10:22:36 +02:00
|
|
|
DivideString(const char *s, char separator, bool strip=false) noexcept;
|
2013-12-14 12:58:26 +01:00
|
|
|
|
2014-12-03 21:38:06 +01:00
|
|
|
~DivideString() {
|
2013-12-14 12:58:26 +01:00
|
|
|
delete[] first;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Was the separator found?
|
|
|
|
*/
|
|
|
|
bool IsDefined() const {
|
|
|
|
return first != nullptr;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Is the first part empty?
|
|
|
|
*/
|
2017-11-10 19:24:33 +01:00
|
|
|
bool empty() const {
|
2013-12-14 12:58:26 +01:00
|
|
|
assert(IsDefined());
|
|
|
|
|
|
|
|
return *first == 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
const char *GetFirst() const {
|
|
|
|
assert(IsDefined());
|
|
|
|
|
|
|
|
return first;
|
|
|
|
}
|
|
|
|
|
|
|
|
const char *GetSecond() const {
|
|
|
|
assert(IsDefined());
|
|
|
|
|
|
|
|
return second;
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
|
|
|
#endif
|