#include <ucw/table.h>
+#ifdef CONFIG_UCW_CLEAN_ABI
+#define table_col_size ucw_table_col_size
+#define table_col_timestamp ucw_table_col_timestamp
+#define xt_size ucw_xt_size
+#define xt_timestamp ucw_xt_timestamp
+#endif
+
+/* Size, possibly with a unit. Internally represented as u64. */
+
+extern const struct xtype xt_size;
+
enum size_units {
- UNIT_SIZE_BYTE,
- UNIT_SIZE_KILOBYTE,
- UNIT_SIZE_MEGABYTE,
- UNIT_SIZE_GIGABYTE,
- UNIT_SIZE_TERABYTE,
- UNIT_SIZE_AUTO
+ XT_SIZE_UNIT_BYTE,
+ XT_SIZE_UNIT_KILOBYTE,
+ XT_SIZE_UNIT_MEGABYTE,
+ XT_SIZE_UNIT_GIGABYTE,
+ XT_SIZE_UNIT_TERABYTE,
+ XT_SIZE_UNIT_AUTO
};
-enum timestamp_format {
- TIMESTAMP_EPOCH,
- TIMESTAMP_DATETIME
-};
+#define XT_SIZE_FMT_UNIT(_unit) (_unit | XT_SIZE_FMT_FIXED_UNIT)
+#define XT_SIZE_FMT_FIXED_UNIT XTYPE_FMT_CUSTOM
+
+#define TBL_COL_SIZE(_name, _width) { .name = _name, .width = _width, .fmt = XTYPE_FMT_DEFAULT, .type_def = &xt_size }
+#define TBL_COL_SIZE_FMT(_name, _width, _fmt) { .name = _name, .width = _width, .fmt = _fmt, .type_def = &xt_size }
-#define COL_TYPE_SIZE COL_TYPE_UCW
-#define COL_TYPE_TIMESTAMP (COL_TYPE_UCW+1)
+TABLE_COL_PROTO(size, u64)
-extern struct table_user_type table_type_timestamp;
-extern struct table_user_type table_type_size;
+/* Timestamp. Internally represented as time_t. */
-#define TBL_COL_SIZE(_name, _width) { .name = _name, .width = _width, .fmt = "%llu", .type = COL_TYPE_SIZE, .type_def = &table_type_size }
-#define TBL_COL_TIMESTAMP(_name, _width) { .name = _name, .width = _width, .fmt = "%lld", .type = COL_TYPE_TIMESTAMP, .type_def = &table_type_timestamp }
+#define XT_TIMESTAMP_FMT_EPOCH XTYPE_FMT_RAW
+#define XT_TIMESTAMP_FMT_DATETIME XTYPE_FMT_PRETTY
-#define TBL_COL_SIZE_FMT(_name, _width, _units) { .name = _name, .width = _width, .fmt = "%llu", .type = COL_TYPE_SIZE, .type_def = &table_type_size }
-#define TBL_COL_TIMESTAMP_FMT(_name, _width, _fmt) { .name = _name, .width = _width, .fmt = "%lld", .type = COL_TYPE_TIMESTAMP, .type_def = &table_type_timestamp }
+extern const struct xtype xt_timestamp;
-void table_col_size_name(struct table *tbl, const char *col_name, u64 val);
-void table_col_timestamp_name(struct table *tbl, const char * col_name, u64 val);
+#define TBL_COL_TIMESTAMP(_name, _width) { .name = _name, .width = _width, .fmt = XTYPE_FMT_DEFAULT, .type_def = &xt_timestamp }
+#define TBL_COL_TIMESTAMP_FMT(_name, _width, _fmt) { .name = _name, .width = _width, .fmt = _fmt, .type_def = &xt_timestamp }
-void table_col_size(struct table *tbl, int col, u64 val);
-void table_col_timestamp(struct table *tbl, int col, u64 val);
+TABLE_COL_PROTO(timestamp, u64)
#endif