Add generic add, mul, sub & div over containers.

This commit is contained in:
Patrick Pelissier committed 2017-03-04 23:51:00 +01:00
1 parent 709cd07995
commit 03eaceaf35
1 file changed
+73
+73
View File
@@ -226,6 +226,79 @@
M_IF_METHOD(EXT_ALGO, type_oplist)( \
M_GET_EXT_ALGO type_oplist (name, cont_oplist, type_oplist) \
, ) \
\
M_IF_METHOD(ADD, type_oplist)( \
static inline void M_C(name, _add) (container_t dst, const container_t src) \
{ \
it_t itSrc; \
it_t itDst; \
for (M_GET_IT_FIRST cont_oplist (itSrc, src) , \
M_GET_IT_FIRST cont_oplist (itDst, dst) ; \
!M_GET_IT_END_P cont_oplist (itSrc) \
&& !M_GET_IT_END_P cont_oplist (itDst) ; \
M_GET_IT_NEXT cont_oplist (itSrc), \
M_GET_IT_NEXT cont_oplist (itDst) ) { \
type_t *dstItem = M_GET_IT_REF cont_oplist (itDst); \
const type_t *srcItem = M_GET_IT_REF cont_oplist (itSrc); \
M_GET_ADD type_oplist (*dstItem, *dstItem, *srcItem); \
} \
} \
, /* NO_ADD METHOD */ ) \
\
M_IF_METHOD(SUB, type_oplist)( \
static inline void M_C(name, _sub) (container_t dst, const container_t src) \
{ \
it_t itSrc; \
it_t itDst; \
for (M_GET_IT_FIRST cont_oplist (itSrc, src) , \
M_GET_IT_FIRST cont_oplist (itDst, dst) ; \
!M_GET_IT_END_P cont_oplist (itSrc) \
&& !M_GET_IT_END_P cont_oplist (itDst) ; \
M_GET_IT_NEXT cont_oplist (itSrc), \
M_GET_IT_NEXT cont_oplist (itDst) ) { \
type_t *dstItem = M_GET_IT_REF cont_oplist (itDst); \
const type_t *srcItem = M_GET_IT_REF cont_oplist (itSrc); \
M_GET_SUB type_oplist (*dstItem, *dstItem, *srcItem); \
} \
} \
, /* NO_SUB METHOD */ ) \
\
M_IF_METHOD(MUL, type_oplist)( \
static inline void M_C(name, _mul) (container_t dst, const container_t src) \
{ \
it_t itSrc; \
it_t itDst; \
for (M_GET_IT_FIRST cont_oplist (itSrc, src) , \
M_GET_IT_FIRST cont_oplist (itDst, dst) ; \
!M_GET_IT_END_P cont_oplist (itSrc) \
&& !M_GET_IT_END_P cont_oplist (itDst) ; \
M_GET_IT_NEXT cont_oplist (itSrc), \
M_GET_IT_NEXT cont_oplist (itDst) ) { \
type_t *dstItem = M_GET_IT_REF cont_oplist (itDst); \
const type_t *srcItem = M_GET_IT_REF cont_oplist (itSrc); \
M_GET_MUL type_oplist (*dstItem, *dstItem, *srcItem); \
} \
} \
, /* NO_MUL METHOD */ ) \
\
M_IF_METHOD(DIV, type_oplist)( \
static inline void M_C(name, _div) (container_t dst, const container_t src) \
{ \
it_t itSrc; \
it_t itDst; \
for (M_GET_IT_FIRST cont_oplist (itSrc, src) , \
M_GET_IT_FIRST cont_oplist (itDst, dst) ; \
!M_GET_IT_END_P cont_oplist (itSrc) \
&& !M_GET_IT_END_P cont_oplist (itDst) ; \
M_GET_IT_NEXT cont_oplist (itSrc), \
M_GET_IT_NEXT cont_oplist (itDst) ) { \
type_t *dstItem = M_GET_IT_REF cont_oplist (itDst); \
const type_t *srcItem = M_GET_IT_REF cont_oplist (itSrc); \
M_GET_DIV type_oplist (*dstItem, *dstItem, *srcItem); \
} \
} \
, /* NO_DIV METHOD */ ) \
\
//TODO: const_iterator & CM_EACH missing...
//TODO: Algorithm missing