aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMistivia <i@mistivia.com>2025-06-08 22:07:08 +0800
committerMistivia <i@mistivia.com>2025-06-08 22:07:08 +0800
commit470bd2269ba68d29b36159e1765764d91bee661d (patch)
tree9b7521f8915302f98d4593b661630dedff7c500d
parent2d372ca3d44cb050d0dad577c41205177fcef023 (diff)
add move
-rw-r--r--src/pqueue.h6
-rw-r--r--src/vec.h8
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); \
} \
diff --git a/src/vec.h b/src/vec.h
index e39c09c..bd8723c 100644
--- a/src/vec.h
+++ b/src/vec.h
@@ -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);