Skip to content

Commit

Permalink
Add 'cowl_ontology_set_manager'
Browse files Browse the repository at this point in the history
  • Loading branch information
IvanoBilenchi committed Aug 29, 2024
1 parent afc4f84 commit 61692ed
Show file tree
Hide file tree
Showing 4 changed files with 29 additions and 3 deletions.
10 changes: 10 additions & 0 deletions include/cowl_ontology.h
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,16 @@ COWL_API
COWL_PURE
CowlManager *cowl_ontology_get_manager(CowlOntology *onto);

/**
* Sets the manager of this ontology.
*
* @param onto The ontology.
* @param manager The manager.
* @return Return code.
*/
COWL_API
cowl_ret cowl_ontology_set_manager(CowlOntology *onto, CowlManager *manager);

/**
* Gets the symbol table of this ontology.
*
Expand Down
2 changes: 1 addition & 1 deletion lib/ulib
8 changes: 8 additions & 0 deletions src/cowl_ontology.c
Original file line number Diff line number Diff line change
Expand Up @@ -127,6 +127,14 @@ CowlManager *cowl_ontology_get_manager(CowlOntology *onto) {
return onto->manager;
}

cowl_ret cowl_ontology_set_manager(CowlOntology *onto, CowlManager *manager) {
if (onto->manager == manager) return COWL_OK;
cowl_manager_remove_ontology(onto->manager, onto);
cowl_release(onto->manager);
onto->manager = cowl_retain(manager);
return cowl_manager_add_ontology(manager, onto);
}

CowlSymTable *cowl_ontology_get_sym_table(CowlOntology *onto) {
return onto->st;
}
Expand Down
12 changes: 10 additions & 2 deletions test/tests/cowl_manager_tests.c
Original file line number Diff line number Diff line change
Expand Up @@ -87,13 +87,21 @@ bool cowl_test_manager_read_ontology(void) {
ret = cowl_manager_write_path(manager, onto, ustring_literal(COWL_ONTOLOGY_LOG));
utest_assert_uint(ret, ==, COWL_OK);

cowl_release(onto);
CowlManager *other_manager = cowl_manager();
utest_assert_not_null(other_manager);

ret = cowl_ontology_set_manager(onto, other_manager);
utest_assert_uint(ret, ==, COWL_OK);
utest_assert_uint(cowl_manager_ontology_count(manager), ==, 1);
utest_assert_uint(cowl_manager_ontology_count(other_manager), ==, 1);

cowl_release(onto);
utest_assert_uint(cowl_manager_ontology_count(other_manager), ==, 0);

cowl_release(import);
utest_assert_uint(cowl_manager_ontology_count(manager), ==, 0);

cowl_release_all(manager, stream);
cowl_release_all(manager, other_manager, stream);
return true;
}

Expand Down

0 comments on commit 61692ed

Please sign in to comment.