From d77ae556562490d6ce70fed690eca69a18ee4c46 Mon Sep 17 00:00:00 2001 From: David Robillard Date: Sun, 3 Jun 2018 22:15:53 +0200 Subject: Add SerdCursor to public API --- src/cursor.c | 74 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 74 insertions(+) create mode 100644 src/cursor.c (limited to 'src/cursor.c') diff --git a/src/cursor.c b/src/cursor.c new file mode 100644 index 00000000..ac9b24a9 --- /dev/null +++ b/src/cursor.c @@ -0,0 +1,74 @@ +/* + Copyright 2018 David Robillard + + Permission to use, copy, modify, and/or distribute this software for any + purpose with or without fee is hereby granted, provided that the above + copyright notice and this permission notice appear in all copies. + + THIS SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +*/ + +#include "cursor.h" + +#include +#include + +SerdCursor* +serd_cursor_new(const SerdNode* name, unsigned line, unsigned col) +{ + SerdCursor* cursor = (SerdCursor*)malloc(sizeof(SerdCursor)); + + cursor->file = name; + cursor->line = line; + cursor->col = col; + return cursor; +} + +SerdCursor* +serd_cursor_copy(const SerdCursor* cursor) +{ + if (!cursor) { + return NULL; + } + + SerdCursor* copy = (SerdCursor*)malloc(sizeof(SerdCursor)); + memcpy(copy, cursor, sizeof(SerdCursor)); + return copy; +} + +void +serd_cursor_free(SerdCursor* cursor) +{ + free(cursor); +} + +bool +serd_cursor_equals(const SerdCursor* l, const SerdCursor* r) +{ + return (l == r || (l && r && serd_node_equals(l->file, r->file) && + l->line == r->line && l->col == r->col)); +} + +const SerdNode* +serd_cursor_get_name(const SerdCursor* cursor) +{ + return cursor->file; +} + +unsigned +serd_cursor_get_line(const SerdCursor* cursor) +{ + return cursor->line; +} + +unsigned +serd_cursor_get_column(const SerdCursor* cursor) +{ + return cursor->col; +} -- cgit v1.2.1