#include "triple.h" // Extern inline prototypes. LSUP_Term *LSUP_triple_pos (const LSUP_Triple *trp, LSUP_TriplePos n); LSUP_Buffer *LSUP_btriple_pos (const LSUP_BufferTriple *trp, LSUP_TriplePos n); LSUP_Triple * LSUP_triple_new(LSUP_Term *s, LSUP_Term *p, LSUP_Term *o) { LSUP_Triple *spo = malloc (sizeof (*spo)); if (!spo) return NULL; if (UNLIKELY (LSUP_triple_init (spo, s, p, o))) { free (spo); return NULL; } return spo; } LSUP_Triple * LSUP_triple_new_from_btriple (const LSUP_BufferTriple *sspo) { LSUP_Triple *spo = malloc (sizeof (*spo)); if (!spo) return NULL; spo->s = LSUP_term_new_from_buffer (sspo->s); spo->p = LSUP_term_new_from_buffer (sspo->p); spo->o = LSUP_term_new_from_buffer (sspo->o); return spo; } LSUP_BufferTriple * LSUP_btriple_new_from_triple (const LSUP_Triple *spo) { LSUP_BufferTriple *sspo = malloc (sizeof (*sspo)); if (!sspo) return NULL; sspo->s = LSUP_buffer_new_from_term (spo->s); sspo->p = LSUP_buffer_new_from_term (spo->p); sspo->o = LSUP_buffer_new_from_term (spo->o); return sspo; } LSUP_rc LSUP_triple_init (LSUP_Triple *spo, LSUP_Term *s, LSUP_Term *p, LSUP_Term *o) { spo->s = s; spo->p = p; spo->o = o; return LSUP_OK; } void LSUP_triple_done (LSUP_Triple *spo) { if (UNLIKELY (!spo)) return; LSUP_term_done (spo->s); LSUP_term_done (spo->p); LSUP_term_done (spo->o); } void LSUP_triple_free (LSUP_Triple *spo) { if (UNLIKELY (!spo)) return; LSUP_term_free (spo->s); LSUP_term_free (spo->p); LSUP_term_free (spo->o); free (spo); } /* Inline extern prototypes. */ LSUP_Key LSUP_triple_hash (const LSUP_Triple *trp);