ds: number: convert to new object system

This commit is contained in:
2025-10-19 13:32:53 +01:00
parent 4e35a2275d
commit 6a56391a07
3 changed files with 437 additions and 351 deletions

View File

@@ -1,11 +1,10 @@
#ifndef BLUELIB_NUMBER_H
#define BLUELIB_NUMBER_H
#ifndef BLUE_DS_NUMBER_H
#define BLUE_DS_NUMBER_H
#include <blue/ds/object.h>
#include <blue/ds/type.h>
#include <blue/core/macros.h>
#include <stdbool.h>
#define B_NUMBER(p) ((b_number *)(p))
B_DECLS_BEGIN;
#define B_INT8(v) (b_number_create_int8(v))
#define B_INT16(v) (b_number_create_int16(v))
@@ -40,7 +39,12 @@
#define B_NUMBER_IVAL(p) (b_number_get_size_t(p))
#define B_NUMBER_FVAL(p) (b_number_get_double(p))
typedef struct b_number b_number;
#define B_TYPE_NUMBER (b_number_get_type())
B_DECLARE_TYPE(b_number);
B_TYPE_CLASS_DECLARATION_BEGIN(b_number)
B_TYPE_CLASS_DECLARATION_END(b_number)
typedef enum b_number_type {
B_NUMBER_INT8,
@@ -66,15 +70,9 @@ typedef enum b_number_type {
B_NUMBER_QWORD = B_NUMBER_INT64,
} b_number_type;
BLUE_API b_type b_number_get_type(void);
BLUE_API b_number *b_number_create(b_number_type type, void *value_ptr);
static inline b_number *b_number_retain(b_number *number)
{
return B_NUMBER(b_retain(B_DSREF(number)));
}
static inline void b_number_release(b_number *number)
{
b_release(B_DSREF(number));
}
static inline b_number *b_number_create_int8(int8_t value)
{
@@ -133,7 +131,7 @@ static inline b_number *b_number_create_size_t(size_t value)
return b_number_create(B_NUMBER_SIZE_T, &value);
}
BLUE_API b_number_type b_number_get_type(const b_number *number);
BLUE_API b_number_type b_number_get_number_type(const b_number *number);
BLUE_API int b_number_get_value(
const b_number *number, b_number_type type, void *value_ptr);
@@ -251,4 +249,6 @@ BLUE_API void b_number_set_nan_negative(b_number *number, bool v);
BLUE_API size_t b_number_data_size(const b_number *number);
B_DECLS_END;
#endif