/* ////////////////////////////////////////////////////////////////////////////////////// * implementation */ tb_bool_t tb_init_(tb_handle_t priv, tb_allocator_ref_t allocator, tb_size_t mode, tb_hize_t build) { // have been inited? if (TB_STATE_OK == tb_atomic_fetch_and_pset(&g_state, TB_STATE_END, TB_STATE_OK)) return tb_true; // init trace if (!tb_trace_init()) return tb_false; // trace tb_trace_d("init: .."); // check mode if (!tb_check_mode(mode)) return tb_false; // check types tb_assert_static(sizeof(tb_byte_t) == 1); tb_assert_static(sizeof(tb_uint_t) == 4); tb_assert_static(sizeof(tb_uint8_t) == 1); tb_assert_static(sizeof(tb_uint16_t) == 2); tb_assert_static(sizeof(tb_uint32_t) == 4); tb_assert_static(sizeof(tb_hize_t) == 8); tb_assert_static(sizeof(tb_wchar_t) == sizeof(L'w')); tb_assert_static(TB_CPU_BITSIZE == (sizeof(tb_size_t) << 3)); tb_assert_static(TB_CPU_BITSIZE == (sizeof(tb_long_t) << 3)); tb_assert_static(TB_CPU_BITSIZE == (sizeof(tb_pointer_t) << 3)); tb_assert_static(TB_CPU_BITSIZE == (sizeof(tb_handle_t) << 3)); // check byteorder tb_assert_and_check_return_val(tb_check_order_word(), tb_false); tb_assert_and_check_return_val(tb_check_order_double(), tb_false); // init singleton if (!tb_singleton_init()) return tb_false; // init memory envirnoment if (!tb_memory_init_env(allocator)) return tb_false; // init platform envirnoment if (!tb_platform_init_env(priv)) return tb_false; // init libc envirnoment if (!tb_libc_init_env()) return tb_false; // init math envirnoment if (!tb_math_init_env()) return tb_false; // init libm envirnoment if (!tb_libm_init_env()) return tb_false; // init network envirnoment if (!tb_network_init_env()) return tb_false; // init object envirnoment #ifdef TB_CONFIG_MODULE_HAVE_OBJECT if (!tb_object_init_env()) return tb_false; #endif // check version tb_version_check(build); // trace tb_trace_d("init: ok"); // ok return tb_true; }
/* ////////////////////////////////////////////////////////////////////////////////////// * implementation */ tb_bool_t tb_init_(tb_handle_t priv, tb_allocator_ref_t allocator, tb_byte_t* data, tb_size_t size, tb_size_t mode, tb_hize_t build) { // is inited? if (tb_atomic_fetch_and_inc(&g_init)) return tb_true; // init trace if (!tb_trace_init()) return tb_false; // trace tb_trace_d("init: %p %lu", data, size); // check mode if (!tb_check_mode(mode)) return tb_false; // check types tb_assert_static(sizeof(tb_byte_t) == 1); tb_assert_static(sizeof(tb_uint_t) == 4); tb_assert_static(sizeof(tb_uint8_t) == 1); tb_assert_static(sizeof(tb_uint16_t) == 2); tb_assert_static(sizeof(tb_uint32_t) == 4); tb_assert_static(sizeof(tb_hize_t) == 8); tb_assert_static(sizeof(tb_wchar_t) == sizeof(L'w')); tb_assert_static(TB_CPU_BITSIZE == (sizeof(tb_size_t) << 3)); tb_assert_static(TB_CPU_BITSIZE == (sizeof(tb_long_t) << 3)); tb_assert_static(TB_CPU_BITSIZE == (sizeof(tb_pointer_t) << 3)); tb_assert_static(TB_CPU_BITSIZE == (sizeof(tb_handle_t) << 3)); // check byteorder tb_assert_and_check_return_val(tb_check_order_word(), tb_false); tb_assert_and_check_return_val(tb_check_order_double(), tb_false); // init singleton if (!tb_singleton_init()) return tb_false; // init memory if (!tb_memory_init(allocator, data, size)) return tb_false; // init platform if (!tb_platform_init(priv)) return tb_false; // init libc if (!tb_libc_init()) return tb_false; // init math if (!tb_math_init()) return tb_false; // init libm if (!tb_libm_init()) return tb_false; // init network if (!tb_network_init()) return tb_false; // init object #ifdef TB_CONFIG_MODULE_HAVE_OBJECT if (!tb_object_context_init()) return tb_false; #endif // check version tb_version_check(build); // trace tb_trace_d("init: ok"); // ok return tb_true; }