meta: move endian functions from object to core
This commit is contained in:
@@ -1,6 +1,8 @@
|
|||||||
cmake_minimum_required(VERSION 3.25)
|
cmake_minimum_required(VERSION 3.25)
|
||||||
project(bluelib C)
|
project(bluelib C)
|
||||||
|
|
||||||
|
include (TestBigEndian)
|
||||||
|
|
||||||
set_property(GLOBAL PROPERTY USE_FOLDERS ON)
|
set_property(GLOBAL PROPERTY USE_FOLDERS ON)
|
||||||
|
|
||||||
set(b_modules core object term cmd)
|
set(b_modules core object term cmd)
|
||||||
|
|||||||
@@ -37,6 +37,15 @@ function(add_bluelib_module)
|
|||||||
set_target_properties(blue-${module_name} PROPERTIES FOLDER "Shared/${module_name}")
|
set_target_properties(blue-${module_name} PROPERTIES FOLDER "Shared/${module_name}")
|
||||||
set_target_properties(blue-${module_name}-s PROPERTIES FOLDER "Static/${module_name}")
|
set_target_properties(blue-${module_name}-s PROPERTIES FOLDER "Static/${module_name}")
|
||||||
|
|
||||||
|
TEST_BIG_ENDIAN(IS_BIG_ENDIAN)
|
||||||
|
if(IS_BIG_ENDIAN)
|
||||||
|
target_compile_definitions(blue-${module_name} PRIVATE BIG_ENDIAN)
|
||||||
|
target_compile_definitions(blue-${module_name}-s PRIVATE BIG_ENDIAN)
|
||||||
|
else()
|
||||||
|
target_compile_definitions(blue-${module_name} PRIVATE LITTLE_ENDIAN)
|
||||||
|
target_compile_definitions(blue-${module_name}-s PRIVATE LITTLE_ENDIAN)
|
||||||
|
endif()
|
||||||
|
|
||||||
install(TARGETS blue-${module_name} blue-${module_name}-s)
|
install(TARGETS blue-${module_name} blue-${module_name}-s)
|
||||||
install(FILES ${root_header} DESTINATION include/blue)
|
install(FILES ${root_header} DESTINATION include/blue)
|
||||||
install(FILES ${headers} DESTINATION include/blue/${module_name})
|
install(FILES ${headers} DESTINATION include/blue/${module_name})
|
||||||
|
|||||||
213
core/endian.c
Normal file
213
core/endian.c
Normal file
@@ -0,0 +1,213 @@
|
|||||||
|
#include <blue/core/endian.h>
|
||||||
|
|
||||||
|
b_i16 b_i16_htob(uint16_t v)
|
||||||
|
{
|
||||||
|
b_i16 x;
|
||||||
|
|
||||||
|
#ifdef BIG_ENDIAN
|
||||||
|
x.i_uval = v;
|
||||||
|
#else
|
||||||
|
uint8_t *b = (uint8_t *)&v;
|
||||||
|
x.i_bytes[0] = b[1];
|
||||||
|
x.i_bytes[1] = b[0];
|
||||||
|
#endif
|
||||||
|
|
||||||
|
return x;
|
||||||
|
}
|
||||||
|
|
||||||
|
b_i16 b_i16_htos(uint16_t v)
|
||||||
|
{
|
||||||
|
b_i16 x;
|
||||||
|
|
||||||
|
#ifdef LITTLE_ENDIAN
|
||||||
|
x.i_uval = v;
|
||||||
|
#else
|
||||||
|
uint8_t *b = (uint8_t *)&v;
|
||||||
|
x.i_bytes[0] = b[1];
|
||||||
|
x.i_bytes[1] = b[0];
|
||||||
|
#endif
|
||||||
|
|
||||||
|
return x;
|
||||||
|
}
|
||||||
|
|
||||||
|
uint16_t b_i16_btoh(b_i16 v)
|
||||||
|
{
|
||||||
|
uint16_t x;
|
||||||
|
|
||||||
|
#ifdef BIG_ENDIAN
|
||||||
|
x = v.i_uval;
|
||||||
|
#else
|
||||||
|
uint8_t *b = (uint8_t *)&x;
|
||||||
|
b[0] = v.i_bytes[1];
|
||||||
|
b[1] = v.i_bytes[0];
|
||||||
|
#endif
|
||||||
|
|
||||||
|
return x;
|
||||||
|
}
|
||||||
|
|
||||||
|
uint16_t b_i16_stoh(b_i16 v)
|
||||||
|
{
|
||||||
|
uint16_t x;
|
||||||
|
|
||||||
|
#ifdef LITTLE_ENDIAN
|
||||||
|
x = v.i_uval;
|
||||||
|
#else
|
||||||
|
uint8_t *b = (uint8_t *)&x;
|
||||||
|
b[0] = v.i_bytes[1];
|
||||||
|
b[1] = v.i_bytes[0];
|
||||||
|
#endif
|
||||||
|
|
||||||
|
return x;
|
||||||
|
}
|
||||||
|
|
||||||
|
b_i32 b_i32_htob(uint32_t v)
|
||||||
|
{
|
||||||
|
b_i32 x;
|
||||||
|
|
||||||
|
#ifdef BIG_ENDIAN
|
||||||
|
x.i_uval = v;
|
||||||
|
#else
|
||||||
|
uint8_t *b = (uint8_t *)&v;
|
||||||
|
x.i_bytes[0] = b[3];
|
||||||
|
x.i_bytes[1] = b[2];
|
||||||
|
x.i_bytes[2] = b[1];
|
||||||
|
x.i_bytes[3] = b[0];
|
||||||
|
#endif
|
||||||
|
|
||||||
|
return x;
|
||||||
|
}
|
||||||
|
|
||||||
|
b_i32 b_i32_htos(uint32_t v)
|
||||||
|
{
|
||||||
|
b_i32 x;
|
||||||
|
|
||||||
|
#ifdef LITTLE_ENDIAN
|
||||||
|
x.i_uval = v;
|
||||||
|
#else
|
||||||
|
uint8_t *b = (uint8_t *)&v;
|
||||||
|
x.i_bytes[0] = b[3];
|
||||||
|
x.i_bytes[1] = b[2];
|
||||||
|
x.i_bytes[2] = b[1];
|
||||||
|
x.i_bytes[3] = b[0];
|
||||||
|
#endif
|
||||||
|
|
||||||
|
return x;
|
||||||
|
}
|
||||||
|
|
||||||
|
uint32_t b_i32_btoh(b_i32 v)
|
||||||
|
{
|
||||||
|
uint32_t x;
|
||||||
|
|
||||||
|
#ifdef BIG_ENDIAN
|
||||||
|
x = v.i_uval;
|
||||||
|
#else
|
||||||
|
uint8_t *b = (uint8_t *)&x;
|
||||||
|
b[0] = v.i_bytes[3];
|
||||||
|
b[1] = v.i_bytes[2];
|
||||||
|
b[2] = v.i_bytes[1];
|
||||||
|
b[3] = v.i_bytes[0];
|
||||||
|
#endif
|
||||||
|
|
||||||
|
return x;
|
||||||
|
}
|
||||||
|
|
||||||
|
uint32_t b_i32_stoh(b_i32 v)
|
||||||
|
{
|
||||||
|
uint32_t x;
|
||||||
|
|
||||||
|
#ifdef LITTLE_ENDIAN
|
||||||
|
x = v.i_uval;
|
||||||
|
#else
|
||||||
|
uint8_t *b = (uint8_t *)&x;
|
||||||
|
b[0] = v.i_bytes[3];
|
||||||
|
b[1] = v.i_bytes[2];
|
||||||
|
b[2] = v.i_bytes[1];
|
||||||
|
b[3] = v.i_bytes[0];
|
||||||
|
#endif
|
||||||
|
|
||||||
|
return x;
|
||||||
|
}
|
||||||
|
|
||||||
|
b_i64 b_i64_htob(uint64_t v)
|
||||||
|
{
|
||||||
|
b_i64 x;
|
||||||
|
|
||||||
|
#ifdef BIG_ENDIAN
|
||||||
|
x.i_uval = v;
|
||||||
|
#else
|
||||||
|
uint8_t *b = (uint8_t *)&v;
|
||||||
|
x.i_bytes[0] = b[7];
|
||||||
|
x.i_bytes[1] = b[6];
|
||||||
|
x.i_bytes[2] = b[5];
|
||||||
|
x.i_bytes[3] = b[4];
|
||||||
|
x.i_bytes[4] = b[3];
|
||||||
|
x.i_bytes[5] = b[2];
|
||||||
|
x.i_bytes[6] = b[1];
|
||||||
|
x.i_bytes[7] = b[0];
|
||||||
|
#endif
|
||||||
|
|
||||||
|
return x;
|
||||||
|
}
|
||||||
|
|
||||||
|
b_i64 b_i64_htos(uint64_t v)
|
||||||
|
{
|
||||||
|
b_i64 x;
|
||||||
|
|
||||||
|
#ifdef LITTLE_ENDIAN
|
||||||
|
x.i_uval = v;
|
||||||
|
#else
|
||||||
|
uint8_t *b = (uint8_t *)&v;
|
||||||
|
x.i_bytes[0] = b[7];
|
||||||
|
x.i_bytes[1] = b[6];
|
||||||
|
x.i_bytes[2] = b[5];
|
||||||
|
x.i_bytes[3] = b[4];
|
||||||
|
x.i_bytes[4] = b[3];
|
||||||
|
x.i_bytes[5] = b[2];
|
||||||
|
x.i_bytes[6] = b[1];
|
||||||
|
x.i_bytes[7] = b[0];
|
||||||
|
#endif
|
||||||
|
|
||||||
|
return x;
|
||||||
|
}
|
||||||
|
|
||||||
|
uint64_t b_i64_btoh(b_i64 v)
|
||||||
|
{
|
||||||
|
uint64_t x;
|
||||||
|
|
||||||
|
#ifdef BIG_ENDIAN
|
||||||
|
x = v.i_uval;
|
||||||
|
#else
|
||||||
|
uint8_t *b = (uint8_t *)&x;
|
||||||
|
b[0] = v.i_bytes[7];
|
||||||
|
b[1] = v.i_bytes[6];
|
||||||
|
b[2] = v.i_bytes[5];
|
||||||
|
b[3] = v.i_bytes[4];
|
||||||
|
b[4] = v.i_bytes[3];
|
||||||
|
b[5] = v.i_bytes[2];
|
||||||
|
b[6] = v.i_bytes[1];
|
||||||
|
b[7] = v.i_bytes[0];
|
||||||
|
#endif
|
||||||
|
|
||||||
|
return x;
|
||||||
|
}
|
||||||
|
|
||||||
|
uint64_t b_i64_stoh(b_i64 v)
|
||||||
|
{
|
||||||
|
uint64_t x;
|
||||||
|
|
||||||
|
#ifdef LITTLE_ENDIAN
|
||||||
|
x = v.i_uval;
|
||||||
|
#else
|
||||||
|
uint8_t *b = (uint8_t *)&x;
|
||||||
|
b[0] = v.i_bytes[7];
|
||||||
|
b[1] = v.i_bytes[6];
|
||||||
|
b[2] = v.i_bytes[5];
|
||||||
|
b[3] = v.i_bytes[4];
|
||||||
|
b[4] = v.i_bytes[3];
|
||||||
|
b[5] = v.i_bytes[2];
|
||||||
|
b[6] = v.i_bytes[1];
|
||||||
|
b[7] = v.i_bytes[0];
|
||||||
|
#endif
|
||||||
|
|
||||||
|
return x;
|
||||||
|
}
|
||||||
49
core/include/blue/core/endian.h
Normal file
49
core/include/blue/core/endian.h
Normal file
@@ -0,0 +1,49 @@
|
|||||||
|
#ifndef BLUELIB_CORE_ENDIAN_H_
|
||||||
|
#define BLUELIB_CORE_ENDIAN_H_
|
||||||
|
|
||||||
|
#include <blue/core/misc.h>
|
||||||
|
#include <stdint.h>
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
union {
|
||||||
|
unsigned char i_bytes[sizeof(uint16_t)];
|
||||||
|
int16_t i_val;
|
||||||
|
uint16_t i_uval;
|
||||||
|
};
|
||||||
|
} b_i16;
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
union {
|
||||||
|
unsigned char i_bytes[sizeof(uint32_t)];
|
||||||
|
int32_t i_val;
|
||||||
|
uint32_t i_uval;
|
||||||
|
};
|
||||||
|
} b_i32;
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
union {
|
||||||
|
unsigned char i_bytes[sizeof(uint64_t)];
|
||||||
|
int64_t i_val;
|
||||||
|
uint64_t i_uval;
|
||||||
|
};
|
||||||
|
} b_i64;
|
||||||
|
|
||||||
|
BLUE_API b_i16 b_i16_htob(uint16_t v);
|
||||||
|
BLUE_API b_i16 b_i16_htos(uint16_t v);
|
||||||
|
|
||||||
|
BLUE_API uint16_t b_i16_btoh(b_i16 v);
|
||||||
|
BLUE_API uint16_t b_i16_stoh(b_i16 v);
|
||||||
|
|
||||||
|
BLUE_API b_i32 b_i32_htob(uint32_t v);
|
||||||
|
BLUE_API b_i32 b_i32_htos(uint32_t v);
|
||||||
|
|
||||||
|
BLUE_API uint32_t b_i32_btoh(b_i32 v);
|
||||||
|
BLUE_API uint32_t b_i32_stoh(b_i32 v);
|
||||||
|
|
||||||
|
BLUE_API b_i64 b_i64_htob(uint64_t v);
|
||||||
|
BLUE_API b_i64 b_i64_htos(uint64_t v);
|
||||||
|
|
||||||
|
BLUE_API uint64_t b_i64_btoh(b_i64 v);
|
||||||
|
BLUE_API uint64_t b_i64_stoh(b_i64 v);
|
||||||
|
|
||||||
|
#endif
|
||||||
@@ -66,30 +66,6 @@ typedef enum b_number_type {
|
|||||||
B_NUMBER_QWORD = B_NUMBER_INT64,
|
B_NUMBER_QWORD = B_NUMBER_INT64,
|
||||||
} b_number_type;
|
} b_number_type;
|
||||||
|
|
||||||
typedef struct {
|
|
||||||
union {
|
|
||||||
unsigned char i_bytes[sizeof(uint16_t)];
|
|
||||||
int16_t i_val;
|
|
||||||
uint16_t i_uval;
|
|
||||||
};
|
|
||||||
} b_i16;
|
|
||||||
|
|
||||||
typedef struct {
|
|
||||||
union {
|
|
||||||
unsigned char i_bytes[sizeof(uint32_t)];
|
|
||||||
int32_t i_val;
|
|
||||||
uint32_t i_uval;
|
|
||||||
};
|
|
||||||
} b_i32;
|
|
||||||
|
|
||||||
typedef struct {
|
|
||||||
union {
|
|
||||||
unsigned char i_bytes[sizeof(uint64_t)];
|
|
||||||
int64_t i_val;
|
|
||||||
uint64_t i_uval;
|
|
||||||
};
|
|
||||||
} b_i64;
|
|
||||||
|
|
||||||
BLUE_API b_number *b_number_create(b_number_type type, void *value_ptr);
|
BLUE_API b_number *b_number_create(b_number_type type, void *value_ptr);
|
||||||
static inline b_number *b_number_retain(b_number *number)
|
static inline b_number *b_number_retain(b_number *number)
|
||||||
{
|
{
|
||||||
@@ -264,22 +240,4 @@ BLUE_API bool b_number_is_float(const b_number *number);
|
|||||||
|
|
||||||
BLUE_API size_t b_number_data_size(const b_number *number);
|
BLUE_API size_t b_number_data_size(const b_number *number);
|
||||||
|
|
||||||
BLUE_API b_i16 b_i16_htob(uint16_t v);
|
|
||||||
BLUE_API b_i16 b_i16_htos(uint16_t v);
|
|
||||||
|
|
||||||
BLUE_API uint16_t b_i16_btoh(b_i16 v);
|
|
||||||
BLUE_API uint16_t b_i16_stoh(b_i16 v);
|
|
||||||
|
|
||||||
BLUE_API b_i32 b_i32_htob(uint32_t v);
|
|
||||||
BLUE_API b_i32 b_i32_htos(uint32_t v);
|
|
||||||
|
|
||||||
BLUE_API uint32_t b_i32_btoh(b_i32 v);
|
|
||||||
BLUE_API uint32_t b_i32_stoh(b_i32 v);
|
|
||||||
|
|
||||||
BLUE_API b_i64 b_i64_htob(uint64_t v);
|
|
||||||
BLUE_API b_i64 b_i64_htos(uint64_t v);
|
|
||||||
|
|
||||||
BLUE_API uint64_t b_i64_btoh(b_i64 v);
|
|
||||||
BLUE_API uint64_t b_i64_stoh(b_i64 v);
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
Reference in New Issue
Block a user