diff --git a/m-shared.h b/m-shared.h index 3af8899c..2f95fa35 100644 --- a/m-shared.h +++ b/m-shared.h @@ -54,7 +54,8 @@ INIT_SET(M_C3(shared_, name, _init_set)), \ SET(M_C3(shared_, name, _set)) \ INIT_MOVE(M_C3(shared_, name, _init_move)), \ - MOVE(M_C3(shared_, name, _move)) \ + MOVE(M_C3(shared_, name, _move)), \ + SWAP(M_C3(shared_, name, _swap)) \ ) #define SHAREDI_PTR_DEF2(name, type, oplist) \ @@ -173,6 +174,17 @@ M_C3(shared_, name, _init_move)(dest, shared); \ } \ \ + static inline void \ + M_C3(shared_, name, _swap)(M_C3(shared_, name, _t) p1, \ + M_C3(shared_, name, _t) p2) \ + { \ + SHAREDI_CONTRACT(p1); \ + SHAREDI_CONTRACT(p2); \ + M_SWAP (struct M_C3(shared_, name, _s)*, *p1, *p2); \ + SHAREDI_CONTRACT(p1); \ + SHAREDI_CONTRACT(p2); \ + } \ + \ static inline const type * \ M_C3(shared_, name, _cref)(const M_C3(shared_, name, _t) shared) \ { \