Replace general array_reverse with ts_tree_array_reverse
This commit is contained in:
parent
2854983342
commit
b98669c7e6
4 changed files with 12 additions and 17 deletions
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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 *);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue