[vala/staging] glib-2.0: Add (u)long.parse/try_parse()



commit 4ea89527a6acb058c299997ad4a96a4b57f8afa3
Author: Rico Tzschichholz <ricotz ubuntu com>
Date:   Fri Mar 10 14:57:27 2017 +0100

    glib-2.0: Add (u)long.parse/try_parse()
    
    https://gitlab.gnome.org/GNOME/vala/issues/649

 tests/basic-types/integers.vala | 13 +++++++++++++
 vapi/glib-2.0.vapi              | 38 +++++++++++++++++++++++++++++++++++++-
 2 files changed, 50 insertions(+), 1 deletion(-)
---
diff --git a/tests/basic-types/integers.vala b/tests/basic-types/integers.vala
index 4e91071b0..ccfc76c55 100644
--- a/tests/basic-types/integers.vala
+++ b/tests/basic-types/integers.vala
@@ -71,12 +71,25 @@ void test_int () {
        assert (s == "42");
 
        unowned string unparsed;
+       long l;
+       long.try_parse ("%lim".printf (long.MIN), out l, out unparsed);
+       assert (l == long.MIN);
+       assert (unparsed == "m");
+       assert (!long.try_parse ("%lum".printf (ulong.MAX), out l));
+
+       ulong ul;
+       ulong.try_parse ("%lum".printf (ulong.MAX), out ul, out unparsed);
+       assert (ul == ulong.MAX);
+       assert (unparsed == "m");
+       assert (!ulong.try_parse ("-1", out ul));
+
        int64 i64;
        int64.try_parse ("-4711inch", out i64, out unparsed);
        assert (i64 == -4711);
        assert (unparsed == "inch");
        int64.try_parse ("-31415km", out i64);
        assert (i64 == -31415);
+
        uint64 ui64;
        uint64.try_parse ("4711yards", out ui64, out unparsed);
        assert (ui64 == 4711);
diff --git a/vapi/glib-2.0.vapi b/vapi/glib-2.0.vapi
index 147a7148d..57f1eb135 100644
--- a/vapi/glib-2.0.vapi
+++ b/vapi/glib-2.0.vapi
@@ -263,8 +263,23 @@ public struct long {
        [CCode (cname = "GLONG_FROM_LE")]
        public static long from_little_endian (long val);
 
+       [CCode (cname = "strtol", cheader_filename = "stdlib.h")]
+       static long strtol (string nptr, out char* endptr, uint _base);
+
        [CCode (cname = "atol", cheader_filename = "stdlib.h")]
        public static long parse (string str);
+
+       public static bool try_parse (string str, out long result = null, out unowned string unparsed = null) 
{
+               char* endptr;
+               result = strtol (str, out endptr, 0);
+               if (endptr == (char*) str + str.length) {
+                       unparsed = "";
+                       return true;
+               } else {
+                       unparsed = (string) endptr;
+                       return false;
+               }
+       }
 }
 
 [SimpleType]
@@ -296,6 +311,25 @@ public struct ulong {
        public static ulong from_big_endian (ulong val);
        [CCode (cname = "GULONG_FROM_LE")]
        public static ulong from_little_endian (ulong val);
+
+       [CCode (cname = "strtoul", cheader_filename = "stdlib.h")]
+       static ulong strtoul (string nptr, out char* endptr, uint _base);
+
+       public static ulong parse (string str) {
+               return strtoul (str, null, 0);
+       }
+
+       public static bool try_parse (string str, out ulong result = null, out unowned string unparsed = 
null) {
+               char* endptr;
+               result = strtoul (str, out endptr, 0);
+               if (endptr == (char*) str + str.length) {
+                       unparsed = "";
+                       return true;
+               } else {
+                       unparsed = (string) endptr;
+                       return false;
+               }
+       }
 }
 
 [SimpleType]
@@ -747,6 +781,7 @@ public struct uint64 {
        public static uint64 parse (string str) {
                return ascii_strtoull (str, null, 0);
        }
+
        public static bool try_parse (string str, out uint64 result = null, out unowned string unparsed = 
null) {
                char* endptr;
                result = ascii_strtoull (str, out endptr, 0);
@@ -889,6 +924,7 @@ public struct double {
        public static double parse (string str) {
                return ascii_strtod (str, null);
        }
+
        public static bool try_parse (string str, out double result = null, out unowned string unparsed = 
null) {
                char* endptr;
                result = ascii_strtod (str, out endptr);
@@ -1280,7 +1316,7 @@ public class string {
        [Version (replacement = "double.parse")]
        [CCode (cname = "g_ascii_strtod")]
        public double to_double (out unowned string endptr = null);
-       [Version (replacement = "uint64.parse")]
+       [Version (replacement = "ulong.parse")]
        [CCode (cname = "strtoul")]
        public ulong to_ulong (out unowned string endptr = null, int _base = 0);
        [Version (replacement = "int64.parse")]


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]