From 29d3439900bbf2c4878573166806b8c8ccfd2e14 Mon Sep 17 00:00:00 2001 From: Patrick Pelissier Date: Tue, 14 Mar 2017 21:31:47 +0100 Subject: [PATCH] Add SWAP for string --- m-string.h | 13 +++++++++++++ tests/test-mstring.c | 6 ++++++ 2 files changed, 19 insertions(+) diff --git a/m-string.h b/m-string.h index cecfa187..a86bbc3c 100644 --- a/m-string.h +++ b/m-string.h @@ -215,6 +215,18 @@ string_init_move(string_t v1, string_t v2) STRING_CONTRACT (v1); } +static inline void +string_swap(string_t v1, string_t v2) +{ + STRING_CONTRACT (v1); + STRING_CONTRACT (v2); + M_SWAP (size_t, v1->size, v2->size); + M_SWAP (size_t, v1->alloc, v2->alloc); + M_SWAP (char *, v1->ptr, v2->ptr); + STRING_CONTRACT (v1); + STRING_CONTRACT (v2); +} + static inline void string_move(string_t v1, string_t v2) { @@ -677,6 +689,7 @@ string_in_str(string_t v, FILE *f) #define STRING_OPLIST \ (INIT(string_init),INIT_SET(string_init_set), SET(string_set), \ INIT_MOVE(string_init_move), MOVE(string_move), \ + SWAP(string_swap), \ CLEAR(string_clear), HASH(string_hash), EQUAL(string_equal_p), \ CMP(string_cmp), TYPE(string_t), GET_STR(string_get_str), \ OUT_STR(string_out_str), IN_STR(string_in_str), \ diff --git a/tests/test-mstring.c b/tests/test-mstring.c index 1989ad1f..2cf713a7 100644 --- a/tests/test-mstring.c +++ b/tests/test-mstring.c @@ -191,6 +191,12 @@ int main(void) fclose(f); assert (string_equal_p(s1, s2)); + string_set_str(s1, "AZERTY"); + string_set_str(s2, "QWERTY"); + string_swap (s1, s2); + assert(string_equal_str_p (s1, "QWERTY")); + assert(string_equal_str_p (s2, "AZERTY")); + string_clear (s1); exit(0); }