1*aaef562fSAndrew Rist /**************************************************************
2cdf0e10cSrcweir  *
3*aaef562fSAndrew Rist  * Licensed to the Apache Software Foundation (ASF) under one
4*aaef562fSAndrew Rist  * or more contributor license agreements.  See the NOTICE file
5*aaef562fSAndrew Rist  * distributed with this work for additional information
6*aaef562fSAndrew Rist  * regarding copyright ownership.  The ASF licenses this file
7*aaef562fSAndrew Rist  * to you under the Apache License, Version 2.0 (the
8*aaef562fSAndrew Rist  * "License"); you may not use this file except in compliance
9*aaef562fSAndrew Rist  * with the License.  You may obtain a copy of the License at
10*aaef562fSAndrew Rist  *
11*aaef562fSAndrew Rist  *   http://www.apache.org/licenses/LICENSE-2.0
12*aaef562fSAndrew Rist  *
13*aaef562fSAndrew Rist  * Unless required by applicable law or agreed to in writing,
14*aaef562fSAndrew Rist  * software distributed under the License is distributed on an
15*aaef562fSAndrew Rist  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*aaef562fSAndrew Rist  * KIND, either express or implied.  See the License for the
17*aaef562fSAndrew Rist  * specific language governing permissions and limitations
18*aaef562fSAndrew Rist  * under the License.
19*aaef562fSAndrew Rist  *
20*aaef562fSAndrew Rist  *************************************************************/
21*aaef562fSAndrew Rist 
22*aaef562fSAndrew Rist 
23cdf0e10cSrcweir 
24cdf0e10cSrcweir #ifndef INCLUDED_SLIDESHOW_ACCUMULATION_HXX
25cdf0e10cSrcweir #define INCLUDED_SLIDESHOW_ACCUMULATION_HXX
26cdf0e10cSrcweir 
27cdf0e10cSrcweir #include <sal/types.h>
28cdf0e10cSrcweir #include <rtl/ustring.hxx>
29cdf0e10cSrcweir 
30cdf0e10cSrcweir 
31cdf0e10cSrcweir namespace slideshow
32cdf0e10cSrcweir {
33cdf0e10cSrcweir     namespace internal
34cdf0e10cSrcweir     {
35cdf0e10cSrcweir         /** Generic accumulation.
36cdf0e10cSrcweir 
37cdf0e10cSrcweir         	This template handles value accumulation across repeated
38cdf0e10cSrcweir         	effect runs: returned is the end value times the repeat
39cdf0e10cSrcweir         	count, plus the current value.
40cdf0e10cSrcweir 
41cdf0e10cSrcweir         	@param rEndValue
42cdf0e10cSrcweir             End value of the simple animation.
43cdf0e10cSrcweir 
44cdf0e10cSrcweir             @param nRepeatCount
45cdf0e10cSrcweir             Number of completed repeats (i.e. 0 during the first
46cdf0e10cSrcweir             effect run)
47cdf0e10cSrcweir 
48cdf0e10cSrcweir             @param rCurrValue
49cdf0e10cSrcweir             Current animation value
50cdf0e10cSrcweir          */
accumulate(const ValueType & rEndValue,sal_uInt32 nRepeatCount,const ValueType & rCurrValue)51cdf0e10cSrcweir         template< typename ValueType > ValueType accumulate( const ValueType& 	rEndValue,
52cdf0e10cSrcweir                                                              sal_uInt32 		nRepeatCount,
53cdf0e10cSrcweir                                                              const ValueType& 	rCurrValue )
54cdf0e10cSrcweir         {
55cdf0e10cSrcweir             return nRepeatCount*rEndValue + rCurrValue;
56cdf0e10cSrcweir         }
57cdf0e10cSrcweir 
58cdf0e10cSrcweir         /// Specialization for non-addable enums/constant values
accumulate(const sal_Int16 &,sal_uInt32,const sal_Int16 & rCurrValue)59cdf0e10cSrcweir         template<> sal_Int16 accumulate< sal_Int16 >( const sal_Int16&,
60cdf0e10cSrcweir                                                       sal_uInt32,
61cdf0e10cSrcweir                                                       const sal_Int16& 	rCurrValue )
62cdf0e10cSrcweir         {
63cdf0e10cSrcweir             // always return rCurrValue, it's forbidden to add enums/constant values...
64cdf0e10cSrcweir             return rCurrValue;
65cdf0e10cSrcweir         }
66cdf0e10cSrcweir 
67cdf0e10cSrcweir         /// Specialization for non-addable strings
accumulate(const::rtl::OUString &,sal_uInt32,const::rtl::OUString & rCurrValue)68cdf0e10cSrcweir         template<> ::rtl::OUString accumulate< ::rtl::OUString >( const ::rtl::OUString&,
69cdf0e10cSrcweir                                                                   sal_uInt32,
70cdf0e10cSrcweir                                                                   const ::rtl::OUString& 	rCurrValue )
71cdf0e10cSrcweir         {
72cdf0e10cSrcweir             // always return rCurrValue, it's impossible to add strings...
73cdf0e10cSrcweir             return rCurrValue;
74cdf0e10cSrcweir         }
75cdf0e10cSrcweir 
76cdf0e10cSrcweir         /// Specialization for non-addable bools
accumulate(const bool &,sal_uInt32,const bool & bCurrValue)77cdf0e10cSrcweir         template<> bool accumulate< bool >( const bool&,
78cdf0e10cSrcweir                                             sal_uInt32,
79cdf0e10cSrcweir                                             const bool&	 	bCurrValue )
80cdf0e10cSrcweir         {
81cdf0e10cSrcweir             // always return bCurrValue, SMIL spec requires to ignore
82cdf0e10cSrcweir             // cumulative behaviour for bools.
83cdf0e10cSrcweir             return bCurrValue;
84cdf0e10cSrcweir         }
85cdf0e10cSrcweir     }
86cdf0e10cSrcweir }
87cdf0e10cSrcweir 
88cdf0e10cSrcweir #endif /* INCLUDED_SLIDESHOW_ACCUMULATION_HXX */
89