]> git.lizzy.rs Git - dragonfireclient.git/blobdiff - src/util/string.cpp
Mapgen V6: Respect water_level setting
[dragonfireclient.git] / src / util / string.cpp
index 61b307c60e7d678a15f0f371308858354a67238b..39a14598b5ca55ac59ac96ce5a720fc893143d15 100644 (file)
@@ -1,6 +1,6 @@
 /*
-Minetest-c55
-Copyright (C) 2010-2012 celeron55, Perttu Ahola <celeron55@gmail.com>
+Minetest
+Copyright (C) 2010-2013 celeron55, Perttu Ahola <celeron55@gmail.com>
 
 This program is free software; you can redistribute it and/or modify
 it under the terms of the GNU Lesser General Public License as published by
@@ -18,11 +18,37 @@ with this program; if not, write to the Free Software Foundation, Inc.,
 */
 
 #include "string.h"
+#include "pointer.h"
+#include "numeric.h"
 
 #include "../sha1.h"
 #include "../base64.h"
 #include "../porting.h"
 
+std::wstring narrow_to_wide(const std::string& mbs)
+{
+       size_t wcl = mbs.size();
+       Buffer<wchar_t> wcs(wcl+1);
+       size_t l = mbstowcs(*wcs, mbs.c_str(), wcl);
+       if(l == (size_t)(-1))
+               return L"<invalid multibyte string>";
+       wcs[l] = 0;
+       return *wcs;
+}
+
+std::string wide_to_narrow(const std::wstring& wcs)
+{
+       size_t mbl = wcs.size()*4;
+       SharedBuffer<char> mbs(mbl+1);
+       size_t l = wcstombs(*mbs, wcs.c_str(), mbl);
+       if(l == (size_t)(-1)) {
+               return "Character conversion failed!";
+       }
+       else
+               mbs[l] = 0;
+       return *mbs;
+}
+
 // Get an sha-1 hash of the player's name combined with
 // the password entered. That's what the server uses as
 // their password. (Exception : if the password field is
@@ -112,3 +138,18 @@ char *mystrtok_r(char *s, const char *sep, char **lasts) {
        *lasts = t;
        return s;
 }
+
+u64 read_seed(const char *str) {
+       char *endptr;
+       u64 num;
+       
+       if (str[0] == '0' && str[1] == 'x')
+               num = strtoull(str, &endptr, 16);
+       else
+               num = strtoull(str, &endptr, 10);
+               
+       if (*endptr)
+               num = murmur_hash_64_ua(str, (int)strlen(str), 0x1337);
+               
+       return num;
+}