source: cpp/frams/util/sstringutils.h @ 959

Last change on this file since 959 was 929, checked in by Maciej Komosinski, 5 years ago

Introduced strSplit() - a function that splits an SString and stores results in any class that implements push_back(const SString&), e.g. std::vector<SString>

  • Property svn:eol-style set to native
File size: 2.4 KB
Line 
1// This file is a part of Framsticks SDK.  http://www.framsticks.com/
2// Copyright (C) 1999-2020  Maciej Komosinski and Szymon Ulatowski.
3// See LICENSE.txt for details.
4
5#ifndef _SSTRINGUTILS_H_
6#define _SSTRINGUTILS_H_
7
8#include "sstring.h"
9#include <common/virtfile/virtfile.h>
10
11/// return: 1=ok 0=error
12int loadSString(const char* filename, SString& s, const char* framsgmodule = 0, const char* error = 0, bool remove_cr = true);
13void loadSString(VirtFILE *f, SString& s, bool remove_cr = true);
14bool loadSStringLine(VirtFILE* f, SString &s);
15
16int quoteTilde(SString &target);
17int unquoteTilde(SString &target);
18
19bool strContainsOneOf(const char* str, const char* chars);
20bool sstringQuote(SString& target);
21SString sstringDelimitAndShorten(const SString &in, int maxlen, bool show_length, const SString& before, const SString& after);
22const char* skipQuoteString(const char* txt, const char* limit);
23int sstringUnquote(SString &target);
24
25int strFindField(const SString& txt, const SString& name, int &end);
26SString strGetField(const SString& txt, const SString& name);
27void strSetField(SString& txt, const SString& name, const SString& value);
28
29SString trim(const SString& s); ///< remove leading/trailing whitespace
30SString concatPath(const SString& in1, const SString& in2); ///< concatenate path components inserting PATH_SEPARATOR_CHAR if not already present
31bool removeCR(SString& s); ///< remove '\r' return true if changed
32bool matchWildcard(const SString& word, const SString& pattern);///< '*' in pattern matches any substring
33bool matchWildcardList(const SString& word, const SString& patterns);///< patterns is a list of patterns (separated by ',')
34SString getUIDString(uint64_t uid, char prefix);
35bool parseUIDString(const char* str, char prefix, uint64_t &uid, bool err);
36
37// SplitResult can be any class implementing push_back(const SString&), e.g. std::vector<SString>
38template <class SplitResult> void strSplit(const SString& text, const SString& separator, bool merge_separators, SplitResult& result)
39{
40        int i, next = 0;
41        bool first = true;
42        if (!separator.len()) { result.push_back(text); return; }
43        while (1)
44        {
45                i = text.indexOf(separator.c_str(), next);
46                if (i < 0)
47                {
48                        if ((next <= text.len()) || first)
49                                result.push_back(text.substr(next));
50                        return;
51                }
52                if ((!merge_separators) || (i > next) || (i == 0))
53                {
54                        result.push_back(text.substr(next, i - next));
55                        first = false;
56                }
57                next = i + separator.len();
58        }
59}
60
61
62#endif
Note: See TracBrowser for help on using the repository browser.