diff --git a/libc3/buf_inspect.c b/libc3/buf_inspect.c
index 1b90457..9841e39 100644
--- a/libc3/buf_inspect.c
+++ b/libc3/buf_inspect.c
@@ -16,173 +16,16 @@
#include "../libtommath/tommath.h"
#include "c3.h"
-#define DEF_BUF_INSPECT_S_BASE(bits, base) \
- sw buf_inspect_s ## bits ## _ ## base (s_buf *buf, \
- const s ## bits *s) \
- { \
- sw r; \
- sw result = 0; \
- u ## bits u; \
- u = *s; \
- if (*s < 0) { \
- if ((r = buf_write_1(buf, "-")) < 0) \
- return r; \
- result += r; \
- u = -*s; \
- } \
- if ((r = buf_inspect_u ## bits ## _ ## base (buf, &u)) < 0) \
- return r; \
- result += r; \
- return result; \
- } \
- \
- sw buf_inspect_s ## bits ## _ ## base ## _size (const s ## bits *s) \
- { \
- sw result = 0; \
- u ## bits u; \
- u = *s; \
- if (*s < 0) { \
- result += strlen("-"); \
- u = -*s; \
- } \
- result += buf_inspect_u ## bits ## _ ## base ## _size(&u); \
- return result; \
- }
-
-#define DEF_BUF_INSPECT_S(bits) \
- sw buf_inspect_s ## bits (s_buf *buf, const s ## bits *s) \
- { \
- sw r; \
- sw result = 0; \
- u ## bits u; \
- u = *s; \
- if (*s < 0) { \
- if ((r = buf_write_1(buf, "-")) < 0) \
- return r; \
- result += r; \
- u = -*s; \
- } \
- if ((r = buf_inspect_u ## bits (buf, &u)) < 0) \
- return r; \
- result += r; \
- return result; \
- } \
- \
- sw buf_inspect_s ## bits ## _size (const s ## bits *s) \
- { \
- sw result = 0; \
- u ## bits u; \
- u = *s; \
- if (*s < 0) { \
- result += strlen("-"); \
- u = -*s; \
- } \
- result += buf_inspect_u ## bits ## _size(&u); \
- return result; \
- } \
- \
- DEF_BUF_INSPECT_S_BASE(bits, binary) \
- DEF_BUF_INSPECT_S_BASE(bits, hexadecimal) \
- DEF_BUF_INSPECT_S_BASE(bits, octal)
-
-#define DEF_BUF_INSPECT_U_BASE(bits, base) \
- sw buf_inspect_u ## bits ## _ ## base (s_buf *buf, \
- const u ## bits *u) \
- { \
- return buf_inspect_u ## bits ## _base(buf, &g_c3_base_ ## base, \
- u); \
- } \
- \
- sw buf_inspect_u ## bits ## _ ## base ## _size (const u ## bits *u) \
- { \
- return buf_inspect_u ## bits ## _base_size(&g_c3_base_ ## base, \
- u); \
- }
-
-#define DEF_BUF_INSPECT_U(bits) \
- sw buf_inspect_u ## bits (s_buf *buf, const u ## bits *u) \
- { \
- return buf_inspect_u ## bits ## _base(buf, &g_c3_base_decimal, u); \
- } \
- \
- sw buf_inspect_u ## bits ## _base (s_buf *buf, \
- const s_str *base, \
- const u ## bits *u) \
- { \
- character *c; \
- u8 digit; \
- sw i; \
- sw r; \
- uw radix; \
- s_buf_save save; \
- sw size; \
- character zero; \
- u ## bits u_; \
- u_ = *u; \
- if (u_ == 0) { \
- if (str_character(base, 0, &zero) < 0) \
- return -1; \
- return buf_write_character_utf8(buf, zero); \
- } \
- size = buf_inspect_u ## bits ## _base_size(base, u); \
- c = calloc(size, sizeof(character)); \
- buf_save_init(buf, &save); \
- radix = base->size; \
- i = 0; \
- while (u_ > 0) { \
- digit = u_ % radix; \
- u_ /= radix; \
- if (str_character(base, digit, c + i) < 0) { \
- r = -1; \
- goto restore; \
- } \
- i++; \
- } \
- while (i--) \
- if ((r = buf_write_character_utf8(buf, c[i])) < 0) \
- goto restore; \
- r = size; \
- goto clean; \
- restore: \
- buf_save_restore_wpos(buf, &save); \
- clean: \
- buf_save_clean(buf, &save); \
- return r; \
- } \
- \
- sw buf_inspect_u ## bits ## _base_size (const s_str *base, \
- const u ## bits *u) \
- { \
- uw radix; \
- sw size = 0; \
- u ## bits u_; \
- u_ = *u; \
- if (u_ == 0) \
- return 1; \
- radix = base->size; \
- while (u_ > 0) { \
- u_ /= radix; \
- size++; \
- } \
- return size; \
- } \
- \
- sw buf_inspect_u ## bits ## _size (const u ## bits *u) \
- { \
- return buf_inspect_u ## bits ## _base_size(&g_c3_base_decimal, u); \
- } \
- \
- DEF_BUF_INSPECT_U_BASE(bits, binary) \
- DEF_BUF_INSPECT_U_BASE(bits, hexadecimal) \
- DEF_BUF_INSPECT_U_BASE(bits, octal)
-
-sw buf_inspect_array_data (s_buf *buf, const s_array *array);
-sw buf_inspect_array_type (s_buf *buf, const s_array *array);
-
sw buf_inspect_array_data (s_buf *buf, const s_array *array);
sw buf_inspect_array_data_rec (s_buf *buf, const s_array *array,
uw dimension, uw *address,
f_buf_inspect inspect, u8 **data);
+sw buf_inspect_array_data_size (const s_array *array);
+sw buf_inspect_array_data_size_rec (s_buf *buf, const s_array *array,
+ uw dimension, uw *address,
+ f_buf_inspect inspect, u8 **data);
+sw buf_inspect_array_type (s_buf *buf, const s_array *array);
+sw buf_inspect_array_type_size (const s_array *array);
sw buf_inspect_tag_type (s_buf *buf, e_tag_type type);
sw buf_inspect_array_data (s_buf *buf, const s_array *array)
@@ -1080,12 +923,6 @@ sw buf_inspect_quote_size (const s_quote *quote)
return result;
}
-DEF_BUF_INSPECT_S(8)
-DEF_BUF_INSPECT_S(16)
-DEF_BUF_INSPECT_S(32)
-DEF_BUF_INSPECT_S(64)
-DEF_BUF_INSPECT_S(w)
-
sw buf_inspect_str (s_buf *buf, const s_str *str)
{
sw r;
@@ -1585,12 +1422,6 @@ sw buf_inspect_tuple_size (const s_tuple *tuple)
return result;
}
-DEF_BUF_INSPECT_U(8)
-DEF_BUF_INSPECT_U(16)
-DEF_BUF_INSPECT_U(32)
-DEF_BUF_INSPECT_U(64)
-DEF_BUF_INSPECT_U(w)
-
sw buf_inspect_var (s_buf *buf, const s_tag *var)
{
sw r;
diff --git a/libc3/buf_inspect_s.c.in b/libc3/buf_inspect_s.c.in
new file mode 100644
index 0000000..08b048a
--- /dev/null
+++ b/libc3/buf_inspect_s.c.in
@@ -0,0 +1,47 @@
+/* c3
+ * Copyright 2022,2023 kmx.io <contact@kmx.io>
+ *
+ * Permission is hereby granted to use this software granted the above
+ * copyright notice and this permission paragraph are included in all
+ * copies and substantial portions of this software.
+ *
+ * THIS SOFTWARE IS PROVIDED "AS-IS" WITHOUT ANY GUARANTEE OF
+ * PURPOSE AND PERFORMANCE. IN NO EVENT WHATSOEVER SHALL THE
+ * AUTHOR BE CONSIDERED LIABLE FOR THE USE AND PERFORMANCE OF
+ * THIS SOFTWARE.
+ */
+/* Gen from buf_inspect_s.c.in BITS=_BITS$ bits=_bits$ */
+#include <string.h>
+#include "buf.h"
+#include "buf_inspect_u_bits$.h"
+
+sw buf_inspect_s_bits$ (s_buf *buf, const s_bits$ *s)
+{
+ sw r;
+ sw result = 0;
+ u_bits$ u;
+ u = *s;
+ if (*s < 0) {
+ if ((r = buf_write_1(buf, "-")) < 0)
+ return r;
+ result += r;
+ u = -*s;
+ }
+ if ((r = buf_inspect_u_bits$ (buf, &u)) < 0)
+ return r;
+ result += r;
+ return result;
+}
+
+sw buf_inspect_s_bits$_size (const s_bits$ *s)
+{
+ sw result = 0;
+ u_bits$ u;
+ u = *s;
+ if (*s < 0) {
+ result += strlen("-");
+ u = -*s;
+ }
+ result += buf_inspect_u_bits$_size(&u);
+ return result;
+}
diff --git a/libc3/buf_inspect_s.h.in b/libc3/buf_inspect_s.h.in
new file mode 100644
index 0000000..c0df839
--- /dev/null
+++ b/libc3/buf_inspect_s.h.in
@@ -0,0 +1,17 @@
+/* c3
+ * Copyright 2022,2023 kmx.io <contact@kmx.io>
+ *
+ * Permission is hereby granted to use this software granted the above
+ * copyright notice and this permission paragraph are included in all
+ * copies and substantial portions of this software.
+ *
+ * THIS SOFTWARE IS PROVIDED "AS-IS" WITHOUT ANY GUARANTEE OF
+ * PURPOSE AND PERFORMANCE. IN NO EVENT WHATSOEVER SHALL THE
+ * AUTHOR BE CONSIDERED LIABLE FOR THE USE AND PERFORMANCE OF
+ * THIS SOFTWARE.
+ */
+/* Gen from buf_inspect_s.h.in BITS=_BITS$ bits=_bits$ */
+
+sw buf_inspect_s_bits$ (s_buf *buf, const s_bits$ *s);
+sw buf_inspect_s_bits$_size (const s_bits$ *s);
+
diff --git a/libc3/buf_inspect_s16.c b/libc3/buf_inspect_s16.c
new file mode 100644
index 0000000..1b94ac0
--- /dev/null
+++ b/libc3/buf_inspect_s16.c
@@ -0,0 +1,47 @@
+/* c3
+ * Copyright 2022,2023 kmx.io <contact@kmx.io>
+ *
+ * Permission is hereby granted to use this software granted the above
+ * copyright notice and this permission paragraph are included in all
+ * copies and substantial portions of this software.
+ *
+ * THIS SOFTWARE IS PROVIDED "AS-IS" WITHOUT ANY GUARANTEE OF
+ * PURPOSE AND PERFORMANCE. IN NO EVENT WHATSOEVER SHALL THE
+ * AUTHOR BE CONSIDERED LIABLE FOR THE USE AND PERFORMANCE OF
+ * THIS SOFTWARE.
+ */
+/* Gen from buf_inspect_s.c.in BITS=16 bits=16 */
+#include <string.h>
+#include "buf.h"
+#include "buf_inspect_u16.h"
+
+sw buf_inspect_s16 (s_buf *buf, const s16 *s)
+{
+ sw r;
+ sw result = 0;
+ u16 u;
+ u = *s;
+ if (*s < 0) {
+ if ((r = buf_write_1(buf, "-")) < 0)
+ return r;
+ result += r;
+ u = -*s;
+ }
+ if ((r = buf_inspect_u16 (buf, &u)) < 0)
+ return r;
+ result += r;
+ return result;
+}
+
+sw buf_inspect_s16_size (const s16 *s)
+{
+ sw result = 0;
+ u16 u;
+ u = *s;
+ if (*s < 0) {
+ result += strlen("-");
+ u = -*s;
+ }
+ result += buf_inspect_u16_size(&u);
+ return result;
+}
diff --git a/libc3/buf_inspect_s16.h b/libc3/buf_inspect_s16.h
new file mode 100644
index 0000000..0d802e8
--- /dev/null
+++ b/libc3/buf_inspect_s16.h
@@ -0,0 +1,17 @@
+/* c3
+ * Copyright 2022,2023 kmx.io <contact@kmx.io>
+ *
+ * Permission is hereby granted to use this software granted the above
+ * copyright notice and this permission paragraph are included in all
+ * copies and substantial portions of this software.
+ *
+ * THIS SOFTWARE IS PROVIDED "AS-IS" WITHOUT ANY GUARANTEE OF
+ * PURPOSE AND PERFORMANCE. IN NO EVENT WHATSOEVER SHALL THE
+ * AUTHOR BE CONSIDERED LIABLE FOR THE USE AND PERFORMANCE OF
+ * THIS SOFTWARE.
+ */
+/* Gen from buf_inspect_s.h.in BITS=16 bits=16 */
+
+sw buf_inspect_s16 (s_buf *buf, const s16 *s);
+sw buf_inspect_s16_size (const s16 *s);
+
diff --git a/libc3/buf_inspect_s32.c b/libc3/buf_inspect_s32.c
new file mode 100644
index 0000000..1c63066
--- /dev/null
+++ b/libc3/buf_inspect_s32.c
@@ -0,0 +1,47 @@
+/* c3
+ * Copyright 2022,2023 kmx.io <contact@kmx.io>
+ *
+ * Permission is hereby granted to use this software granted the above
+ * copyright notice and this permission paragraph are included in all
+ * copies and substantial portions of this software.
+ *
+ * THIS SOFTWARE IS PROVIDED "AS-IS" WITHOUT ANY GUARANTEE OF
+ * PURPOSE AND PERFORMANCE. IN NO EVENT WHATSOEVER SHALL THE
+ * AUTHOR BE CONSIDERED LIABLE FOR THE USE AND PERFORMANCE OF
+ * THIS SOFTWARE.
+ */
+/* Gen from buf_inspect_s.c.in BITS=32 bits=32 */
+#include <string.h>
+#include "buf.h"
+#include "buf_inspect_u32.h"
+
+sw buf_inspect_s32 (s_buf *buf, const s32 *s)
+{
+ sw r;
+ sw result = 0;
+ u32 u;
+ u = *s;
+ if (*s < 0) {
+ if ((r = buf_write_1(buf, "-")) < 0)
+ return r;
+ result += r;
+ u = -*s;
+ }
+ if ((r = buf_inspect_u32 (buf, &u)) < 0)
+ return r;
+ result += r;
+ return result;
+}
+
+sw buf_inspect_s32_size (const s32 *s)
+{
+ sw result = 0;
+ u32 u;
+ u = *s;
+ if (*s < 0) {
+ result += strlen("-");
+ u = -*s;
+ }
+ result += buf_inspect_u32_size(&u);
+ return result;
+}
diff --git a/libc3/buf_inspect_s32.h b/libc3/buf_inspect_s32.h
new file mode 100644
index 0000000..91823d7
--- /dev/null
+++ b/libc3/buf_inspect_s32.h
@@ -0,0 +1,17 @@
+/* c3
+ * Copyright 2022,2023 kmx.io <contact@kmx.io>
+ *
+ * Permission is hereby granted to use this software granted the above
+ * copyright notice and this permission paragraph are included in all
+ * copies and substantial portions of this software.
+ *
+ * THIS SOFTWARE IS PROVIDED "AS-IS" WITHOUT ANY GUARANTEE OF
+ * PURPOSE AND PERFORMANCE. IN NO EVENT WHATSOEVER SHALL THE
+ * AUTHOR BE CONSIDERED LIABLE FOR THE USE AND PERFORMANCE OF
+ * THIS SOFTWARE.
+ */
+/* Gen from buf_inspect_s.h.in BITS=32 bits=32 */
+
+sw buf_inspect_s32 (s_buf *buf, const s32 *s);
+sw buf_inspect_s32_size (const s32 *s);
+
diff --git a/libc3/buf_inspect_s64.c b/libc3/buf_inspect_s64.c
new file mode 100644
index 0000000..17764dc
--- /dev/null
+++ b/libc3/buf_inspect_s64.c
@@ -0,0 +1,47 @@
+/* c3
+ * Copyright 2022,2023 kmx.io <contact@kmx.io>
+ *
+ * Permission is hereby granted to use this software granted the above
+ * copyright notice and this permission paragraph are included in all
+ * copies and substantial portions of this software.
+ *
+ * THIS SOFTWARE IS PROVIDED "AS-IS" WITHOUT ANY GUARANTEE OF
+ * PURPOSE AND PERFORMANCE. IN NO EVENT WHATSOEVER SHALL THE
+ * AUTHOR BE CONSIDERED LIABLE FOR THE USE AND PERFORMANCE OF
+ * THIS SOFTWARE.
+ */
+/* Gen from buf_inspect_s.c.in BITS=64 bits=64 */
+#include <string.h>
+#include "buf.h"
+#include "buf_inspect_u64.h"
+
+sw buf_inspect_s64 (s_buf *buf, const s64 *s)
+{
+ sw r;
+ sw result = 0;
+ u64 u;
+ u = *s;
+ if (*s < 0) {
+ if ((r = buf_write_1(buf, "-")) < 0)
+ return r;
+ result += r;
+ u = -*s;
+ }
+ if ((r = buf_inspect_u64 (buf, &u)) < 0)
+ return r;
+ result += r;
+ return result;
+}
+
+sw buf_inspect_s64_size (const s64 *s)
+{
+ sw result = 0;
+ u64 u;
+ u = *s;
+ if (*s < 0) {
+ result += strlen("-");
+ u = -*s;
+ }
+ result += buf_inspect_u64_size(&u);
+ return result;
+}
diff --git a/libc3/buf_inspect_s64.h b/libc3/buf_inspect_s64.h
new file mode 100644
index 0000000..43dcde8
--- /dev/null
+++ b/libc3/buf_inspect_s64.h
@@ -0,0 +1,17 @@
+/* c3
+ * Copyright 2022,2023 kmx.io <contact@kmx.io>
+ *
+ * Permission is hereby granted to use this software granted the above
+ * copyright notice and this permission paragraph are included in all
+ * copies and substantial portions of this software.
+ *
+ * THIS SOFTWARE IS PROVIDED "AS-IS" WITHOUT ANY GUARANTEE OF
+ * PURPOSE AND PERFORMANCE. IN NO EVENT WHATSOEVER SHALL THE
+ * AUTHOR BE CONSIDERED LIABLE FOR THE USE AND PERFORMANCE OF
+ * THIS SOFTWARE.
+ */
+/* Gen from buf_inspect_s.h.in BITS=64 bits=64 */
+
+sw buf_inspect_s64 (s_buf *buf, const s64 *s);
+sw buf_inspect_s64_size (const s64 *s);
+
diff --git a/libc3/buf_inspect_s8.c b/libc3/buf_inspect_s8.c
new file mode 100644
index 0000000..e390319
--- /dev/null
+++ b/libc3/buf_inspect_s8.c
@@ -0,0 +1,47 @@
+/* c3
+ * Copyright 2022,2023 kmx.io <contact@kmx.io>
+ *
+ * Permission is hereby granted to use this software granted the above
+ * copyright notice and this permission paragraph are included in all
+ * copies and substantial portions of this software.
+ *
+ * THIS SOFTWARE IS PROVIDED "AS-IS" WITHOUT ANY GUARANTEE OF
+ * PURPOSE AND PERFORMANCE. IN NO EVENT WHATSOEVER SHALL THE
+ * AUTHOR BE CONSIDERED LIABLE FOR THE USE AND PERFORMANCE OF
+ * THIS SOFTWARE.
+ */
+/* Gen from buf_inspect_s.c.in BITS=8 bits=8 */
+#include <string.h>
+#include "buf.h"
+#include "buf_inspect_u8.h"
+
+sw buf_inspect_s8 (s_buf *buf, const s8 *s)
+{
+ sw r;
+ sw result = 0;
+ u8 u;
+ u = *s;
+ if (*s < 0) {
+ if ((r = buf_write_1(buf, "-")) < 0)
+ return r;
+ result += r;
+ u = -*s;
+ }
+ if ((r = buf_inspect_u8 (buf, &u)) < 0)
+ return r;
+ result += r;
+ return result;
+}
+
+sw buf_inspect_s8_size (const s8 *s)
+{
+ sw result = 0;
+ u8 u;
+ u = *s;
+ if (*s < 0) {
+ result += strlen("-");
+ u = -*s;
+ }
+ result += buf_inspect_u8_size(&u);
+ return result;
+}
diff --git a/libc3/buf_inspect_s8.h b/libc3/buf_inspect_s8.h
new file mode 100644
index 0000000..641566a
--- /dev/null
+++ b/libc3/buf_inspect_s8.h
@@ -0,0 +1,17 @@
+/* c3
+ * Copyright 2022,2023 kmx.io <contact@kmx.io>
+ *
+ * Permission is hereby granted to use this software granted the above
+ * copyright notice and this permission paragraph are included in all
+ * copies and substantial portions of this software.
+ *
+ * THIS SOFTWARE IS PROVIDED "AS-IS" WITHOUT ANY GUARANTEE OF
+ * PURPOSE AND PERFORMANCE. IN NO EVENT WHATSOEVER SHALL THE
+ * AUTHOR BE CONSIDERED LIABLE FOR THE USE AND PERFORMANCE OF
+ * THIS SOFTWARE.
+ */
+/* Gen from buf_inspect_s.h.in BITS=8 bits=8 */
+
+sw buf_inspect_s8 (s_buf *buf, const s8 *s);
+sw buf_inspect_s8_size (const s8 *s);
+
diff --git a/libc3/buf_inspect_s_base.c.in b/libc3/buf_inspect_s_base.c.in
new file mode 100644
index 0000000..bb241cf
--- /dev/null
+++ b/libc3/buf_inspect_s_base.c.in
@@ -0,0 +1,44 @@
+/* c3
+ * Copyright 2022,2023 kmx.io <contact@kmx.io>
+ *
+ * Permission is hereby granted to use this software granted the above
+ * copyright notice and this permission paragraph are included in all
+ * copies and substantial portions of this software.
+ *
+ * THIS SOFTWARE IS PROVIDED "AS-IS" WITHOUT ANY GUARANTEE OF
+ * PURPOSE AND PERFORMANCE. IN NO EVENT WHATSOEVER SHALL THE
+ * AUTHOR BE CONSIDERED LIABLE FOR THE USE AND PERFORMANCE OF
+ * THIS SOFTWARE.
+ */
+/* Gen from buf_inspect_s_base.c.in BITS=_BITS$ bits=_bits$ base=_BASE$ */
+
+sw buf_inspect_s_bits$__BASE$ (s_buf *buf, const s_bits$ *s)
+{
+ sw r;
+ sw result = 0;
+ u_bits$ u;
+ u = *s;
+ if (*s < 0) {
+ if ((r = buf_write_1(buf, "-")) < 0)
+ return r;
+ result += r;
+ u = -*s;
+ }
+ if ((r = buf_inspect_u_bits$__BASE$(buf, &u)) < 0)
+ return r;
+ result += r;
+ return result;
+}
+
+sw buf_inspect_s_bits$__BASE$_size (const s_bits$ *s)
+{
+ sw result = 0;
+ u_bits$ u;
+ u = *s;
+ if (*s < 0) {
+ result += strlen("-");
+ u = -*s;
+ }
+ result += buf_inspect_u_bits$__BASE$_size(&u);
+ return result;
+}
diff --git a/libc3/buf_inspect_sw.c b/libc3/buf_inspect_sw.c
new file mode 100644
index 0000000..ab97018
--- /dev/null
+++ b/libc3/buf_inspect_sw.c
@@ -0,0 +1,47 @@
+/* c3
+ * Copyright 2022,2023 kmx.io <contact@kmx.io>
+ *
+ * Permission is hereby granted to use this software granted the above
+ * copyright notice and this permission paragraph are included in all
+ * copies and substantial portions of this software.
+ *
+ * THIS SOFTWARE IS PROVIDED "AS-IS" WITHOUT ANY GUARANTEE OF
+ * PURPOSE AND PERFORMANCE. IN NO EVENT WHATSOEVER SHALL THE
+ * AUTHOR BE CONSIDERED LIABLE FOR THE USE AND PERFORMANCE OF
+ * THIS SOFTWARE.
+ */
+/* Gen from buf_inspect_s.c.in BITS=W bits=w */
+#include <string.h>
+#include "buf.h"
+#include "buf_inspect_uw.h"
+
+sw buf_inspect_sw (s_buf *buf, const sw *s)
+{
+ sw r;
+ sw result = 0;
+ uw u;
+ u = *s;
+ if (*s < 0) {
+ if ((r = buf_write_1(buf, "-")) < 0)
+ return r;
+ result += r;
+ u = -*s;
+ }
+ if ((r = buf_inspect_uw (buf, &u)) < 0)
+ return r;
+ result += r;
+ return result;
+}
+
+sw buf_inspect_sw_size (const sw *s)
+{
+ sw result = 0;
+ uw u;
+ u = *s;
+ if (*s < 0) {
+ result += strlen("-");
+ u = -*s;
+ }
+ result += buf_inspect_uw_size(&u);
+ return result;
+}
diff --git a/libc3/buf_inspect_sw.h b/libc3/buf_inspect_sw.h
new file mode 100644
index 0000000..39c2209
--- /dev/null
+++ b/libc3/buf_inspect_sw.h
@@ -0,0 +1,17 @@
+/* c3
+ * Copyright 2022,2023 kmx.io <contact@kmx.io>
+ *
+ * Permission is hereby granted to use this software granted the above
+ * copyright notice and this permission paragraph are included in all
+ * copies and substantial portions of this software.
+ *
+ * THIS SOFTWARE IS PROVIDED "AS-IS" WITHOUT ANY GUARANTEE OF
+ * PURPOSE AND PERFORMANCE. IN NO EVENT WHATSOEVER SHALL THE
+ * AUTHOR BE CONSIDERED LIABLE FOR THE USE AND PERFORMANCE OF
+ * THIS SOFTWARE.
+ */
+/* Gen from buf_inspect_s.h.in BITS=W bits=w */
+
+sw buf_inspect_sw (s_buf *buf, const sw *s);
+sw buf_inspect_sw_size (const sw *s);
+
diff --git a/libc3/buf_inspect_u.c.in b/libc3/buf_inspect_u.c.in
new file mode 100644
index 0000000..356b153
--- /dev/null
+++ b/libc3/buf_inspect_u.c.in
@@ -0,0 +1,87 @@
+/* c3
+ * Copyright 2022,2023 kmx.io <contact@kmx.io>
+ *
+ * Permission is hereby granted to use this software granted the above
+ * copyright notice and this permission paragraph are included in all
+ * copies and substantial portions of this software.
+ *
+ * THIS SOFTWARE IS PROVIDED "AS-IS" WITHOUT ANY GUARANTEE OF
+ * PURPOSE AND PERFORMANCE. IN NO EVENT WHATSOEVER SHALL THE
+ * AUTHOR BE CONSIDERED LIABLE FOR THE USE AND PERFORMANCE OF
+ * THIS SOFTWARE.
+ */
+/* Gen from buf_inspect_u.c.in BITS=_BITS$ bits=_bits$ */
+#include "c3.h"
+#include "buf_inspect_u_bits$.h"
+
+sw buf_inspect_u_bits$ (s_buf *buf, const u_bits$ *u)
+{
+ return buf_inspect_u_bits$_base(buf, &g_c3_base_decimal, u);
+}
+
+sw buf_inspect_u_bits$_base (s_buf *buf,
+ const s_str *base,
+ const u_bits$ *u)
+{
+ character *c;
+ u8 digit;
+ sw i;
+ sw r;
+ uw radix;
+ s_buf_save save;
+ sw size;
+ character zero;
+ u_bits$ u_;
+ u_ = *u;
+ if (u_ == 0) {
+ if (str_character(base, 0, &zero) < 0)
+ return -1;
+ return buf_write_character_utf8(buf, zero);
+ }
+ size = buf_inspect_u_bits$_base_size(base, u);
+ c = calloc(size, sizeof(character));
+ buf_save_init(buf, &save);
+ radix = base->size;
+ i = 0;
+ while (u_ > 0) {
+ digit = u_ % radix;
+ u_ /= radix;
+ if (str_character(base, digit, c + i) < 0) {
+ r = -1;
+ goto restore;
+ }
+ i++;
+ }
+ while (i--)
+ if ((r = buf_write_character_utf8(buf, c[i])) < 0)
+ goto restore;
+ r = size;
+ goto clean;
+ restore:
+ buf_save_restore_wpos(buf, &save);
+ clean:
+ buf_save_clean(buf, &save);
+ return r;
+}
+
+sw buf_inspect_u_bits$_base_size (const s_str *base,
+ const u_bits$ *u)
+{
+ uw radix;
+ sw size = 0;
+ u_bits$ u_;
+ u_ = *u;
+ if (u_ == 0)
+ return 1;
+ radix = base->size;
+ while (u_ > 0) {
+ u_ /= radix;
+ size++;
+ }
+ return size;
+}
+
+sw buf_inspect_u_bits$_size (const u_bits$ *u)
+{
+ return buf_inspect_u_bits$_base_size(&g_c3_base_decimal, u);
+}
diff --git a/libc3/buf_inspect_u.h.in b/libc3/buf_inspect_u.h.in
new file mode 100644
index 0000000..bc25914
--- /dev/null
+++ b/libc3/buf_inspect_u.h.in
@@ -0,0 +1,21 @@
+/* c3
+ * Copyright 2022,2023 kmx.io <contact@kmx.io>
+ *
+ * Permission is hereby granted to use this software granted the above
+ * copyright notice and this permission paragraph are included in all
+ * copies and substantial portions of this software.
+ *
+ * THIS SOFTWARE IS PROVIDED "AS-IS" WITHOUT ANY GUARANTEE OF
+ * PURPOSE AND PERFORMANCE. IN NO EVENT WHATSOEVER SHALL THE
+ * AUTHOR BE CONSIDERED LIABLE FOR THE USE AND PERFORMANCE OF
+ * THIS SOFTWARE.
+ */
+/* Gen from buf_inspect_u.h.in BITS=_BITS$ bits=_bits$ */
+
+sw buf_inspect_u_bits$ (s_buf *buf, const u_bits$ *u);
+sw buf_inspect_u_bits$_base (s_buf *buf,
+ const s_str *base,
+ const u_bits$ *u);
+sw buf_inspect_u_bits$_base_size (const s_str *base,
+ const u_bits$ *u);
+sw buf_inspect_u_bits$_size (const u_bits$ *u);
diff --git a/libc3/buf_inspect_u16.c b/libc3/buf_inspect_u16.c
new file mode 100644
index 0000000..819e395
--- /dev/null
+++ b/libc3/buf_inspect_u16.c
@@ -0,0 +1,87 @@
+/* c3
+ * Copyright 2022,2023 kmx.io <contact@kmx.io>
+ *
+ * Permission is hereby granted to use this software granted the above
+ * copyright notice and this permission paragraph are included in all
+ * copies and substantial portions of this software.
+ *
+ * THIS SOFTWARE IS PROVIDED "AS-IS" WITHOUT ANY GUARANTEE OF
+ * PURPOSE AND PERFORMANCE. IN NO EVENT WHATSOEVER SHALL THE
+ * AUTHOR BE CONSIDERED LIABLE FOR THE USE AND PERFORMANCE OF
+ * THIS SOFTWARE.
+ */
+/* Gen from buf_inspect_u.c.in BITS=16 bits=16 */
+#include "c3.h"
+#include "buf_inspect_u16.h"
+
+sw buf_inspect_u16 (s_buf *buf, const u16 *u)
+{
+ return buf_inspect_u16_base(buf, &g_c3_base_decimal, u);
+}
+
+sw buf_inspect_u16_base (s_buf *buf,
+ const s_str *base,
+ const u16 *u)
+{
+ character *c;
+ u8 digit;
+ sw i;
+ sw r;
+ uw radix;
+ s_buf_save save;
+ sw size;
+ character zero;
+ u16 u_;
+ u_ = *u;
+ if (u_ == 0) {
+ if (str_character(base, 0, &zero) < 0)
+ return -1;
+ return buf_write_character_utf8(buf, zero);
+ }
+ size = buf_inspect_u16_base_size(base, u);
+ c = calloc(size, sizeof(character));
+ buf_save_init(buf, &save);
+ radix = base->size;
+ i = 0;
+ while (u_ > 0) {
+ digit = u_ % radix;
+ u_ /= radix;
+ if (str_character(base, digit, c + i) < 0) {
+ r = -1;
+ goto restore;
+ }
+ i++;
+ }
+ while (i--)
+ if ((r = buf_write_character_utf8(buf, c[i])) < 0)
+ goto restore;
+ r = size;
+ goto clean;
+ restore:
+ buf_save_restore_wpos(buf, &save);
+ clean:
+ buf_save_clean(buf, &save);
+ return r;
+}
+
+sw buf_inspect_u16_base_size (const s_str *base,
+ const u16 *u)
+{
+ uw radix;
+ sw size = 0;
+ u16 u_;
+ u_ = *u;
+ if (u_ == 0)
+ return 1;
+ radix = base->size;
+ while (u_ > 0) {
+ u_ /= radix;
+ size++;
+ }
+ return size;
+}
+
+sw buf_inspect_u16_size (const u16 *u)
+{
+ return buf_inspect_u16_base_size(&g_c3_base_decimal, u);
+}
diff --git a/libc3/buf_inspect_u16.h b/libc3/buf_inspect_u16.h
new file mode 100644
index 0000000..567dacf
--- /dev/null
+++ b/libc3/buf_inspect_u16.h
@@ -0,0 +1,21 @@
+/* c3
+ * Copyright 2022,2023 kmx.io <contact@kmx.io>
+ *
+ * Permission is hereby granted to use this software granted the above
+ * copyright notice and this permission paragraph are included in all
+ * copies and substantial portions of this software.
+ *
+ * THIS SOFTWARE IS PROVIDED "AS-IS" WITHOUT ANY GUARANTEE OF
+ * PURPOSE AND PERFORMANCE. IN NO EVENT WHATSOEVER SHALL THE
+ * AUTHOR BE CONSIDERED LIABLE FOR THE USE AND PERFORMANCE OF
+ * THIS SOFTWARE.
+ */
+/* Gen from buf_inspect_u.h.in BITS=16 bits=16 */
+
+sw buf_inspect_u16 (s_buf *buf, const u16 *u);
+sw buf_inspect_u16_base (s_buf *buf,
+ const s_str *base,
+ const u16 *u);
+sw buf_inspect_u16_base_size (const s_str *base,
+ const u16 *u);
+sw buf_inspect_u16_size (const u16 *u);
diff --git a/libc3/buf_inspect_u32.c b/libc3/buf_inspect_u32.c
new file mode 100644
index 0000000..35ca7b3
--- /dev/null
+++ b/libc3/buf_inspect_u32.c
@@ -0,0 +1,87 @@
+/* c3
+ * Copyright 2022,2023 kmx.io <contact@kmx.io>
+ *
+ * Permission is hereby granted to use this software granted the above
+ * copyright notice and this permission paragraph are included in all
+ * copies and substantial portions of this software.
+ *
+ * THIS SOFTWARE IS PROVIDED "AS-IS" WITHOUT ANY GUARANTEE OF
+ * PURPOSE AND PERFORMANCE. IN NO EVENT WHATSOEVER SHALL THE
+ * AUTHOR BE CONSIDERED LIABLE FOR THE USE AND PERFORMANCE OF
+ * THIS SOFTWARE.
+ */
+/* Gen from buf_inspect_u.c.in BITS=32 bits=32 */
+#include "c3.h"
+#include "buf_inspect_u32.h"
+
+sw buf_inspect_u32 (s_buf *buf, const u32 *u)
+{
+ return buf_inspect_u32_base(buf, &g_c3_base_decimal, u);
+}
+
+sw buf_inspect_u32_base (s_buf *buf,
+ const s_str *base,
+ const u32 *u)
+{
+ character *c;
+ u8 digit;
+ sw i;
+ sw r;
+ uw radix;
+ s_buf_save save;
+ sw size;
+ character zero;
+ u32 u_;
+ u_ = *u;
+ if (u_ == 0) {
+ if (str_character(base, 0, &zero) < 0)
+ return -1;
+ return buf_write_character_utf8(buf, zero);
+ }
+ size = buf_inspect_u32_base_size(base, u);
+ c = calloc(size, sizeof(character));
+ buf_save_init(buf, &save);
+ radix = base->size;
+ i = 0;
+ while (u_ > 0) {
+ digit = u_ % radix;
+ u_ /= radix;
+ if (str_character(base, digit, c + i) < 0) {
+ r = -1;
+ goto restore;
+ }
+ i++;
+ }
+ while (i--)
+ if ((r = buf_write_character_utf8(buf, c[i])) < 0)
+ goto restore;
+ r = size;
+ goto clean;
+ restore:
+ buf_save_restore_wpos(buf, &save);
+ clean:
+ buf_save_clean(buf, &save);
+ return r;
+}
+
+sw buf_inspect_u32_base_size (const s_str *base,
+ const u32 *u)
+{
+ uw radix;
+ sw size = 0;
+ u32 u_;
+ u_ = *u;
+ if (u_ == 0)
+ return 1;
+ radix = base->size;
+ while (u_ > 0) {
+ u_ /= radix;
+ size++;
+ }
+ return size;
+}
+
+sw buf_inspect_u32_size (const u32 *u)
+{
+ return buf_inspect_u32_base_size(&g_c3_base_decimal, u);
+}
diff --git a/libc3/buf_inspect_u32.h b/libc3/buf_inspect_u32.h
new file mode 100644
index 0000000..8438261
--- /dev/null
+++ b/libc3/buf_inspect_u32.h
@@ -0,0 +1,21 @@
+/* c3
+ * Copyright 2022,2023 kmx.io <contact@kmx.io>
+ *
+ * Permission is hereby granted to use this software granted the above
+ * copyright notice and this permission paragraph are included in all
+ * copies and substantial portions of this software.
+ *
+ * THIS SOFTWARE IS PROVIDED "AS-IS" WITHOUT ANY GUARANTEE OF
+ * PURPOSE AND PERFORMANCE. IN NO EVENT WHATSOEVER SHALL THE
+ * AUTHOR BE CONSIDERED LIABLE FOR THE USE AND PERFORMANCE OF
+ * THIS SOFTWARE.
+ */
+/* Gen from buf_inspect_u.h.in BITS=32 bits=32 */
+
+sw buf_inspect_u32 (s_buf *buf, const u32 *u);
+sw buf_inspect_u32_base (s_buf *buf,
+ const s_str *base,
+ const u32 *u);
+sw buf_inspect_u32_base_size (const s_str *base,
+ const u32 *u);
+sw buf_inspect_u32_size (const u32 *u);
diff --git a/libc3/buf_inspect_u64.c b/libc3/buf_inspect_u64.c
new file mode 100644
index 0000000..6ec11a6
--- /dev/null
+++ b/libc3/buf_inspect_u64.c
@@ -0,0 +1,87 @@
+/* c3
+ * Copyright 2022,2023 kmx.io <contact@kmx.io>
+ *
+ * Permission is hereby granted to use this software granted the above
+ * copyright notice and this permission paragraph are included in all
+ * copies and substantial portions of this software.
+ *
+ * THIS SOFTWARE IS PROVIDED "AS-IS" WITHOUT ANY GUARANTEE OF
+ * PURPOSE AND PERFORMANCE. IN NO EVENT WHATSOEVER SHALL THE
+ * AUTHOR BE CONSIDERED LIABLE FOR THE USE AND PERFORMANCE OF
+ * THIS SOFTWARE.
+ */
+/* Gen from buf_inspect_u.c.in BITS=64 bits=64 */
+#include "c3.h"
+#include "buf_inspect_u64.h"
+
+sw buf_inspect_u64 (s_buf *buf, const u64 *u)
+{
+ return buf_inspect_u64_base(buf, &g_c3_base_decimal, u);
+}
+
+sw buf_inspect_u64_base (s_buf *buf,
+ const s_str *base,
+ const u64 *u)
+{
+ character *c;
+ u8 digit;
+ sw i;
+ sw r;
+ uw radix;
+ s_buf_save save;
+ sw size;
+ character zero;
+ u64 u_;
+ u_ = *u;
+ if (u_ == 0) {
+ if (str_character(base, 0, &zero) < 0)
+ return -1;
+ return buf_write_character_utf8(buf, zero);
+ }
+ size = buf_inspect_u64_base_size(base, u);
+ c = calloc(size, sizeof(character));
+ buf_save_init(buf, &save);
+ radix = base->size;
+ i = 0;
+ while (u_ > 0) {
+ digit = u_ % radix;
+ u_ /= radix;
+ if (str_character(base, digit, c + i) < 0) {
+ r = -1;
+ goto restore;
+ }
+ i++;
+ }
+ while (i--)
+ if ((r = buf_write_character_utf8(buf, c[i])) < 0)
+ goto restore;
+ r = size;
+ goto clean;
+ restore:
+ buf_save_restore_wpos(buf, &save);
+ clean:
+ buf_save_clean(buf, &save);
+ return r;
+}
+
+sw buf_inspect_u64_base_size (const s_str *base,
+ const u64 *u)
+{
+ uw radix;
+ sw size = 0;
+ u64 u_;
+ u_ = *u;
+ if (u_ == 0)
+ return 1;
+ radix = base->size;
+ while (u_ > 0) {
+ u_ /= radix;
+ size++;
+ }
+ return size;
+}
+
+sw buf_inspect_u64_size (const u64 *u)
+{
+ return buf_inspect_u64_base_size(&g_c3_base_decimal, u);
+}
diff --git a/libc3/buf_inspect_u64.h b/libc3/buf_inspect_u64.h
new file mode 100644
index 0000000..df837e3
--- /dev/null
+++ b/libc3/buf_inspect_u64.h
@@ -0,0 +1,21 @@
+/* c3
+ * Copyright 2022,2023 kmx.io <contact@kmx.io>
+ *
+ * Permission is hereby granted to use this software granted the above
+ * copyright notice and this permission paragraph are included in all
+ * copies and substantial portions of this software.
+ *
+ * THIS SOFTWARE IS PROVIDED "AS-IS" WITHOUT ANY GUARANTEE OF
+ * PURPOSE AND PERFORMANCE. IN NO EVENT WHATSOEVER SHALL THE
+ * AUTHOR BE CONSIDERED LIABLE FOR THE USE AND PERFORMANCE OF
+ * THIS SOFTWARE.
+ */
+/* Gen from buf_inspect_u.h.in BITS=64 bits=64 */
+
+sw buf_inspect_u64 (s_buf *buf, const u64 *u);
+sw buf_inspect_u64_base (s_buf *buf,
+ const s_str *base,
+ const u64 *u);
+sw buf_inspect_u64_base_size (const s_str *base,
+ const u64 *u);
+sw buf_inspect_u64_size (const u64 *u);
diff --git a/libc3/buf_inspect_u8.c b/libc3/buf_inspect_u8.c
new file mode 100644
index 0000000..1377f0a
--- /dev/null
+++ b/libc3/buf_inspect_u8.c
@@ -0,0 +1,87 @@
+/* c3
+ * Copyright 2022,2023 kmx.io <contact@kmx.io>
+ *
+ * Permission is hereby granted to use this software granted the above
+ * copyright notice and this permission paragraph are included in all
+ * copies and substantial portions of this software.
+ *
+ * THIS SOFTWARE IS PROVIDED "AS-IS" WITHOUT ANY GUARANTEE OF
+ * PURPOSE AND PERFORMANCE. IN NO EVENT WHATSOEVER SHALL THE
+ * AUTHOR BE CONSIDERED LIABLE FOR THE USE AND PERFORMANCE OF
+ * THIS SOFTWARE.
+ */
+/* Gen from buf_inspect_u.c.in BITS=8 bits=8 */
+#include "c3.h"
+#include "buf_inspect_u8.h"
+
+sw buf_inspect_u8 (s_buf *buf, const u8 *u)
+{
+ return buf_inspect_u8_base(buf, &g_c3_base_decimal, u);
+}
+
+sw buf_inspect_u8_base (s_buf *buf,
+ const s_str *base,
+ const u8 *u)
+{
+ character *c;
+ u8 digit;
+ sw i;
+ sw r;
+ uw radix;
+ s_buf_save save;
+ sw size;
+ character zero;
+ u8 u_;
+ u_ = *u;
+ if (u_ == 0) {
+ if (str_character(base, 0, &zero) < 0)
+ return -1;
+ return buf_write_character_utf8(buf, zero);
+ }
+ size = buf_inspect_u8_base_size(base, u);
+ c = calloc(size, sizeof(character));
+ buf_save_init(buf, &save);
+ radix = base->size;
+ i = 0;
+ while (u_ > 0) {
+ digit = u_ % radix;
+ u_ /= radix;
+ if (str_character(base, digit, c + i) < 0) {
+ r = -1;
+ goto restore;
+ }
+ i++;
+ }
+ while (i--)
+ if ((r = buf_write_character_utf8(buf, c[i])) < 0)
+ goto restore;
+ r = size;
+ goto clean;
+ restore:
+ buf_save_restore_wpos(buf, &save);
+ clean:
+ buf_save_clean(buf, &save);
+ return r;
+}
+
+sw buf_inspect_u8_base_size (const s_str *base,
+ const u8 *u)
+{
+ uw radix;
+ sw size = 0;
+ u8 u_;
+ u_ = *u;
+ if (u_ == 0)
+ return 1;
+ radix = base->size;
+ while (u_ > 0) {
+ u_ /= radix;
+ size++;
+ }
+ return size;
+}
+
+sw buf_inspect_u8_size (const u8 *u)
+{
+ return buf_inspect_u8_base_size(&g_c3_base_decimal, u);
+}
diff --git a/libc3/buf_inspect_u8.h b/libc3/buf_inspect_u8.h
new file mode 100644
index 0000000..cc13eb4
--- /dev/null
+++ b/libc3/buf_inspect_u8.h
@@ -0,0 +1,21 @@
+/* c3
+ * Copyright 2022,2023 kmx.io <contact@kmx.io>
+ *
+ * Permission is hereby granted to use this software granted the above
+ * copyright notice and this permission paragraph are included in all
+ * copies and substantial portions of this software.
+ *
+ * THIS SOFTWARE IS PROVIDED "AS-IS" WITHOUT ANY GUARANTEE OF
+ * PURPOSE AND PERFORMANCE. IN NO EVENT WHATSOEVER SHALL THE
+ * AUTHOR BE CONSIDERED LIABLE FOR THE USE AND PERFORMANCE OF
+ * THIS SOFTWARE.
+ */
+/* Gen from buf_inspect_u.h.in BITS=8 bits=8 */
+
+sw buf_inspect_u8 (s_buf *buf, const u8 *u);
+sw buf_inspect_u8_base (s_buf *buf,
+ const s_str *base,
+ const u8 *u);
+sw buf_inspect_u8_base_size (const s_str *base,
+ const u8 *u);
+sw buf_inspect_u8_size (const u8 *u);
diff --git a/libc3/buf_inspect_u_base.c.in b/libc3/buf_inspect_u_base.c.in
new file mode 100644
index 0000000..40d2c68
--- /dev/null
+++ b/libc3/buf_inspect_u_base.c.in
@@ -0,0 +1,24 @@
+/* c3
+ * Copyright 2022,2023 kmx.io <contact@kmx.io>
+ *
+ * Permission is hereby granted to use this software granted the above
+ * copyright notice and this permission paragraph are included in all
+ * copies and substantial portions of this software.
+ *
+ * THIS SOFTWARE IS PROVIDED "AS-IS" WITHOUT ANY GUARANTEE OF
+ * PURPOSE AND PERFORMANCE. IN NO EVENT WHATSOEVER SHALL THE
+ * AUTHOR BE CONSIDERED LIABLE FOR THE USE AND PERFORMANCE OF
+ * THIS SOFTWARE.
+ */
+/* Gen from buf_inspect_u_base.c.in BITS=_BITS$ bits=_bits$ BASE=_BASE$ */
+
+sw buf_inspect_u_bits$__BASE$ (s_buf *buf, const u_bits$ *u)
+{
+ return buf_inspect_u_bits$_base(buf, &g_c3_base__BASE$, u);
+}
+
+sw buf_inspect_u_bits$__BASE$_size (const u_bits$ *u)
+{
+ return buf_inspect_u_bits$_base_size(&g_c3_base__BASE$,
+ u);
+}
diff --git a/libc3/buf_inspect_uw.c b/libc3/buf_inspect_uw.c
new file mode 100644
index 0000000..67d2829
--- /dev/null
+++ b/libc3/buf_inspect_uw.c
@@ -0,0 +1,87 @@
+/* c3
+ * Copyright 2022,2023 kmx.io <contact@kmx.io>
+ *
+ * Permission is hereby granted to use this software granted the above
+ * copyright notice and this permission paragraph are included in all
+ * copies and substantial portions of this software.
+ *
+ * THIS SOFTWARE IS PROVIDED "AS-IS" WITHOUT ANY GUARANTEE OF
+ * PURPOSE AND PERFORMANCE. IN NO EVENT WHATSOEVER SHALL THE
+ * AUTHOR BE CONSIDERED LIABLE FOR THE USE AND PERFORMANCE OF
+ * THIS SOFTWARE.
+ */
+/* Gen from buf_inspect_u.c.in BITS=W bits=w */
+#include "c3.h"
+#include "buf_inspect_uw.h"
+
+sw buf_inspect_uw (s_buf *buf, const uw *u)
+{
+ return buf_inspect_uw_base(buf, &g_c3_base_decimal, u);
+}
+
+sw buf_inspect_uw_base (s_buf *buf,
+ const s_str *base,
+ const uw *u)
+{
+ character *c;
+ u8 digit;
+ sw i;
+ sw r;
+ uw radix;
+ s_buf_save save;
+ sw size;
+ character zero;
+ uw u_;
+ u_ = *u;
+ if (u_ == 0) {
+ if (str_character(base, 0, &zero) < 0)
+ return -1;
+ return buf_write_character_utf8(buf, zero);
+ }
+ size = buf_inspect_uw_base_size(base, u);
+ c = calloc(size, sizeof(character));
+ buf_save_init(buf, &save);
+ radix = base->size;
+ i = 0;
+ while (u_ > 0) {
+ digit = u_ % radix;
+ u_ /= radix;
+ if (str_character(base, digit, c + i) < 0) {
+ r = -1;
+ goto restore;
+ }
+ i++;
+ }
+ while (i--)
+ if ((r = buf_write_character_utf8(buf, c[i])) < 0)
+ goto restore;
+ r = size;
+ goto clean;
+ restore:
+ buf_save_restore_wpos(buf, &save);
+ clean:
+ buf_save_clean(buf, &save);
+ return r;
+}
+
+sw buf_inspect_uw_base_size (const s_str *base,
+ const uw *u)
+{
+ uw radix;
+ sw size = 0;
+ uw u_;
+ u_ = *u;
+ if (u_ == 0)
+ return 1;
+ radix = base->size;
+ while (u_ > 0) {
+ u_ /= radix;
+ size++;
+ }
+ return size;
+}
+
+sw buf_inspect_uw_size (const uw *u)
+{
+ return buf_inspect_uw_base_size(&g_c3_base_decimal, u);
+}
diff --git a/libc3/buf_inspect_uw.h b/libc3/buf_inspect_uw.h
new file mode 100644
index 0000000..94a9906
--- /dev/null
+++ b/libc3/buf_inspect_uw.h
@@ -0,0 +1,21 @@
+/* c3
+ * Copyright 2022,2023 kmx.io <contact@kmx.io>
+ *
+ * Permission is hereby granted to use this software granted the above
+ * copyright notice and this permission paragraph are included in all
+ * copies and substantial portions of this software.
+ *
+ * THIS SOFTWARE IS PROVIDED "AS-IS" WITHOUT ANY GUARANTEE OF
+ * PURPOSE AND PERFORMANCE. IN NO EVENT WHATSOEVER SHALL THE
+ * AUTHOR BE CONSIDERED LIABLE FOR THE USE AND PERFORMANCE OF
+ * THIS SOFTWARE.
+ */
+/* Gen from buf_inspect_u.h.in BITS=W bits=w */
+
+sw buf_inspect_uw (s_buf *buf, const uw *u);
+sw buf_inspect_uw_base (s_buf *buf,
+ const s_str *base,
+ const uw *u);
+sw buf_inspect_uw_base_size (const s_str *base,
+ const uw *u);
+sw buf_inspect_uw_size (const uw *u);
diff --git a/libc3/c3.h b/libc3/c3.h
index 70ddf8d..fedfb7b 100644
--- a/libc3/c3.h
+++ b/libc3/c3.h
@@ -19,7 +19,28 @@
#include "buf.h"
#include "buf_file.h"
#include "buf_inspect.h"
+#include "buf_inspect_s8.h"
+#include "buf_inspect_s16.h"
+#include "buf_inspect_s32.h"
+#include "buf_inspect_s64.h"
+#include "buf_inspect_sw.h"
+#include "buf_inspect_u8.h"
+#include "buf_inspect_u16.h"
+#include "buf_inspect_u32.h"
+#include "buf_inspect_u64.h"
+#include "buf_inspect_uw.h"
#include "buf_parse.h"
+#include "buf_parse.h"
+#include "buf_parse_s8.h"
+#include "buf_parse_s16.h"
+#include "buf_parse_s32.h"
+#include "buf_parse_s64.h"
+#include "buf_parse_sw.h"
+#include "buf_parse_u8.h"
+#include "buf_parse_u16.h"
+#include "buf_parse_u32.h"
+#include "buf_parse_u64.h"
+#include "buf_parse_uw.h"
#include "buf_save.h"
#include "call.h"
#include "ceiling.h"
diff --git a/libc3/gen.mk b/libc3/gen.mk
index 4854cef..25e256d 100644
--- a/libc3/gen.mk
+++ b/libc3/gen.mk
@@ -11,6 +11,16 @@
## THIS SOFTWARE.
GENERATED_FILES = \
+ buf_inspect_s8.c buf_inspect_s8.h \
+ buf_inspect_s16.c buf_inspect_s16.h \
+ buf_inspect_s32.c buf_inspect_s32.h \
+ buf_inspect_s64.c buf_inspect_s64.h \
+ buf_inspect_sw.c buf_inspect_sw.h \
+ buf_inspect_u8.c buf_inspect_u8.h \
+ buf_inspect_u16.c buf_inspect_u16.h \
+ buf_inspect_u32.c buf_inspect_u32.h \
+ buf_inspect_u64.c buf_inspect_u64.h \
+ buf_inspect_uw.c buf_inspect_uw.h \
buf_parse_s8.c buf_parse_s8.h \
buf_parse_s16.c buf_parse_s16.h \
buf_parse_s32.c buf_parse_s32.h \
@@ -36,6 +46,18 @@ SED_BITS_8 = sed \
-e 's/_BITS[$$]/8/g' \
-e 's/_bits[$$]/8/g'
+buf_inspect_s8.c: buf_inspect_s.c.in gen.mk
+ ${SED_BITS_8} < buf_inspect_s.c.in > buf_inspect_s8.c
+
+buf_inspect_s8.h: buf_inspect_s.h.in gen.mk
+ ${SED_BITS_8} < buf_inspect_s.h.in > buf_inspect_s8.h
+
+buf_inspect_u8.c: buf_inspect_u.c.in gen.mk
+ ${SED_BITS_8} < buf_inspect_u.c.in > buf_inspect_u8.c
+
+buf_inspect_u8.h: buf_inspect_u.h.in gen.mk
+ ${SED_BITS_8} < buf_inspect_u.h.in > buf_inspect_u8.h
+
buf_parse_s8.c: buf_parse_s.c.in gen.mk
${SED_BITS_8} < buf_parse_s.c.in > buf_parse_s8.c
@@ -52,6 +74,18 @@ SED_BITS_16 = sed \
-e 's/_BITS[$$]/16/g' \
-e 's/_bits[$$]/16/g'
+buf_inspect_s16.c: buf_inspect_s.c.in gen.mk
+ ${SED_BITS_16} < buf_inspect_s.c.in > buf_inspect_s16.c
+
+buf_inspect_s16.h: buf_inspect_s.h.in gen.mk
+ ${SED_BITS_16} < buf_inspect_s.h.in > buf_inspect_s16.h
+
+buf_inspect_u16.c: buf_inspect_u.c.in gen.mk
+ ${SED_BITS_16} < buf_inspect_u.c.in > buf_inspect_u16.c
+
+buf_inspect_u16.h: buf_inspect_u.h.in gen.mk
+ ${SED_BITS_16} < buf_inspect_u.h.in > buf_inspect_u16.h
+
buf_parse_s16.c: buf_parse_s.c.in gen.mk
${SED_BITS_16} < buf_parse_s.c.in > buf_parse_s16.c
@@ -68,6 +102,18 @@ SED_BITS_32 = sed \
-e 's/_BITS[$$]/32/g' \
-e 's/_bits[$$]/32/g'
+buf_inspect_s32.c: buf_inspect_s.c.in gen.mk
+ ${SED_BITS_32} < buf_inspect_s.c.in > buf_inspect_s32.c
+
+buf_inspect_s32.h: buf_inspect_s.h.in gen.mk
+ ${SED_BITS_32} < buf_inspect_s.h.in > buf_inspect_s32.h
+
+buf_inspect_u32.c: buf_inspect_u.c.in gen.mk
+ ${SED_BITS_32} < buf_inspect_u.c.in > buf_inspect_u32.c
+
+buf_inspect_u32.h: buf_inspect_u.h.in gen.mk
+ ${SED_BITS_32} < buf_inspect_u.h.in > buf_inspect_u32.h
+
buf_parse_s32.c: buf_parse_s.c.in gen.mk
${SED_BITS_32} < buf_parse_s.c.in > buf_parse_s32.c
@@ -84,6 +130,18 @@ SED_BITS_64 = sed \
-e 's/_BITS[$$]/64/g' \
-e 's/_bits[$$]/64/g'
+buf_inspect_s64.c: buf_inspect_s.c.in gen.mk
+ ${SED_BITS_64} < buf_inspect_s.c.in > buf_inspect_s64.c
+
+buf_inspect_s64.h: buf_inspect_s.h.in gen.mk
+ ${SED_BITS_64} < buf_inspect_s.h.in > buf_inspect_s64.h
+
+buf_inspect_u64.c: buf_inspect_u.c.in gen.mk
+ ${SED_BITS_64} < buf_inspect_u.c.in > buf_inspect_u64.c
+
+buf_inspect_u64.h: buf_inspect_u.h.in gen.mk
+ ${SED_BITS_64} < buf_inspect_u.h.in > buf_inspect_u64.h
+
buf_parse_s64.c: buf_parse_s.c.in gen.mk
${SED_BITS_64} < buf_parse_s.c.in > buf_parse_s64.c
@@ -100,6 +158,18 @@ SED_BITS_W = sed \
-e 's/_BITS[$$]/W/g' \
-e 's/_bits[$$]/w/g'
+buf_inspect_sw.c: buf_inspect_s.c.in gen.mk
+ ${SED_BITS_W} < buf_inspect_s.c.in > buf_inspect_sw.c
+
+buf_inspect_sw.h: buf_inspect_s.h.in gen.mk
+ ${SED_BITS_W} < buf_inspect_s.h.in > buf_inspect_sw.h
+
+buf_inspect_uw.c: buf_inspect_u.c.in gen.mk
+ ${SED_BITS_W} < buf_inspect_u.c.in > buf_inspect_uw.c
+
+buf_inspect_uw.h: buf_inspect_u.h.in gen.mk
+ ${SED_BITS_W} < buf_inspect_u.h.in > buf_inspect_uw.h
+
buf_parse_sw.c: buf_parse_s.c.in gen.mk
${SED_BITS_W} < buf_parse_s.c.in > buf_parse_sw.c
diff --git a/libc3/sources.mk b/libc3/sources.mk
index 0a1986d..062df41 100644
--- a/libc3/sources.mk
+++ b/libc3/sources.mk
@@ -8,6 +8,16 @@ HEADERS = \
buf.h \
buf_file.h \
buf_inspect.h \
+ buf_inspect_s16.h \
+ buf_inspect_s32.h \
+ buf_inspect_s64.h \
+ buf_inspect_s8.h \
+ buf_inspect_sw.h \
+ buf_inspect_u16.h \
+ buf_inspect_u32.h \
+ buf_inspect_u64.h \
+ buf_inspect_u8.h \
+ buf_inspect_uw.h \
buf_parse.h \
buf_parse_c.h \
buf_parse_s16.h \
@@ -79,6 +89,16 @@ SOURCES = \
buf.c \
buf_file.c \
buf_inspect.c \
+ buf_inspect_s16.c \
+ buf_inspect_s32.c \
+ buf_inspect_s64.c \
+ buf_inspect_s8.c \
+ buf_inspect_sw.c \
+ buf_inspect_u16.c \
+ buf_inspect_u32.c \
+ buf_inspect_u64.c \
+ buf_inspect_u8.c \
+ buf_inspect_uw.c \
buf_parse.c \
buf_parse_c.c \
buf_parse_s16.c \
@@ -145,6 +165,16 @@ LO_SOURCES = \
buf.c \
buf_file.c \
buf_inspect.c \
+ buf_inspect_s16.c \
+ buf_inspect_s32.c \
+ buf_inspect_s64.c \
+ buf_inspect_s8.c \
+ buf_inspect_sw.c \
+ buf_inspect_u16.c \
+ buf_inspect_u32.c \
+ buf_inspect_u64.c \
+ buf_inspect_u8.c \
+ buf_inspect_uw.c \
buf_parse.c \
buf_parse_c.c \
buf_parse_s16.c \
diff --git a/libc3/sources.sh b/libc3/sources.sh
index 00c157a..cf90cb9 100644
--- a/libc3/sources.sh
+++ b/libc3/sources.sh
@@ -1,4 +1,4 @@
# sources.sh generated by update_sources
-HEADERS='abs.h arg.h array.h binding.h bool.h buf.h buf_file.h buf_inspect.h buf_parse.h buf_parse_c.h buf_parse_s16.h buf_parse_s32.h buf_parse_s64.h buf_parse_s8.h buf_parse_sw.h buf_parse_u16.h buf_parse_u32.h buf_parse_u64.h buf_parse_u8.h buf_parse_uw.h buf_save.h c3.h c_types.h call.h ceiling.h cfn.h character.h compare.h config.h env.h error.h error_handler.h eval.h fact.h facts.h facts_cursor.h facts_spec.h facts_spec_cursor.h facts_with.h facts_with_cursor.h float.h fn.h frame.h hash.h ident.h integer.h io.h list.h log.h module.h operator.h quote.h set__fact.h set__tag.h set_cursor__fact.h set_cursor__tag.h set_item__fact.h set_item__tag.h sha1.h sign.h skiplist__fact.h skiplist_node__fact.h str.h sym.h tag.h tuple.h type.h types.h ucd.h '
-SOURCES='abs.c arg.c array.c binding.c bool.c buf.c buf_file.c buf_inspect.c buf_parse.c buf_parse_c.c buf_parse_s16.c buf_parse_s32.c buf_parse_s64.c buf_parse_s8.c buf_parse_sw.c buf_parse_u16.c buf_parse_u32.c buf_parse_u64.c buf_parse_u8.c buf_parse_uw.c buf_save.c c3.c call.c ceiling.c cfn.c character.c compare.c env.c error.c error_handler.c eval.c fact.c facts.c facts_cursor.c facts_spec.c facts_spec_cursor.c facts_with.c facts_with_cursor.c fn.c frame.c hash.c ident.c integer.c io.c list.c log.c module.c operator.c quote.c set__fact.c set__tag.c set_cursor__fact.c set_cursor__tag.c set_item__fact.c set_item__tag.c sign.c skiplist__fact.c skiplist_node__fact.c str.c sym.c tag.c tuple.c type.c ucd.c '
-LO_SOURCES='abs.c arg.c array.c binding.c bool.c buf.c buf_file.c buf_inspect.c buf_parse.c buf_parse_c.c buf_parse_s16.c buf_parse_s32.c buf_parse_s64.c buf_parse_s8.c buf_parse_sw.c buf_parse_u16.c buf_parse_u32.c buf_parse_u64.c buf_parse_u8.c buf_parse_uw.c buf_save.c c3.c call.c ceiling.c cfn.c character.c compare.c env.c error.c error_handler.c eval.c fact.c facts.c facts_cursor.c facts_spec.c facts_spec_cursor.c facts_with.c facts_with_cursor.c fn.c frame.c hash.c ident.c integer.c io.c list.c log.c module.c operator.c quote.c set__fact.c set__tag.c set_cursor__fact.c set_cursor__tag.c set_item__fact.c set_item__tag.c sign.c skiplist__fact.c skiplist_node__fact.c str.c sym.c tag.c tuple.c type.c ucd.c ../libtommath/bn_cutoffs.c ../libtommath/bn_mp_2expt.c ../libtommath/bn_mp_abs.c ../libtommath/bn_mp_add.c ../libtommath/bn_mp_add_d.c ../libtommath/bn_mp_and.c ../libtommath/bn_mp_clamp.c ../libtommath/bn_mp_clear.c ../libtommath/bn_mp_clear_multi.c ../libtommath/bn_mp_cmp.c ../libtommath/bn_mp_cmp_d.c ../libtommath/bn_mp_cmp_mag.c ../libtommath/bn_mp_cnt_lsb.c ../libtommath/bn_mp_complement.c ../libtommath/bn_mp_copy.c ../libtommath/bn_mp_count_bits.c ../libtommath/bn_mp_div.c ../libtommath/bn_mp_div_2.c ../libtommath/bn_mp_div_2d.c ../libtommath/bn_mp_div_3.c ../libtommath/bn_mp_div_d.c ../libtommath/bn_mp_dr_is_modulus.c ../libtommath/bn_mp_dr_reduce.c ../libtommath/bn_mp_dr_setup.c ../libtommath/bn_mp_error_to_string.c ../libtommath/bn_mp_exch.c ../libtommath/bn_mp_exptmod.c ../libtommath/bn_mp_gcd.c ../libtommath/bn_mp_get_i32.c ../libtommath/bn_mp_get_i64.c ../libtommath/bn_mp_get_mag_u32.c ../libtommath/bn_mp_get_mag_u64.c ../libtommath/bn_mp_grow.c ../libtommath/bn_mp_init.c ../libtommath/bn_mp_init_copy.c ../libtommath/bn_mp_init_multi.c ../libtommath/bn_mp_init_size.c ../libtommath/bn_mp_invmod.c ../libtommath/bn_mp_lcm.c ../libtommath/bn_mp_lshd.c ../libtommath/bn_mp_mod.c ../libtommath/bn_mp_mod_2d.c ../libtommath/bn_mp_montgomery_calc_normalization.c ../libtommath/bn_mp_montgomery_reduce.c ../libtommath/bn_mp_montgomery_setup.c ../libtommath/bn_mp_mul.c ../libtommath/bn_mp_mul_2.c ../libtommath/bn_mp_mul_2d.c ../libtommath/bn_mp_mul_d.c ../libtommath/bn_mp_mulmod.c ../libtommath/bn_mp_neg.c ../libtommath/bn_mp_or.c ../libtommath/bn_mp_radix_size.c ../libtommath/bn_mp_reduce.c ../libtommath/bn_mp_reduce_2k.c ../libtommath/bn_mp_reduce_2k_l.c ../libtommath/bn_mp_reduce_2k_setup.c ../libtommath/bn_mp_reduce_2k_setup_l.c ../libtommath/bn_mp_reduce_is_2k.c ../libtommath/bn_mp_reduce_is_2k_l.c ../libtommath/bn_mp_reduce_setup.c ../libtommath/bn_mp_rshd.c ../libtommath/bn_mp_set.c ../libtommath/bn_mp_sqr.c ../libtommath/bn_mp_sqrt.c ../libtommath/bn_mp_sub.c ../libtommath/bn_mp_sub_d.c ../libtommath/bn_mp_xor.c ../libtommath/bn_mp_zero.c ../libtommath/bn_s_mp_add.c ../libtommath/bn_s_mp_balance_mul.c ../libtommath/bn_s_mp_exptmod.c ../libtommath/bn_s_mp_exptmod_fast.c ../libtommath/bn_s_mp_invmod_fast.c ../libtommath/bn_s_mp_invmod_slow.c ../libtommath/bn_s_mp_karatsuba_mul.c ../libtommath/bn_s_mp_karatsuba_sqr.c ../libtommath/bn_s_mp_montgomery_reduce_fast.c ../libtommath/bn_s_mp_mul_digs.c ../libtommath/bn_s_mp_mul_digs_fast.c ../libtommath/bn_s_mp_mul_high_digs.c ../libtommath/bn_s_mp_mul_high_digs_fast.c ../libtommath/bn_s_mp_rand_platform.c ../libtommath/bn_s_mp_sqr.c ../libtommath/bn_s_mp_sqr_fast.c ../libtommath/bn_s_mp_sub.c ../libtommath/bn_s_mp_toom_mul.c ../libtommath/bn_s_mp_toom_sqr.c '
+HEADERS='abs.h arg.h array.h binding.h bool.h buf.h buf_file.h buf_inspect.h buf_inspect_s16.h buf_inspect_s32.h buf_inspect_s64.h buf_inspect_s8.h buf_inspect_sw.h buf_inspect_u16.h buf_inspect_u32.h buf_inspect_u64.h buf_inspect_u8.h buf_inspect_uw.h buf_parse.h buf_parse_c.h buf_parse_s16.h buf_parse_s32.h buf_parse_s64.h buf_parse_s8.h buf_parse_sw.h buf_parse_u16.h buf_parse_u32.h buf_parse_u64.h buf_parse_u8.h buf_parse_uw.h buf_save.h c3.h c_types.h call.h ceiling.h cfn.h character.h compare.h config.h env.h error.h error_handler.h eval.h fact.h facts.h facts_cursor.h facts_spec.h facts_spec_cursor.h facts_with.h facts_with_cursor.h float.h fn.h frame.h hash.h ident.h integer.h io.h list.h log.h module.h operator.h quote.h set__fact.h set__tag.h set_cursor__fact.h set_cursor__tag.h set_item__fact.h set_item__tag.h sha1.h sign.h skiplist__fact.h skiplist_node__fact.h str.h sym.h tag.h tuple.h type.h types.h ucd.h '
+SOURCES='abs.c arg.c array.c binding.c bool.c buf.c buf_file.c buf_inspect.c buf_inspect_s16.c buf_inspect_s32.c buf_inspect_s64.c buf_inspect_s8.c buf_inspect_sw.c buf_inspect_u16.c buf_inspect_u32.c buf_inspect_u64.c buf_inspect_u8.c buf_inspect_uw.c buf_parse.c buf_parse_c.c buf_parse_s16.c buf_parse_s32.c buf_parse_s64.c buf_parse_s8.c buf_parse_sw.c buf_parse_u16.c buf_parse_u32.c buf_parse_u64.c buf_parse_u8.c buf_parse_uw.c buf_save.c c3.c call.c ceiling.c cfn.c character.c compare.c env.c error.c error_handler.c eval.c fact.c facts.c facts_cursor.c facts_spec.c facts_spec_cursor.c facts_with.c facts_with_cursor.c fn.c frame.c hash.c ident.c integer.c io.c list.c log.c module.c operator.c quote.c set__fact.c set__tag.c set_cursor__fact.c set_cursor__tag.c set_item__fact.c set_item__tag.c sign.c skiplist__fact.c skiplist_node__fact.c str.c sym.c tag.c tuple.c type.c ucd.c '
+LO_SOURCES='abs.c arg.c array.c binding.c bool.c buf.c buf_file.c buf_inspect.c buf_inspect_s16.c buf_inspect_s32.c buf_inspect_s64.c buf_inspect_s8.c buf_inspect_sw.c buf_inspect_u16.c buf_inspect_u32.c buf_inspect_u64.c buf_inspect_u8.c buf_inspect_uw.c buf_parse.c buf_parse_c.c buf_parse_s16.c buf_parse_s32.c buf_parse_s64.c buf_parse_s8.c buf_parse_sw.c buf_parse_u16.c buf_parse_u32.c buf_parse_u64.c buf_parse_u8.c buf_parse_uw.c buf_save.c c3.c call.c ceiling.c cfn.c character.c compare.c env.c error.c error_handler.c eval.c fact.c facts.c facts_cursor.c facts_spec.c facts_spec_cursor.c facts_with.c facts_with_cursor.c fn.c frame.c hash.c ident.c integer.c io.c list.c log.c module.c operator.c quote.c set__fact.c set__tag.c set_cursor__fact.c set_cursor__tag.c set_item__fact.c set_item__tag.c sign.c skiplist__fact.c skiplist_node__fact.c str.c sym.c tag.c tuple.c type.c ucd.c ../libtommath/bn_cutoffs.c ../libtommath/bn_mp_2expt.c ../libtommath/bn_mp_abs.c ../libtommath/bn_mp_add.c ../libtommath/bn_mp_add_d.c ../libtommath/bn_mp_and.c ../libtommath/bn_mp_clamp.c ../libtommath/bn_mp_clear.c ../libtommath/bn_mp_clear_multi.c ../libtommath/bn_mp_cmp.c ../libtommath/bn_mp_cmp_d.c ../libtommath/bn_mp_cmp_mag.c ../libtommath/bn_mp_cnt_lsb.c ../libtommath/bn_mp_complement.c ../libtommath/bn_mp_copy.c ../libtommath/bn_mp_count_bits.c ../libtommath/bn_mp_div.c ../libtommath/bn_mp_div_2.c ../libtommath/bn_mp_div_2d.c ../libtommath/bn_mp_div_3.c ../libtommath/bn_mp_div_d.c ../libtommath/bn_mp_dr_is_modulus.c ../libtommath/bn_mp_dr_reduce.c ../libtommath/bn_mp_dr_setup.c ../libtommath/bn_mp_error_to_string.c ../libtommath/bn_mp_exch.c ../libtommath/bn_mp_exptmod.c ../libtommath/bn_mp_gcd.c ../libtommath/bn_mp_get_i32.c ../libtommath/bn_mp_get_i64.c ../libtommath/bn_mp_get_mag_u32.c ../libtommath/bn_mp_get_mag_u64.c ../libtommath/bn_mp_grow.c ../libtommath/bn_mp_init.c ../libtommath/bn_mp_init_copy.c ../libtommath/bn_mp_init_multi.c ../libtommath/bn_mp_init_size.c ../libtommath/bn_mp_invmod.c ../libtommath/bn_mp_lcm.c ../libtommath/bn_mp_lshd.c ../libtommath/bn_mp_mod.c ../libtommath/bn_mp_mod_2d.c ../libtommath/bn_mp_montgomery_calc_normalization.c ../libtommath/bn_mp_montgomery_reduce.c ../libtommath/bn_mp_montgomery_setup.c ../libtommath/bn_mp_mul.c ../libtommath/bn_mp_mul_2.c ../libtommath/bn_mp_mul_2d.c ../libtommath/bn_mp_mul_d.c ../libtommath/bn_mp_mulmod.c ../libtommath/bn_mp_neg.c ../libtommath/bn_mp_or.c ../libtommath/bn_mp_radix_size.c ../libtommath/bn_mp_reduce.c ../libtommath/bn_mp_reduce_2k.c ../libtommath/bn_mp_reduce_2k_l.c ../libtommath/bn_mp_reduce_2k_setup.c ../libtommath/bn_mp_reduce_2k_setup_l.c ../libtommath/bn_mp_reduce_is_2k.c ../libtommath/bn_mp_reduce_is_2k_l.c ../libtommath/bn_mp_reduce_setup.c ../libtommath/bn_mp_rshd.c ../libtommath/bn_mp_set.c ../libtommath/bn_mp_sqr.c ../libtommath/bn_mp_sqrt.c ../libtommath/bn_mp_sub.c ../libtommath/bn_mp_sub_d.c ../libtommath/bn_mp_xor.c ../libtommath/bn_mp_zero.c ../libtommath/bn_s_mp_add.c ../libtommath/bn_s_mp_balance_mul.c ../libtommath/bn_s_mp_exptmod.c ../libtommath/bn_s_mp_exptmod_fast.c ../libtommath/bn_s_mp_invmod_fast.c ../libtommath/bn_s_mp_invmod_slow.c ../libtommath/bn_s_mp_karatsuba_mul.c ../libtommath/bn_s_mp_karatsuba_sqr.c ../libtommath/bn_s_mp_montgomery_reduce_fast.c ../libtommath/bn_s_mp_mul_digs.c ../libtommath/bn_s_mp_mul_digs_fast.c ../libtommath/bn_s_mp_mul_high_digs.c ../libtommath/bn_s_mp_mul_high_digs_fast.c ../libtommath/bn_s_mp_rand_platform.c ../libtommath/bn_s_mp_sqr.c ../libtommath/bn_s_mp_sqr_fast.c ../libtommath/bn_s_mp_sub.c ../libtommath/bn_s_mp_toom_mul.c ../libtommath/bn_s_mp_toom_sqr.c '
diff --git a/sources.mk b/sources.mk
index 37cb690..66537f3 100644
--- a/sources.mk
+++ b/sources.mk
@@ -34,13 +34,9 @@ C3_C_SOURCES = \
ic3/linenoise.c \
libc3/arg.c \
libc3/arg.h \
- libc3/skiplist__fact.c \
- libc3/skiplist__fact.h \
- libc3/skiplist_node__fact.c \
- libc3/skiplist_node__fact.h \
+ libc3/facts.c \
libc3/binding.c \
libc3/binding.h \
- libc3/facts.c \
libc3/facts_with_cursor.c \
libc3/array.c \
libc3/array.h \
@@ -49,11 +45,13 @@ C3_C_SOURCES = \
libc3/integer.h \
libc3/types.h \
libc3/type.c \
- libc3/set__fact.c \
- libc3/set__fact.h \
- libc3/set__tag.c \
- libc3/set__tag.h \
- libc3/set_cursor__fact.c \
+ libc3/buf_parse_s8.c \
+ libc3/buf_parse_s8.h \
+ libc3/buf_parse_s16.c \
+ libc3/buf_parse_s16.h \
+ libc3/buf_parse_s32.c \
+ libc3/buf_parse_s32.h \
+ libc3/buf_parse_s64.c \
libc3/buf_file.c \
libc3/buf_file.h \
libc3/bool.c \
@@ -67,6 +65,14 @@ C3_C_SOURCES = \
libc3/buf_parse.h \
libc3/compare.c \
libc3/buf_inspect.c \
+ libc3/set_cursor__fact.c \
+ libc3/set_cursor__fact.h \
+ libc3/set_cursor__tag.c \
+ libc3/set_cursor__tag.h \
+ libc3/set_item__fact.c \
+ libc3/set_item__fact.h \
+ libc3/set_item__tag.c \
+ libc3/set_item__tag.h \
libc3/call.c \
libc3/bool.h \
libc3/buf_save.h \
@@ -75,6 +81,7 @@ C3_C_SOURCES = \
libc3/list.h \
libc3/c3.c \
libc3/c3.h \
+ libc3/tag.c \
libc3/error.h \
libc3/env.h \
libc3/character.h \
@@ -84,13 +91,14 @@ C3_C_SOURCES = \
libc3/tag.h \
libc3/sign.h \
libc3/buf.h \
- libc3/set_cursor__fact.h \
- libc3/set_cursor__tag.c \
- libc3/set_cursor__tag.h \
- libc3/set_item__fact.c \
- libc3/set_item__fact.h \
- libc3/set_item__tag.c \
- libc3/set_item__tag.h \
+ libc3/buf_parse_s64.h \
+ libc3/buf_parse_sw.c \
+ libc3/buf_parse_sw.h \
+ libc3/buf_parse_u8.c \
+ libc3/buf_parse_u8.h \
+ libc3/buf_parse_u16.c \
+ libc3/buf_parse_u16.h \
+ libc3/buf_parse_u32.c \
libc3/ident.c \
libc3/error_handler.c \
libc3/frame.c \
@@ -107,6 +115,15 @@ C3_C_SOURCES = \
libc3/fn.h \
libc3/ceiling.h \
libc3/buf_inspect.h \
+ libc3/buf_parse_u32.h \
+ libc3/buf_parse_u64.c \
+ libc3/buf_parse_u64.h \
+ libc3/buf_parse_uw.c \
+ libc3/buf_parse_uw.h \
+ libc3/set__fact.c \
+ libc3/set__fact.h \
+ libc3/set__tag.c \
+ libc3/set__tag.h \
libc3/env.c \
libc3/facts_cursor.h \
libc3/facts_spec.c \
@@ -120,12 +137,17 @@ C3_C_SOURCES = \
libc3/facts_with.h \
libc3/hash.h \
libc3/cfn.h \
- libc3/tag.c \
+ libc3/buf_parse_u.c.in \
libc3/abs.c \
libc3/facts_with_cursor.h \
libc3/ident.h \
libc3/str.c \
libc3/c_types.h \
+ libc3/skiplist__fact.c \
+ libc3/skiplist__fact.h \
+ libc3/skiplist_node__fact.c \
+ libc3/skiplist_node__fact.h \
+ libc3/buf_parse_s.c.in \
libc3/integer.c \
libc3/list.c \
libc3/log.c \
@@ -152,32 +174,36 @@ C3_C_SOURCES = \
libc3/tuple.h \
libc3/ucd.c \
libc3/ucd.h \
- libc3/buf_parse_s8.h \
libc3/type.h \
libc3/buf_parse_s.h.in \
libc3/buf_parse_u.h.in \
- libc3/buf_parse_s16.h \
- libc3/buf_parse_s32.h \
- libc3/buf_parse_s64.h \
- libc3/buf_parse_sw.h \
- libc3/buf_parse_u8.h \
- libc3/buf_parse_u16.h \
- libc3/buf_parse_u32.h \
- libc3/buf_parse_u64.h \
- libc3/buf_parse_uw.h \
- libc3/buf_parse_s8.c \
- libc3/buf_parse_s16.c \
- libc3/buf_parse_s.c.in \
- libc3/buf_parse_s32.c \
- libc3/buf_parse_s64.c \
- libc3/buf_parse_sw.c \
- libc3/buf_parse_u8.c \
- libc3/buf_parse_u16.c \
- libc3/buf_parse_u.c.in \
- libc3/buf_parse_u32.c \
- libc3/buf_parse_u64.c \
- libc3/buf_parse_uw.c \
libc3/float.h \
+ libc3/buf_inspect_s_base.c.in \
+ libc3/buf_inspect_s.c.in \
+ libc3/buf_inspect_s8.c \
+ libc3/buf_inspect_s.h.in \
+ libc3/buf_inspect_s8.h \
+ libc3/buf_inspect_s16.c \
+ libc3/buf_inspect_s16.h \
+ libc3/buf_inspect_s64.c \
+ libc3/buf_inspect_u.c.in \
+ libc3/buf_inspect_s32.c \
+ libc3/buf_inspect_u8.c \
+ libc3/buf_inspect_s32.h \
+ libc3/buf_inspect_s64.h \
+ libc3/buf_inspect_sw.c \
+ libc3/buf_inspect_sw.h \
+ libc3/buf_inspect_u_base.c.in \
+ libc3/buf_inspect_u8.h \
+ libc3/buf_inspect_u.h.in \
+ libc3/buf_inspect_u16.c \
+ libc3/buf_inspect_u16.h \
+ libc3/buf_inspect_u32.c \
+ libc3/buf_inspect_u32.h \
+ libc3/buf_inspect_u64.c \
+ libc3/buf_inspect_u64.h \
+ libc3/buf_inspect_uw.c \
+ libc3/buf_inspect_uw.h \
test/facts_cursor_test.c \
test/facts_test.c \
test/facts_with_test.c \
diff --git a/sources.sh b/sources.sh
index 6d8bb99..4ad0a7e 100644
--- a/sources.sh
+++ b/sources.sh
@@ -1,4 +1,4 @@
# sources.sh generated by update_sources
C3_CONFIGURES='c3c/configure c3s/configure c3s/update_sources ic3/configure ic3/update_sources libc3/update_sources libc3/configure libtommath/configure libtommath/update_sources test/configure test/update_sources ucd2c/configure '
C3_MAKEFILES='c3c/Makefile c3s/Makefile ic3/Makefile libc3/Makefile libc3/gen.mk libtommath/Makefile test/Makefile ucd2c/Makefile '
-C3_C_SOURCES='c3c/c3c.c c3s/buf_readline.c c3s/c3s.c c3s/buf_readline.h ic3/buf_linenoise.c ic3/ic3.c ic3/buf_linenoise.h ic3/linenoise.c libc3/arg.c libc3/arg.h libc3/skiplist__fact.c libc3/skiplist__fact.h libc3/skiplist_node__fact.c libc3/skiplist_node__fact.h libc3/binding.c libc3/binding.h libc3/facts.c libc3/facts_with_cursor.c libc3/array.c libc3/array.h libc3/buf.c libc3/buf_parse.c libc3/integer.h libc3/types.h libc3/type.c libc3/set__fact.c libc3/set__fact.h libc3/set__tag.c libc3/set__tag.h libc3/set_cursor__fact.c libc3/buf_file.c libc3/buf_file.h libc3/bool.c libc3/io.h libc3/io.c libc3/abs.h libc3/ceiling.c libc3/buf_parse_c.c libc3/buf_parse_c.h libc3/buf_save.c libc3/buf_parse.h libc3/compare.c libc3/buf_inspect.c libc3/call.c libc3/bool.h libc3/buf_save.h libc3/fact.h libc3/error.c libc3/list.h libc3/c3.c libc3/c3.h libc3/error.h libc3/env.h libc3/character.h libc3/compare.h libc3/operator.h libc3/operator.c libc3/tag.h libc3/sign.h libc3/buf.h libc3/set_cursor__fact.h libc3/set_cursor__tag.c libc3/set_cursor__tag.h libc3/set_item__fact.c libc3/set_item__fact.h libc3/set_item__tag.c libc3/set_item__tag.h libc3/ident.c libc3/error_handler.c libc3/frame.c libc3/set_cursor.c.in libc3/set_cursor.h.in libc3/set_item.c.in libc3/set_item.h.in libc3/error_handler.h libc3/eval.c libc3/eval.h libc3/fact.c libc3/facts.h libc3/facts_cursor.c libc3/fn.h libc3/ceiling.h libc3/buf_inspect.h libc3/env.c libc3/facts_cursor.h libc3/facts_spec.c libc3/frame.h libc3/sign.c libc3/facts_spec.h libc3/facts_spec_cursor.c libc3/hash.c libc3/facts_spec_cursor.h libc3/facts_with.c libc3/facts_with.h libc3/hash.h libc3/cfn.h libc3/tag.c libc3/abs.c libc3/facts_with_cursor.h libc3/ident.h libc3/str.c libc3/c_types.h libc3/integer.c libc3/list.c libc3/log.c libc3/log.h libc3/sym.h libc3/module.c libc3/quote.c libc3/quote.h libc3/character.c libc3/cfn.c libc3/fn.c libc3/module.h libc3/set.c.in libc3/call.h libc3/set.h.in libc3/sha1.h libc3/skiplist.c.in libc3/skiplist.h.in libc3/skiplist_node.c.in libc3/skiplist_node.h.in libc3/str.h libc3/sym.c libc3/tuple.c libc3/tuple.h libc3/ucd.c libc3/ucd.h libc3/buf_parse_s8.h libc3/type.h libc3/buf_parse_s.h.in libc3/buf_parse_u.h.in libc3/buf_parse_s16.h libc3/buf_parse_s32.h libc3/buf_parse_s64.h libc3/buf_parse_sw.h libc3/buf_parse_u8.h libc3/buf_parse_u16.h libc3/buf_parse_u32.h libc3/buf_parse_u64.h libc3/buf_parse_uw.h libc3/buf_parse_s8.c libc3/buf_parse_s16.c libc3/buf_parse_s.c.in libc3/buf_parse_s32.c libc3/buf_parse_s64.c libc3/buf_parse_sw.c libc3/buf_parse_u8.c libc3/buf_parse_u16.c libc3/buf_parse_u.c.in libc3/buf_parse_u32.c libc3/buf_parse_u64.c libc3/buf_parse_uw.c libc3/float.h test/facts_cursor_test.c test/facts_test.c test/facts_with_test.c test/set__fact_test.c test/set__tag_test.c test/test.c test/tag_test.c test/sym_test.c test/tag_test.h test/tuple_test.c test/types_test.c test/skiplist__fact_test.c test/fact_test.c test/compare_test.h test/fact_test.h test/str_test.c test/list_test.c test/hash_test.c test/compare_test.c test/call_test.c test/ident_test.c test/libc3_test.c test/buf_inspect_test.c test/test.h test/bool_test.c test/cfn_test.c test/buf_parse_test_s8.c test/buf_parse_test_s32.c test/buf_parse_test_s64.c test/buf_parse_test_u16.c test/buf_parse_test_u8.c test/buf_parse_test_u32.c test/buf_parse_test_u64.c test/buf_parse_test.h test/buf_test.c test/env_test.c test/buf_parse_test_su.h test/character_test.c test/buf_parse_test.c test/buf_parse_test_s16.c test/buf_file_test.c ucd2c/ucd.h ucd2c/ucd2c.c '
+C3_C_SOURCES='c3c/c3c.c c3s/buf_readline.c c3s/c3s.c c3s/buf_readline.h ic3/buf_linenoise.c ic3/ic3.c ic3/buf_linenoise.h ic3/linenoise.c libc3/arg.c libc3/arg.h libc3/facts.c libc3/binding.c libc3/binding.h libc3/facts_with_cursor.c libc3/array.c libc3/array.h libc3/buf.c libc3/buf_parse.c libc3/integer.h libc3/types.h libc3/type.c libc3/buf_parse_s8.c libc3/buf_parse_s8.h libc3/buf_parse_s16.c libc3/buf_parse_s16.h libc3/buf_parse_s32.c libc3/buf_parse_s32.h libc3/buf_parse_s64.c libc3/buf_file.c libc3/buf_file.h libc3/bool.c libc3/io.h libc3/io.c libc3/abs.h libc3/ceiling.c libc3/buf_parse_c.c libc3/buf_parse_c.h libc3/buf_save.c libc3/buf_parse.h libc3/compare.c libc3/buf_inspect.c libc3/set_cursor__fact.c libc3/set_cursor__fact.h libc3/set_cursor__tag.c libc3/set_cursor__tag.h libc3/set_item__fact.c libc3/set_item__fact.h libc3/set_item__tag.c libc3/set_item__tag.h libc3/call.c libc3/bool.h libc3/buf_save.h libc3/fact.h libc3/error.c libc3/list.h libc3/c3.c libc3/c3.h libc3/tag.c libc3/error.h libc3/env.h libc3/character.h libc3/compare.h libc3/operator.h libc3/operator.c libc3/tag.h libc3/sign.h libc3/buf.h libc3/buf_parse_s64.h libc3/buf_parse_sw.c libc3/buf_parse_sw.h libc3/buf_parse_u8.c libc3/buf_parse_u8.h libc3/buf_parse_u16.c libc3/buf_parse_u16.h libc3/buf_parse_u32.c libc3/ident.c libc3/error_handler.c libc3/frame.c libc3/set_cursor.c.in libc3/set_cursor.h.in libc3/set_item.c.in libc3/set_item.h.in libc3/error_handler.h libc3/eval.c libc3/eval.h libc3/fact.c libc3/facts.h libc3/facts_cursor.c libc3/fn.h libc3/ceiling.h libc3/buf_inspect.h libc3/buf_parse_u32.h libc3/buf_parse_u64.c libc3/buf_parse_u64.h libc3/buf_parse_uw.c libc3/buf_parse_uw.h libc3/set__fact.c libc3/set__fact.h libc3/set__tag.c libc3/set__tag.h libc3/env.c libc3/facts_cursor.h libc3/facts_spec.c libc3/frame.h libc3/sign.c libc3/facts_spec.h libc3/facts_spec_cursor.c libc3/hash.c libc3/facts_spec_cursor.h libc3/facts_with.c libc3/facts_with.h libc3/hash.h libc3/cfn.h libc3/buf_parse_u.c.in libc3/abs.c libc3/facts_with_cursor.h libc3/ident.h libc3/str.c libc3/c_types.h libc3/skiplist__fact.c libc3/skiplist__fact.h libc3/skiplist_node__fact.c libc3/skiplist_node__fact.h libc3/buf_parse_s.c.in libc3/integer.c libc3/list.c libc3/log.c libc3/log.h libc3/sym.h libc3/module.c libc3/quote.c libc3/quote.h libc3/character.c libc3/cfn.c libc3/fn.c libc3/module.h libc3/set.c.in libc3/call.h libc3/set.h.in libc3/sha1.h libc3/skiplist.c.in libc3/skiplist.h.in libc3/skiplist_node.c.in libc3/skiplist_node.h.in libc3/str.h libc3/sym.c libc3/tuple.c libc3/tuple.h libc3/ucd.c libc3/ucd.h libc3/type.h libc3/buf_parse_s.h.in libc3/buf_parse_u.h.in libc3/float.h libc3/buf_inspect_s_base.c.in libc3/buf_inspect_s.c.in libc3/buf_inspect_s8.c libc3/buf_inspect_s.h.in libc3/buf_inspect_s8.h libc3/buf_inspect_s16.c libc3/buf_inspect_s16.h libc3/buf_inspect_s64.c libc3/buf_inspect_u.c.in libc3/buf_inspect_s32.c libc3/buf_inspect_u8.c libc3/buf_inspect_s32.h libc3/buf_inspect_s64.h libc3/buf_inspect_sw.c libc3/buf_inspect_sw.h libc3/buf_inspect_u_base.c.in libc3/buf_inspect_u8.h libc3/buf_inspect_u.h.in libc3/buf_inspect_u16.c libc3/buf_inspect_u16.h libc3/buf_inspect_u32.c libc3/buf_inspect_u32.h libc3/buf_inspect_u64.c libc3/buf_inspect_u64.h libc3/buf_inspect_uw.c libc3/buf_inspect_uw.h test/facts_cursor_test.c test/facts_test.c test/facts_with_test.c test/set__fact_test.c test/set__tag_test.c test/test.c test/tag_test.c test/sym_test.c test/tag_test.h test/tuple_test.c test/types_test.c test/skiplist__fact_test.c test/fact_test.c test/compare_test.h test/fact_test.h test/str_test.c test/list_test.c test/hash_test.c test/compare_test.c test/call_test.c test/ident_test.c test/libc3_test.c test/buf_inspect_test.c test/test.h test/bool_test.c test/cfn_test.c test/buf_parse_test_s8.c test/buf_parse_test_s32.c test/buf_parse_test_s64.c test/buf_parse_test_u16.c test/buf_parse_test_u8.c test/buf_parse_test_u32.c test/buf_parse_test_u64.c test/buf_parse_test.h test/buf_test.c test/env_test.c test/buf_parse_test_su.h test/character_test.c test/buf_parse_test.c test/buf_parse_test_s16.c test/buf_file_test.c ucd2c/ucd.h ucd2c/ucd2c.c '
diff --git a/test/buf_inspect_test.c b/test/buf_inspect_test.c
index 7b1031e..9ff0098 100644
--- a/test/buf_inspect_test.c
+++ b/test/buf_inspect_test.c
@@ -21,12 +21,12 @@
s_buf buf_test; \
s_buf buf_result; \
s_array tmp; \
- test_context("buf_inspect_array(" # test ") -> " # expected); \
+ test_context("buf_inspect_array(" # test ") -> " # expected); \
buf_init_1(&buf_test, (test)); \
buf_parse_array(&buf_test, &tmp); \
buf_clean(&buf_test); \
buf_init(&buf_result, false, sizeof(b), b); \
- /* TEST_EQ(buf_inspect_array_size(&tmp), strlen(expected)); */ \
+ TEST_EQ(buf_inspect_array_size(&tmp), strlen(expected)); \
TEST_EQ(buf_inspect_array(&buf_result, &tmp), strlen(expected)); \
array_clean(&tmp); \
TEST_EQ(buf_result.wpos, strlen(expected)); \
@@ -208,6 +208,8 @@ TEST_CASE(buf_inspect_array)
BUF_INSPECT_TEST_ARRAY("(u8){0}", "(u8) {0}");
BUF_INSPECT_TEST_ARRAY("(u8){{0, 1}, {2, 3}}",
"(u8) {{0, 1}, {2, 3}}");
+ BUF_INSPECT_TEST_ARRAY("(u8) { { { 0 , 1 } , {2 , 3 } } , { { 4 , 5 } , { 6 , 7 } } } }",
+ "(u8) {{{0, 1}, {2, 3}}, {{4, 5}, {6, 7}}}}");
}
TEST_CASE_END(buf_inspect_array)