sc_memory_context* sc_memory_initialize(const sc_memory_params *params) { g_log_set_always_fatal(G_LOG_LEVEL_CRITICAL); sc_config_initialize(params->config_file); s_context_hash_table = g_hash_table_new(g_direct_hash, g_direct_equal); char *v_str = sc_version_string_new(&SC_VERSION); g_message("Version: %s", v_str); sc_version_string_free(v_str); g_message("Configuration:"); g_message("\tmax_loaded_segments: %d", sc_config_get_max_loaded_segments()); g_message("sc-element size: %zd", sizeof(sc_element)); if (sc_storage_initialize(params->repo_path, params->clear) != SC_TRUE) return 0; s_memory_default_ctx = sc_memory_context_new(sc_access_lvl_make(SC_ACCESS_LVL_MAX_VALUE, SC_ACCESS_LVL_MAX_VALUE)); sc_memory_context *helper_ctx = sc_memory_context_new(sc_access_lvl_make(SC_ACCESS_LVL_MIN_VALUE, SC_ACCESS_LVL_MAX_VALUE)); if (sc_helper_init(helper_ctx) != SC_RESULT_OK) goto error; sc_memory_context_free(helper_ctx); if (sc_events_initialize() == SC_FALSE) { g_error("Error while initialize events module"); goto error; } sc_result ext_res; ext_res = sc_ext_initialize(params->ext_path); switch (ext_res) { case SC_RESULT_OK: g_message("Modules initialization finished"); return s_memory_default_ctx; case SC_RESULT_ERROR_INVALID_PARAMS: g_warning("Extensions directory '%s' doesn't exist", params->ext_path); break; default: g_warning("Unknown error while initialize extensions"); break; } error: { if (helper_ctx) sc_memory_context_free(helper_ctx); sc_memory_context_free(s_memory_default_ctx); } return s_memory_default_ctx = 0; }
// simple arc creation test gpointer create_arc_thread(gpointer data) { sc_memory_context *ctx = sc_memory_context_new(sc_access_lvl_make(8, 8)); int count = GPOINTER_TO_INT(data); int result = count; for (int i = 0; i < count; ++i) { sc_addr addr = sc_memory_node_new(ctx, 0); if (SC_ADDR_IS_EMPTY(addr)) goto result; sc_addr addr2 = sc_memory_node_new(ctx, 0); if (SC_ADDR_IS_EMPTY(addr2)) goto result; sc_addr arc = sc_memory_arc_new(ctx, sc_type_arc_access, addr, addr); if (SC_ADDR_IS_EMPTY(arc)) goto result; continue; result = i + 1; break; } result: { sc_memory_context_free(ctx); } return GINT_TO_POINTER(result); }
// simple sc-links creation gpointer create_link_thread(gpointer data) { sc_memory_context *ctx = sc_memory_context_new(sc_access_lvl_make(8, 8)); int count = GPOINTER_TO_INT(data); int result = count; for (int i = 0; i < count; ++i) { sc_addr addr = sc_memory_link_new(ctx); if (SC_ADDR_IS_EMPTY(addr)) result = i + 1; } sc_memory_context_free(ctx); return GINT_TO_POINTER(result); }
void test_save() { // create nodes s_default_ctx = sc_memory_initialize(¶ms); sc_memory_context *ctx = sc_memory_context_new(sc_access_lvl_make(8, 8)); int const count = 1000000; for (int i = 0; i < count; ++i) { g_assert(SC_ADDR_IS_NOT_EMPTY(sc_memory_node_new(ctx, 0))); } sc_memory_context_free(ctx); GThread * thread = g_thread_try_new(0, start_save_threaded, 0, 0); test_creation(create_arc_thread, g_task_count, g_thread_count); g_thread_join(thread); sc_memory_shutdown(SC_FALSE); }