123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155 |
- #ifndef LSUP_TERM_H
- #define LSUP_TERM_H
- #include <assert.h>
- #include <regex.h>
- #include "xxhash.h"
- #include "buffer.h"
- #define URI_REGEX_STR \
- "^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\\?([^#]*))?(#(.*))?"
- #define SEED 0
- #define LANG_SIZE 8
- typedef LSUP_Buffer LSUP_SerTerm;
- typedef XXH64_hash_t LSUP_TermHash64;
- typedef char langtag[LANG_SIZE];
- typedef enum LSUP_term_type {
- LSUP_TERM_UNDEFINED,
- LSUP_TERM_URI,
- LSUP_TERM_BNODE,
- LSUP_TERM_LITERAL
- } LSUP_term_type;
- typedef struct LSUP_Term {
- LSUP_term_type type;
-
-
-
- langtag lang;
- char *datatype;
- char *data;
- } LSUP_Term;
- int
- LSUP_term_init(
- LSUP_Term *term, LSUP_term_type type,
- char *data, char *datatype, char *lang);
- LSUP_Term *
- LSUP_term_new(LSUP_term_type type, char *data, char *datatype, char *lang);
- char *
- LSUP_term_gen_random_str();
- int LSUP_term_serialize(const LSUP_Term *term, LSUP_Buffer *sterm);
- int
- LSUP_term_deserialize(const LSUP_Buffer *sterm, LSUP_Term *term);
- inline LSUP_Key
- LSUP_sterm_to_key(const LSUP_SerTerm *sterm)
- {
- LSUP_Key key = (LSUP_Key)XXH64(sterm->addr, sterm->size, SEED);
- return key;
- }
- inline LSUP_Key
- LSUP_term_to_key(const LSUP_Term *term)
- {
- if (term == NULL)
- return NULL_KEY;
- LSUP_Buffer sterm_s;
- LSUP_Buffer *sterm = &sterm_s;
- LSUP_term_serialize(term, sterm);
- LSUP_Key key = LSUP_sterm_to_key(sterm);
- LSUP_buffer_done(sterm);
- return key;
- }
- bool LSUP_term_equals(const LSUP_Term *term1, const LSUP_Term *term2);
- void
- LSUP_term_done(LSUP_Term *term);
- void
- LSUP_term_free(LSUP_Term *term);
- #endif
|