diff options
author | David Robillard <d@drobilla.net> | 2021-01-13 12:08:30 +0100 |
---|---|---|
committer | David Robillard <d@drobilla.net> | 2021-03-08 23:23:05 -0500 |
commit | 7c6c3159d1804f4855d9a4e0cd52486f61fcbab6 (patch) | |
tree | 1a678106cccba9bbbfb44deeadfa5bca3606e72c /src/cursor.c | |
parent | a90341129953e9b8e0e1d96fa52b10cbf34d1ea1 (diff) | |
download | serd-7c6c3159d1804f4855d9a4e0cd52486f61fcbab6.tar.gz serd-7c6c3159d1804f4855d9a4e0cd52486f61fcbab6.tar.bz2 serd-7c6c3159d1804f4855d9a4e0cd52486f61fcbab6.zip |
Add SerdCursor
Diffstat (limited to 'src/cursor.c')
-rw-r--r-- | src/cursor.c | 75 |
1 files changed, 75 insertions, 0 deletions
diff --git a/src/cursor.c b/src/cursor.c new file mode 100644 index 00000000..1c8dd35a --- /dev/null +++ b/src/cursor.c @@ -0,0 +1,75 @@ +/* + Copyright 2018-2020 David Robillard <d@drobilla.net> + + 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 <stdbool.h> +#include <stdlib.h> +#include <string.h> + +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_name(const SerdCursor* cursor) +{ + return cursor->file; +} + +unsigned +serd_cursor_line(const SerdCursor* cursor) +{ + return cursor->line; +} + +unsigned +serd_cursor_column(const SerdCursor* cursor) +{ + return cursor->col; +} |