diff options
| author | Mistivia <i@mistivia.com> | 2025-06-08 22:07:08 +0800 |
|---|---|---|
| committer | Mistivia <i@mistivia.com> | 2025-06-08 22:07:08 +0800 |
| commit | 470bd2269ba68d29b36159e1765764d91bee661d (patch) | |
| tree | 9b7521f8915302f98d4593b661630dedff7c500d | |
| parent | 2d372ca3d44cb050d0dad577c41205177fcef023 (diff) | |
add move
| -rw-r--r-- | src/pqueue.h | 6 | ||||
| -rw-r--r-- | src/vec.h | 8 |
2 files changed, 14 insertions, 0 deletions
diff --git a/src/pqueue.h b/src/pqueue.h index 0865051..34b8a55 100644 --- a/src/pqueue.h +++ b/src/pqueue.h @@ -11,6 +11,7 @@ void T##PQueue_push(T##PQueue *self, T *elem); \ void T##PQueue_pop(T##PQueue *self); \ T* T##PQueue_top(T##PQueue *self); \ + T##PQueue T##PQueue_move(T##PQueue *self); \ void T##PQueue_free(T##PQueue *self); \ PQUEUE_DEF(Int); @@ -65,6 +66,11 @@ PQUEUE_DEF(String); if (self->vec.size == 0) return NULL; \ return self->vec.buffer; \ } \ + T##PQueue T##PQueue_move(T##PQueue *self) { \ + T##PQueue dup; \ + dup.vec = T##Vector_move(&self->vec); \ + return dup; \ + } \ void T##PQueue_free(T##PQueue *self) { \ T##Vector_free(&self->vec); \ } \ @@ -22,6 +22,7 @@ T* T##Vector_end(T##Vector *self); \ T* T##Vector_ref(T##Vector *self, size_t n); \ void T##Vector_swap(T##Vector *self, int i, int j); \ + T##Vector T##Vector_move(T##Vector *self); \ void T##Vector_free(T##Vector *self); #define VECTOR_IMPL(T) \ @@ -73,6 +74,13 @@ memcpy(self->buffer + i, self->buffer + j, sizeof(T)); \ memcpy(self->buffer + j, &buf, sizeof(T)); \ } \ + T##Vector T##Vector_move(T##Vector *self) { \ + T##Vector dup = *self; \ + self->buffer = NULL; \ + self->size = 0; \ + self->cap = 0; \ + return dup; \ + } \ void T##Vector_free(T##Vector *self) { free(self->buffer); } VECTOR_DEF(Int); |
