]> mj.ucw.cz Git - libucw.git/blobdiff - ucw/strtonum.h
xtypes: added first shot on unit parser
[libucw.git] / ucw / strtonum.h
index 28580415f7b7f412ceec6e1c1b12c0658b036689..ae25ff5d9a46c4aeb9ea5f9b01cee51076ddeeaf 100644 (file)
 #ifndef _STRTONUM_H
 #define _STRTONUM_H
 
+#ifdef CONFIG_UCW_CLEAN_ABI
+#define str_to_u32 ucw_str_to_u32
+#define str_to_u64 ucw_str_to_u64
+#define str_to_uint ucw_str_to_uint
+#define str_to_uintmax ucw_str_to_uintmax
+#define str_to_uns ucw_str_to_uns
+#endif
+
+// Set (flags & 0x1f) in the range 1 to 31 to denote the default base of the number
 enum str_to_num_flags {
   STN_SIGNED = 0x20,       // The resulting range is signed
   STN_MINUS = 0x40,        // Allow optional '-' sign
   STN_PLUS = 0x80,         // Allow optional '+' sign
-  STN_TRUNC = 0x100,       // Allow range overflow -> truncate to the resulting range
-  STN_DEC = 0x200,         // Support decimal numbers
+  STN_TRUNC = 0x100,       // Allow range overflow -> truncate to the allowed range
+  STN_DEC = 0x200,         // Support decimal numbers (currently no prefix)
   STN_HEX = 0x400,         // Support hexadecimal numbers (0x...)
   STN_BIN = 0x800,         // Support binary numbers (0b...)
   STN_OCT = 0x1000,        // Support octal numbers (0o...)
-  STN_UNDERSCORE = 0x2000, // Number can contain underscore characters to increase readability (eg. 1_000_000)
-  STN_ZCHAR = 0x4000,      // Number can be terminated only by \0 character
+  STN_OCT0 = 0x2000,       // Support octal numbers (0[0-7]...)
+  STN_UNDERSCORE = 0x4000, // Number can contain underscore characters to increase readability (eg. 1_000_000)
+  STN_WHOLE = 0x8000,      // Number can be terminated only by \0 character
 };
 
 #define STN_DBASES_MASK    0x1F
 #define STN_SIGNS          (STN_MINUS | STN_PLUS)
 #define STN_BASES          (STN_DEC | STN_HEX | STN_BIN | STN_OCT)
-#define STN_FLAGS      (STN_MINUS | STN_PLUS | STN_BASES)
-#define STN_UFLAGS     (STN_FLAGS | STN_UNDERSCORE)
-#define STN_SFLAGS     (STN_FLAGS | STN_SIGNED)
-#define STN_USFLAGS    (STN_SFLAGS | STN_UNDERSCORE)
-
-#define STN_DECLARE_CONVERTOR(type, suffix)                                                         \
-const char *str_to_##suffix(type *num, const char *str, const char **next, const uns flags)
-
-#define STN_SIGNED_CONVERTOR(type, suffix, usuffix)                                                  \
-static inline const char *str_to_##suffix(type *num, const char *str, const char **next, const uns flags) \
-{                                                                                                   \
-  return str_to_##usuffix((void *) num, str, next, flags | STN_SIGNED);                               \
+#define STN_BASES0         (STN_BASES | STN_OCT0)
+#define STN_FLAGS          (STN_MINUS | STN_PLUS | STN_BASES)
+#define STN_UFLAGS         (STN_FLAGS | STN_UNDERSCORE)
+#define STN_SFLAGS         (STN_FLAGS | STN_SIGNED)
+#define STN_USFLAGS        (STN_SFLAGS | STN_UNDERSCORE)
+
+#define STN_DECLARE_CONVERTOR(type, suffix)                                                               \
+const char *str_to_##suffix(type *num, const char *str, const char **next, const uint flags)
+
+#define STN_SIGNED_CONVERTOR(type, suffix, usuffix)                                                       \
+static inline const char *str_to_##suffix(type *num, const char *str, const char **next, const uint flags) \
+{                                                                                                         \
+  return str_to_##usuffix((void *) num, str, next, flags | STN_SIGNED | STN_PLUS | STN_MINUS);            \
 }
 
-STN_DECLARE_CONVERTOR(uns, uns);
-STN_SIGNED_CONVERTOR(int, int, uns)
+STN_DECLARE_CONVERTOR(uint, uint);
+STN_SIGNED_CONVERTOR(int, int, uint)
+
+STN_DECLARE_CONVERTOR(u32, u32);
+STN_SIGNED_CONVERTOR(s32, s32, u32)
+
+STN_DECLARE_CONVERTOR(u64, u64);
+STN_SIGNED_CONVERTOR(s64, s64, u64)
 
 STN_DECLARE_CONVERTOR(uintmax_t, uintmax);
 STN_SIGNED_CONVERTOR(intmax_t, intmax, uintmax)
 
+// FIXME: For backward compatibility, will be removed soon
+STN_DECLARE_CONVERTOR(uns, uns);
+
 #endif