Browse Source

Stick subject to link map.

scossu 3 days ago
parent
commit
c077951ccc
5 changed files with 18 additions and 9 deletions
  1. 4 4
      include/term.h
  2. 4 3
      src/codec/grammar_ttl.y
  3. 1 1
      src/graph.c
  4. 1 1
      src/term.c
  5. 8 0
      test/test_graph.c

+ 4 - 4
include/term.h

@@ -553,16 +553,16 @@ LSUP_term_set_next (LSUP_TermSet *ts, size_t *i, LSUP_Term **term);
  *
  * Terms can be added to a link map with #LSUP_term_set_add().
  *
- * @param[in] type Type of links that the link map shall contain.
- * @sa #LSUP_LinkType
- *
  * @param[in] linked_term Term to be linked to map. The term is copied and may
  *  be freed after this function call.
  *
+ * @param[in] type Type of links that the link map shall contain.
+ * @sa #LSUP_LinkType
+ *
  * @return a new empty link map.
  */
 LSUP_LinkMap *
-LSUP_link_map_new (LSUP_LinkType type, const LSUP_Term *linked_term);
+LSUP_link_map_new (const LSUP_Term *linked_term, LSUP_LinkType type);
 
 
 /** @brief Free a link map.

+ 4 - 3
src/codec/grammar_ttl.y

@@ -124,8 +124,8 @@ objectList(A) ::= object(O) . [IRIREF] {
 
 %type subject { LSUP_Term * }
 %destructor subject { LSUP_term_free ($$); }
-subject 	::= resource .
-subject 	::= blank .
+subject 	::= resource(D) . { state->lms = D; }
+subject 	::= blank(D) . { state->lms = D; }
 
 %type predicate { LSUP_Term * }
 %destructor predicate { LSUP_term_free ($$); }
@@ -218,7 +218,8 @@ blank(A)    ::= LBRACKET RBRACKET . [BNODE_ID] {
             }
 blank(A)    ::= LBRACKET predObjList(L) RBRACKET . [BNODE_ID] {
                 A = LSUP_term_new (LSUP_TERM_BNODE, NULL, NULL);
-                state->ct += LSUP_graph_add_link_map (state->it, A, L);
+                state->lms = A;
+                state->ct += LSUP_graph_add_link_map (state->it, L);
                 LOG_TRACE("Created list BN: _:%s", A->data);
 
                 LSUP_link_map_free (L);

+ 1 - 1
src/graph.c

@@ -722,7 +722,7 @@ LSUP_graph_connections (
     }
     LSUP_graph_iter_free(it);
 
-    LSUP_LinkMap *ret = LSUP_link_map_new (type, t);
+    LSUP_LinkMap *ret = LSUP_link_map_new (t, type);
     size_t i = 0;
     LSUP_Term *lt;
     while (LSUP_term_set_next (lts, &i, &lt) != LSUP_END) {

+ 1 - 1
src/term.c

@@ -605,7 +605,7 @@ LSUP_term_set_free (LSUP_TermSet *ts)
 
 
 LSUP_LinkMap *
-LSUP_link_map_new (LSUP_LinkType type, const LSUP_Term *linked_term)
+LSUP_link_map_new (const LSUP_Term *linked_term, LSUP_LinkType type)
 {
     LSUP_LinkMap *lm;
     MALLOC_GUARD (lm, NULL);

+ 8 - 0
test/test_graph.c

@@ -84,6 +84,7 @@ _graph_add (LSUP_StoreType type)
     ASSERT (!LSUP_graph_equals (gr2, gr), "Graphs should not be equal!");
 
     LSUP_graph_free (gr);
+    LSUP_graph_free (gr2);
     if (type != LSUP_STORE_HTABLE) LSUP_store_free (store);
 
     return 0;
@@ -199,6 +200,8 @@ _graph_link_map (LSUP_StoreType type)
         */
         i++;
     }
+    LSUP_link_map_iter_free (lmit);
+    LSUP_link_map_free (lmap);
     EXPECT_INT_EQ (i, 4);
 
     i = 0; j = 0;
@@ -224,6 +227,8 @@ _graph_link_map (LSUP_StoreType type)
         */
         i++;
     }
+    LSUP_link_map_iter_free (lmit);
+    LSUP_link_map_free (lmap);
     EXPECT_INT_EQ (i, 2);
 
     i = 0; j = 0;
@@ -248,10 +253,13 @@ _graph_link_map (LSUP_StoreType type)
         */
         i++;
     }
+    LSUP_link_map_iter_free (lmit);
+    LSUP_link_map_free (lmap);
     EXPECT_INT_EQ (i, 1);
 
     free_triples (trp);
     LSUP_graph_free (gr);
+    if (type != LSUP_STORE_HTABLE) LSUP_store_free (store);
 
     return 0;
 }