triple.c 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. #include "triple.h"
  2. // Extern inline prototypes.
  3. LSUP_Term *LSUP_triple_pos (const LSUP_Triple *trp, LSUP_TriplePos n);
  4. LSUP_Buffer *LSUP_btriple_pos (const LSUP_BufferTriple *trp, LSUP_TriplePos n);
  5. LSUP_Triple *
  6. LSUP_triple_new(LSUP_Term *s, LSUP_Term *p, LSUP_Term *o)
  7. {
  8. LSUP_Triple *spo = malloc (sizeof (*spo));
  9. if (!spo) return NULL;
  10. if (UNLIKELY (LSUP_triple_init (spo, s, p, o))) {
  11. free (spo);
  12. return NULL;
  13. }
  14. return spo;
  15. }
  16. LSUP_Triple *
  17. LSUP_triple_new_from_btriple (const LSUP_BufferTriple *sspo)
  18. {
  19. LSUP_Triple *spo = malloc (sizeof (*spo));
  20. if (!spo) return NULL;
  21. spo->s = LSUP_term_new_from_buffer (sspo->s);
  22. spo->p = LSUP_term_new_from_buffer (sspo->p);
  23. spo->o = LSUP_term_new_from_buffer (sspo->o);
  24. return spo;
  25. }
  26. LSUP_BufferTriple *
  27. LSUP_btriple_new_from_triple (const LSUP_Triple *spo)
  28. {
  29. LSUP_BufferTriple *sspo = malloc (sizeof (*sspo));
  30. if (!sspo) return NULL;
  31. sspo->s = LSUP_buffer_new_from_term (spo->s);
  32. sspo->p = LSUP_buffer_new_from_term (spo->p);
  33. sspo->o = LSUP_buffer_new_from_term (spo->o);
  34. return sspo;
  35. }
  36. LSUP_rc
  37. LSUP_triple_init (LSUP_Triple *spo, LSUP_Term *s, LSUP_Term *p, LSUP_Term *o)
  38. {
  39. spo->s = s;
  40. spo->p = p;
  41. spo->o = o;
  42. return LSUP_OK;
  43. }
  44. void
  45. LSUP_triple_done (LSUP_Triple *spo)
  46. {
  47. if (UNLIKELY (!spo)) return;
  48. LSUP_term_done (spo->s);
  49. LSUP_term_done (spo->p);
  50. LSUP_term_done (spo->o);
  51. }
  52. void
  53. LSUP_triple_free (LSUP_Triple *spo)
  54. {
  55. if (UNLIKELY (!spo)) return;
  56. LSUP_term_free (spo->s);
  57. LSUP_term_free (spo->p);
  58. LSUP_term_free (spo->o);
  59. free (spo);
  60. }
  61. /* Inline extern prototypes. */
  62. LSUP_Key LSUP_triple_hash (const LSUP_Triple *trp);