aboutsummaryrefslogtreecommitdiff
path: root/dep/g3dlite/source/stringutils.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'dep/g3dlite/source/stringutils.cpp')
-rw-r--r--dep/g3dlite/source/stringutils.cpp68
1 files changed, 54 insertions, 14 deletions
diff --git a/dep/g3dlite/source/stringutils.cpp b/dep/g3dlite/source/stringutils.cpp
index c3876ebb6a4..ff71851700c 100644
--- a/dep/g3dlite/source/stringutils.cpp
+++ b/dep/g3dlite/source/stringutils.cpp
@@ -1,10 +1,10 @@
/**
- @file stringutils.cpp
+ \file stringutils.cpp
- @maintainer Morgan McGuire, http://graphics.cs.williams.edu
+ \maintainer Morgan McGuire, http://graphics.cs.williams.edu
- @created 2000-09-09
- @edited 2008-01-10
+ \created 2000-09-09
+ \edited 2011-08-20
*/
#include "G3D/platform.h"
@@ -12,6 +12,14 @@
#include "G3D/BinaryInput.h"
#include <algorithm>
+#ifdef G3D_WINDOWS
+extern "C" {
+ // Define functions for ffmpeg since we don't link in gcc's c library
+ extern int strncasecmp(const char *string1, const char *string2, size_t count) { return _strnicmp(string1, string2, count); }
+ extern int strcasecmp(const char *string1, const char *string2) { return _stricmp(string1, string2); }
+}
+#endif
+
namespace G3D {
#ifdef _MSC_VER
@@ -19,7 +27,7 @@ namespace G3D {
# pragma warning (push)
# pragma warning (disable : 4530)
#endif
-#ifdef G3D_WIN32
+#ifdef G3D_WINDOWS
const char* NEWLINE = "\r\n";
#else
const char* NEWLINE = "\n";
@@ -56,7 +64,7 @@ void parseCommaSeparated(const std::string s, Array<std::string>& array, bool st
if (stripQuotes) {
for (int i = 0; i < array.length(); ++i) {
std::string& t = array[i];
- int L = t.length();
+ size_t L = t.length();
if ((L > 1) && (t[0] == quote) && (t[L - 1] == quote)) {
if ((L > 6) && (t[1] == quote) && (t[2] == quote) && (t[L - 3] == quote) && (t[L - 2] == quote)) {
// Triple-quote
@@ -86,15 +94,44 @@ bool beginsWith(
}
}
+std::string replace(const std::string& s, const std::string& pattern, const std::string& replacement) {
+ if (pattern.length() == 0) {
+ return s;
+ }
+ std::string temp = "";
+ size_t lastindex = 0;
+ size_t nextindex = 0;
+ do {
+ nextindex = s.find(pattern, lastindex);
+ if (nextindex == std::string::npos) {
+ break;
+ }
+ temp += s.substr(lastindex, nextindex - lastindex) + replacement;
+ lastindex = nextindex + pattern.length();
+ } while (lastindex + pattern.length() <= s.length());
+ return temp + (lastindex < s.length() ? s.substr(lastindex) : "");
+}
+
+bool isValidIdentifier(const std::string& s) {
+ if (s.length() > 0 && (isLetter(s[0]) || s[0] == '_')) {
+ for (size_t i = 1; i < s.length() ; ++i) {
+ if (!( isLetter(s[i]) || (s[i] == '_') || isDigit(s[i]) )) {
+ return false;
+ }
+ }
+ return true;
+ }
+ return false;
+}
bool endsWith(
const std::string& test,
const std::string& pattern) {
if (test.size() >= pattern.size()) {
- int te = test.size() - 1;
- int pe = pattern.size() - 1;
- for (int i = pattern.size() - 1; i >= 0; --i) {
+ size_t te = test.size() - 1;
+ size_t pe = pattern.size() - 1;
+ for (int i = (int)pattern.size() - 1; i >= 0; --i) {
if (pattern[pe - i] != test[te - i]) {
return false;
}
@@ -151,7 +188,7 @@ std::string wordWrap(
if (c < input.size()) {
// Collapse multiple spaces.
while ((input[c] == ' ') && (c < input.size())) {
- c++;
+ ++c;
}
}
}
@@ -248,9 +285,11 @@ std::string stringJoin(
}
-std::string trimWhitespace(
- const std::string& s) {
+std::string trimWhitespace(const std::string& s) {
+ if (s.length() == 0) {
+ return s;
+ }
size_t left = 0;
// Trim from left
@@ -258,15 +297,16 @@ std::string trimWhitespace(
++left;
}
- int right = s.length() - 1;
+ size_t right = s.length() - 1;
// Trim from right
- while ((right > (int)left) && iswspace(s[right])) {
+ while ((right > left) && iswspace(s[right])) {
--right;
}
return s.substr(left, right - left + 1);
}
+
}; // namespace
#undef NEWLINE