]> git.mxchange.org Git - simgear.git/blobdiff - simgear/misc/strutils.cxx
Remove ambient component of additional lights
[simgear.git] / simgear / misc / strutils.cxx
index d4ff839358effeb70bc804cd9461d9b7e6b37628..b1f74318eb60279689959a6dffc08ddfadd7ee72 100644 (file)
 
 #include <ctype.h>
 #include <cstring>
+#include <sstream>
 
 #include "strutils.hxx"
 
 using std::string;
 using std::vector;
+using std::stringstream;
 
 namespace simgear {
     namespace strutils {
@@ -243,9 +245,51 @@ namespace simgear {
         return result;
     }
     
-    int to_int(const std::string& s)
+    int to_int(const std::string& s, int base)
     {
-        return atoi(s.c_str());
+        stringstream ss(s);
+        switch (base) {
+        case 8:      ss >> std::oct; break;
+        case 16:     ss >> std::hex; break;
+        default: break;
+        }
+        
+        int result;
+        ss >> result;
+        return result;
+    }
+    
+    int compare_versions(const string& v1, const string& v2)
+    {
+        vector<string> v1parts(split(v1, "."));
+        vector<string> v2parts(split(v2, "."));
+
+        int lastPart = std::min(v1parts.size(), v2parts.size());
+        for (int part=0; part < lastPart; ++part) {
+            int part1 = to_int(v1parts[part]);
+            int part2 = to_int(v2parts[part]);
+
+            if (part1 != part2) {
+                return part1 - part2;
+            }
+        } // of parts iteration
+
+        // reached end - longer wins
+        return v1parts.size() - v2parts.size();
+    }
+    
+    string join(const string_list& l, const string& joinWith)
+    {
+        string result;
+        unsigned int count = l.size();
+        for (unsigned int i=0; i < count; ++i) {
+            result += l[i];
+            if (i < (count - 1)) {
+                result += joinWith;
+            }
+        }
+        
+        return result;
     }
     
     } // end namespace strutils