Replace general array_reverse with ts_tree_array_reverse

This commit is contained in:
Max Brunsfeld 2017-07-24 21:02:26 -07:00
parent 2854983342
commit b98669c7e6
4 changed files with 12 additions and 17 deletions

View file

@ -58,9 +58,6 @@ extern "C" {
#define array_pop(self) ((self)->contents[--(self)->size])
#define array_reverse(self) \
array__reverse((VoidArray *)(self), array__elem_size(self))
// Private
typedef Array(void) VoidArray;
@ -118,18 +115,6 @@ static inline void array__splice(VoidArray *self, size_t element_size,
self->size += new_count - old_count;
}
static inline void array__reverse(VoidArray *self, size_t element_size) {
char swap[element_size];
char *contents = (char *)self->contents;
for (uint32_t i = 0, limit = self->size / 2; i < limit; i++) {
size_t offset = i * element_size;
size_t reverse_offset = (self->size - 1 - i) * element_size;
memcpy(&swap, contents + offset, element_size);
memcpy(contents + offset, contents + reverse_offset, element_size);
memcpy(contents + reverse_offset, &swap, element_size);
}
}
#ifdef __cplusplus
}
#endif

View file

@ -259,7 +259,7 @@ inline StackPopResult stack__iter(Stack *self, StackVersion version,
TreeArray trees = iterator->trees;
if (!should_stop)
ts_tree_array_copy(trees, &trees);
array_reverse(&trees);
ts_tree_array_reverse(&trees);
ts_stack__add_slice(
self,
node,

View file

@ -133,10 +133,19 @@ TreeArray ts_tree_array_remove_trailing_extras(TreeArray *self) {
}
self->size = i + 1;
array_reverse(&result);
ts_tree_array_reverse(&result);
return result;
}
void ts_tree_array_reverse(TreeArray *self) {
for (uint32_t i = 0, limit = self->size / 2; i < limit; i++) {
size_t reverse_index = self->size - 1 - i;
Tree *swap = self->contents[i];
self->contents[i] = self->contents[reverse_index];
self->contents[reverse_index] = swap;
}
}
Tree *ts_tree_make_error(Length size, Length padding, int32_t lookahead_char,
const TSLanguage *language) {
Tree *result = ts_tree_make_leaf(ts_builtin_sym_error, padding, size, language);

View file

@ -86,6 +86,7 @@ void ts_tree_array_delete(TreeArray *);
uint32_t ts_tree_array_essential_count(const TreeArray *);
TreeArray ts_tree_array_remove_last_n(TreeArray *, uint32_t);
TreeArray ts_tree_array_remove_trailing_extras(TreeArray *);
void ts_tree_array_reverse(TreeArray *);
Tree *ts_tree_make_leaf(TSSymbol, Length, Length, const TSLanguage *);
Tree *ts_tree_make_node(TSSymbol, uint32_t, Tree **, unsigned, const TSLanguage *);