From 19c0866b050a022406867aa650302f4efbf8e010 Mon Sep 17 00:00:00 2001 From: jsmall-nvidia Date: Sat, 29 Apr 2023 09:24:26 -0400 Subject: CommandOptions (#2856) * WIP CommandOptions * Fix some output issues. * Simplify word wrapping. * Add file extensions. * Change how lookup takes place. Add appendSplit functions to StringUtil. Make Categories hold the index range of their options. * Small improvement. * Lookup with partial option names. * Associate user values. * Encoding flags in the name. * Refactor setting up of command options. * Use CommandOptions in slang-options. * Remove old help text. * Cache the CommandOptions on the Session. * Range checking. Fix bug in the Options handling. * Extra checks for validity. * Get categories directly. * Slight improvements over output. * Added NameValue types. * Fix typo. Remove some now unused diagnostics. Fix diagnostic in testing, as output has changed. * Add minimal usage message. * Remove platform executable extension from diagnostics output. * Some improvements around getting names from NameValue types. * Improve some option descriptions. * Small fixes. --- source/core/slang-string-util.cpp | 24 ++++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) (limited to 'source/core/slang-string-util.cpp') diff --git a/source/core/slang-string-util.cpp b/source/core/slang-string-util.cpp index 29e0dad5d..7de6846d5 100644 --- a/source/core/slang-string-util.cpp +++ b/source/core/slang-string-util.cpp @@ -35,10 +35,8 @@ namespace Slang { return areAllEqual(slicesA, slicesB, equalFn); } -/* static */void StringUtil::split(const UnownedStringSlice& in, char splitChar, List& outSlices) +/* static */void StringUtil::appendSplit(const UnownedStringSlice& in, char splitChar, List& outSlices) { - outSlices.clear(); - const char* start = in.begin(); const char* end = in.end(); @@ -59,17 +57,15 @@ namespace Slang { } } -/* static */void StringUtil::split(const UnownedStringSlice& in, const UnownedStringSlice& splitSlice, List& outSlices) +/* static */void StringUtil::appendSplit(const UnownedStringSlice& in, const UnownedStringSlice& splitSlice, List& outSlices) { const Index splitLen = splitSlice.getLength(); if (splitLen == 1) { - return split(in, splitSlice[0], outSlices); + return appendSplit(in, splitSlice[0], outSlices); } - outSlices.clear(); - SLANG_ASSERT(splitLen > 0); if (splitLen <= 0) { @@ -96,7 +92,7 @@ namespace Slang { cur++; } - + // Add to output outSlices.add(UnownedStringSlice(start, cur)); @@ -105,6 +101,18 @@ namespace Slang { } } +/* static */void StringUtil::split(const UnownedStringSlice& in, char splitChar, List& outSlices) +{ + outSlices.clear(); + appendSplit(in, splitChar, outSlices); +} + +/* static */void StringUtil::split(const UnownedStringSlice& in, const UnownedStringSlice& splitSlice, List& outSlices) +{ + outSlices.clear(); + appendSplit(in, splitSlice, outSlices); +} + /* static */Index StringUtil::split(const UnownedStringSlice& in, char splitChar, Index maxSlices, UnownedStringSlice* outSlices) { Index index = 0; -- cgit v1.2.3