blob: d4d9571dd81c4815672cc735d442bbf7b6507a63 [file] [log] [blame]
/**************************************************************
*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*
*************************************************************/
#if ! defined(COMPHELPER_MAKESEQUENCE_HXX_INCLUDED)
#define COMPHELPER_MAKESEQUENCE_HXX_INCLUDED
#include "com/sun/star/uno/Sequence.hxx"
#include "boost/preprocessor/cat.hpp"
#include "boost/preprocessor/repetition.hpp"
#include "boost/preprocessor/arithmetic/add.hpp"
namespace comphelper {
/** Creates a uno::Sequence out of one parameter.
*/
template <typename T>
inline ::com::sun::star::uno::Sequence<T> makeSequence( T const& element )
{
return ::com::sun::star::uno::Sequence<T>( &element, 1 );
}
#define COMPHELPER_MAKESEQUENCE_assign(z_, n_, unused_) \
p[n_] = BOOST_PP_CAT(element, n_);
/** The following preprocessor repetitions generate functions like
<pre>
template <typename T>
inline ::com::sun::star::uno::Sequence<T> makeSequence(
T const& element0, T const& element1, ... );
</pre>
which make a sequence out of the passed elements.
The maximum number of elements can be set by defining
COMPHELPER_MAKESEQUENCE_MAX_ARGS; its default is 12.
*/
#define COMPHELPER_MAKESEQUENCE_make(z_, n_, unused_) \
template <typename T> \
inline ::com::sun::star::uno::Sequence<T> makeSequence( \
BOOST_PP_ENUM_PARAMS(n_, T const& element) ) \
{ \
::com::sun::star::uno::Sequence<T> seq( n_ ); \
T * p = seq.getArray(); \
BOOST_PP_REPEAT(n_, COMPHELPER_MAKESEQUENCE_assign, ~) \
return seq; \
}
#if ! defined(COMPHELPER_MAKESEQUENCE_MAX_ARGS)
#define COMPHELPER_MAKESEQUENCE_MAX_ARGS 12
#endif
BOOST_PP_REPEAT_FROM_TO(2, BOOST_PP_ADD(COMPHELPER_MAKESEQUENCE_MAX_ARGS, 1),
COMPHELPER_MAKESEQUENCE_make, ~)
#undef COMPHELPER_MAKESEQUENCE_MAX_ARGS
#undef COMPHELPER_MAKESEQUENCE_make
#undef COMPHELPER_MAKESEQUENCE_assign
} // namespace comphelper
#endif // ! defined(COMPHELPER_MAKESEQUENCE_HXX_INCLUDED)