include/comphelper/sequence.hxx | 41 ++++++---------------------------------- 1 file changed, 7 insertions(+), 34 deletions(-)
New commits: commit 289cff91eb67c27874ba11115b9188a05ea8768d Author: Mike Kaganski <mike.kagan...@collabora.com> AuthorDate: Fri Mar 1 11:33:28 2019 +0100 Commit: Mike Kaganski <mike.kagan...@collabora.com> CommitDate: Fri Mar 1 21:27:10 2019 +0100 Use parameter pack + folding to have only one concatSequences Change-Id: I4a303f8aab7a0e2af83dd9be7c269dc6855311a9 Reviewed-on: https://gerrit.libreoffice.org/68542 Reviewed-by: Mike Kaganski <mike.kagan...@collabora.com> Tested-by: Mike Kaganski <mike.kagan...@collabora.com> diff --git a/include/comphelper/sequence.hxx b/include/comphelper/sequence.hxx index d80534f4a8c7..59cd74fb1b83 100644 --- a/include/comphelper/sequence.hxx +++ b/include/comphelper/sequence.hxx @@ -43,21 +43,15 @@ namespace comphelper } } - /// concat two sequences - template <class T> - inline css::uno::Sequence<T> concatSequences(const css::uno::Sequence<T>& _rLeft, const css::uno::Sequence<T>& _rRight) + /// concat several sequences + template <class T, class... Ss> + inline css::uno::Sequence<T> concatSequences(const css::uno::Sequence<T>& rS1, const Ss&... rSn) { - sal_Int32 nLeft(_rLeft.getLength()), nRight(_rRight.getLength()); - const T* pLeft = _rLeft.getConstArray(); - const T* pRight = _rRight.getConstArray(); - - sal_Int32 nReturnLen(nLeft + nRight); - css::uno::Sequence<T> aReturn(nReturnLen); + // unary fold to disallow empty parameter pack: at least have one sequence in rSn + css::uno::Sequence<T> aReturn(rS1.getLength() + (... + rSn.getLength())); T* pReturn = aReturn.getArray(); - - internal::implCopySequence(pLeft, pReturn, nLeft); - internal::implCopySequence(pRight, pReturn, nRight); - + (internal::implCopySequence(rS1.getConstArray(), pReturn, rS1.getLength()), ..., + internal::implCopySequence(rSn.getConstArray(), pReturn, rSn.getLength())); return aReturn; } @@ -89,27 +83,6 @@ namespace comphelper return ret; } - /// concat three sequences - template <class T> - inline css::uno::Sequence<T> concatSequences(const css::uno::Sequence<T>& _rLeft, const css::uno::Sequence<T>& _rMiddle, const css::uno::Sequence<T>& _rRight) - { - sal_Int32 nLeft(_rLeft.getLength()), nMiddle(_rMiddle.getLength()), nRight(_rRight.getLength()); - const T* pLeft = _rLeft.getConstArray(); - const T* pMiddle = _rMiddle.getConstArray(); - const T* pRight = _rRight.getConstArray(); - - sal_Int32 nReturnLen(nLeft + nMiddle + nRight); - css::uno::Sequence<T> aReturn(nReturnLen); - T* pReturn = aReturn.getArray(); - - internal::implCopySequence(pLeft, pReturn, nLeft); - internal::implCopySequence(pMiddle, pReturn, nMiddle); - internal::implCopySequence(pRight, pReturn, nRight); - - return aReturn; - } - - /// remove a specified element from a sequences template<class T> inline void removeElementAt(css::uno::Sequence<T>& _rSeq, sal_Int32 _nPos) _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits