diff options
author | John Ericson <John.Ericson@Obsidian.Systems> | 2020-07-20 17:42:34 +0000 |
---|---|---|
committer | John Ericson <John.Ericson@Obsidian.Systems> | 2020-07-20 17:42:34 +0000 |
commit | bf61871271971aa45237fb9ba7fa4c63ae083ff2 (patch) | |
tree | ca98553ba861a40d1391c7fceee437489460dd4a /src/libutil/split.hh | |
parent | e45754e530c00e8ec7cd7ca5a405061a8a82aa3c (diff) |
parser.hh -> split.hh
Diffstat (limited to 'src/libutil/split.hh')
-rw-r--r-- | src/libutil/split.hh | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/src/libutil/split.hh b/src/libutil/split.hh new file mode 100644 index 000000000..d19d7d8ed --- /dev/null +++ b/src/libutil/split.hh @@ -0,0 +1,33 @@ +#pragma once + +#include <optional> +#include <string_view> + +#include "util.hh" + +namespace nix { + +// If `separator` is found, we return the portion of the string before the +// separator, and modify the string argument to contain only the part after the +// separator. Otherwise, wer return `std::nullopt`, and we leave the argument +// string alone. +static inline std::optional<std::string_view> splitPrefixTo(std::string_view & string, char separator) { + auto sepInstance = string.find(separator); + + if (sepInstance != std::string_view::npos) { + auto prefix = string.substr(0, sepInstance); + string.remove_prefix(sepInstance+1); + return prefix; + } + + return std::nullopt; +} + +static inline bool splitPrefix(std::string_view & string, std::string_view prefix) { + bool res = hasPrefix(string, prefix); + if (res) + string.remove_prefix(prefix.length()); + return res; +} + +} |