diff options
author | David Robillard <d@drobilla.net> | 2018-06-03 22:15:53 +0200 |
---|---|---|
committer | David Robillard <d@drobilla.net> | 2020-10-27 13:13:58 +0100 |
commit | 6a91bfca72fc2cfd7ba1002174475d71e35b2969 (patch) | |
tree | d1689b03faf96f58ac4c7ca9081a600491d09a02 /src/cursor.c | |
parent | 93e54363f5ae251acee94051f77305f60f0158c8 (diff) | |
download | serd-6a91bfca72fc2cfd7ba1002174475d71e35b2969.tar.gz serd-6a91bfca72fc2cfd7ba1002174475d71e35b2969.tar.bz2 serd-6a91bfca72fc2cfd7ba1002174475d71e35b2969.zip |
Add SerdCursor to public API
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..0ee84446 --- /dev/null +++ b/src/cursor.c @@ -0,0 +1,75 @@ +/* + Copyright 2018-2020 David Robillard <http://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; +} |