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 ("%lim".printf (long.MIN), 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);
[CCode (cname = "GLONG_FROM_LE")]
public static long from_little_endian (long val);
- [CCode (cname = "atol", cheader_filename = "stdlib.h")]
- public static long parse (string str);
+ [CCode (cname = "strtol", cheader_filename = "stdlib.h")]
+ static long strtol (string nptr, out char* endptr, uint _base);
+
+ public static long parse (string str) {
+ return strtol (str, null, 0);
+ }
+
+ 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]
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]
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);
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);
[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")]