From 1739de33c27dca0303f1bd7903c6edd01fcc1bcd Mon Sep 17 00:00:00 2001 From: Patrick Pelissier Date: Sun, 23 Apr 2017 22:52:47 +0200 Subject: [PATCH] Remove hard dependency of INIT_MOVE operator for buffer. --- m-buffer.h | 4 ++-- m-core.h | 7 +++++++ 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/m-buffer.h b/m-buffer.h index c249ae7b..22fa5d22 100644 --- a/m-buffer.h +++ b/m-buffer.h @@ -222,7 +222,7 @@ M_C3(buffer_, name, _init)(buffer_t v, size_t size) \ if (!BUFFERI_POLICY_P((policy), BUFFER_PUSH_INIT_POP_MOVE)) { \ M_GET_SET oplist (*data, v->data[v->idx_cons]); \ } else { \ - M_GET_INIT_MOVE oplist (*data, v->data[v->idx_cons]); \ + M_DO_INIT_MOVE (oplist, *data, v->data[v->idx_cons]); \ } \ v->idx_cons = (v->idx_cons +1) % BUFFERI_SIZE(m_size); \ } else { \ @@ -230,7 +230,7 @@ M_C3(buffer_, name, _init)(buffer_t v, size_t size) \ if (!BUFFERI_POLICY_P((policy), BUFFER_PUSH_INIT_POP_MOVE)) { \ M_GET_SET oplist (*data, v->data[v->idx_prod]); \ } else { \ - M_GET_INIT_MOVE oplist (*data, v->data[v->idx_prod]); \ + M_DO_INIT_MOVE (oplist, *data, v->data[v->idx_prod]); \ } \ } \ v->number --; \ diff --git a/m-core.h b/m-core.h index 2f18543d..9271ddc7 100644 --- a/m-core.h +++ b/m-core.h @@ -901,6 +901,13 @@ m_core_hash (const void *str, size_t length) so that the first argument becomes a pointer to the destination. */ #define M_IPTR(...) ( & __VA_ARGS__ ) +/* Perform an INIT_MOVE if present, or emulate it using INIT_SET/CLEAR + otherwise */ +#define M_DO_INIT_MOVE(oplist, dest, src) do { \ + M_IF_METHOD(INIT_MOVE, oplist)(M_GET_INIT_MOVE oplist (dest, src);, \ + M_GET_INIT_SET oplist (dest, src) ; \ + M_GET_CLEAR oplist (src); ) \ + } while (0) /************************************************************/ /******************** Syntax Enhancing **********************/