1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
3 * This file is part of the LibreOffice project.
5 * This Source Code Form is subject to the terms of the Mozilla Public
6 * License, v. 2.0. If a copy of the MPL was not distributed with this
7 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
9 * This file incorporates work covered by the following license notice:
11 * Licensed to the Apache Software Foundation (ASF) under one or more
12 * contributor license agreements. See the NOTICE file distributed
13 * with this work for additional information regarding copyright
14 * ownership. The ASF licenses this file to you under the Apache
15 * License, Version 2.0 (the "License"); you may not use this file
16 * except in compliance with the License. You may obtain a copy of
17 * the License at http://www.apache.org/licenses/LICENSE-2.0 .
20 #ifndef INCLUDED_SCADDINS_SOURCE_ANALYSIS_ANALYSIS_HXX
21 #define INCLUDED_SCADDINS_SOURCE_ANALYSIS_ANALYSIS_HXX
24 #include <com/sun/star/sheet/XAddIn.hpp>
25 #include <com/sun/star/lang/XServiceName.hpp>
26 #include <com/sun/star/lang/XServiceInfo.hpp>
27 #include <com/sun/star/lang/XMultiServiceFactory.hpp>
28 #include <com/sun/star/sheet/addin/XAnalysis.hpp>
29 #include <com/sun/star/sheet/LocalizedName.hpp>
30 #include <com/sun/star/sheet/XCompatibilityNames.hpp>
31 #include <com/sun/star/sheet/NoConvergenceException.hpp>
33 #include <cppuhelper/implbase.hxx>
35 #include "analysisdefs.hxx"
36 #include "analysishelper.hxx"
40 namespace sca
{ namespace analysis
{
41 class ConvertDataList
;
44 css::uno::Reference
< css::uno::XInterface
> SAL_CALL
AnalysisAddIn_CreateInstance( const css::uno::Reference
< css::lang::XMultiServiceFactory
>& );
47 class AnalysisAddIn
: public cppu::WeakImplHelper
<
49 css::sheet::XCompatibilityNames
,
50 css::sheet::addin::XAnalysis
,
51 css::lang::XServiceName
,
52 css::lang::XServiceInfo
>
55 css::lang::Locale aFuncLoc
;
56 css::lang::Locale
* pDefLocales
;
57 sca::analysis::FuncDataList
* pFD
;
58 std::unique_ptr
<double[]> pFactDoubles
;
59 sca::analysis::ConvertDataList
* pCDL
;
60 std::locale aResLocale
;
62 sca::analysis::ScaAnyConverter aAnyConv
;
64 /// @throws css::uno::RuntimeException
65 OUString
GetFuncDescrStr(const char** pResId
, sal_uInt16 nStrIndex
);
66 void InitDefLocales();
67 inline const css::lang::Locale
& GetLocale( sal_uInt32 nInd
);
70 /// Converts an Any to sal_Int32 in the range from 0 to 4 (date calculation mode).
72 /// @throws css::uno::RuntimeException
73 /// @throws css::lang::IllegalArgumentException
74 sal_Int32
getDateMode(
75 const css::uno::Reference
< css::beans::XPropertySet
>& xPropSet
,
76 const css::uno::Any
& rAny
);
79 explicit AnalysisAddIn(
80 const css::uno::Reference
< css::uno::XComponentContext
>& xContext
);
82 OUString
AnalysisResId(const char* pId
);
84 virtual ~AnalysisAddIn() override
;
86 /// @throws css::uno::RuntimeException
87 /// @throws css::lang::IllegalArgumentException
88 double FactDouble( sal_Int32 nNum
);
90 static OUString
getImplementationName_Static();
91 static css::uno::Sequence
< OUString
> getSupportedServiceNames_Static();
94 virtual OUString SAL_CALL
getProgrammaticFuntionName( const OUString
& aDisplayName
) override
;
95 virtual OUString SAL_CALL
getDisplayFunctionName( const OUString
& aProgrammaticName
) override
;
96 virtual OUString SAL_CALL
getFunctionDescription( const OUString
& aProgrammaticName
) override
;
97 virtual OUString SAL_CALL
getDisplayArgumentName( const OUString
& aProgrammaticFunctionName
, sal_Int32 nArgument
) override
;
98 virtual OUString SAL_CALL
getArgumentDescription( const OUString
& aProgrammaticFunctionName
, sal_Int32 nArgument
) override
;
99 virtual OUString SAL_CALL
getProgrammaticCategoryName( const OUString
& aProgrammaticFunctionName
) override
;
100 virtual OUString SAL_CALL
getDisplayCategoryName( const OUString
& aProgrammaticFunctionName
) override
;
102 // XCompatibilityNames
103 virtual css::uno::Sequence
< css::sheet::LocalizedName
> SAL_CALL
getCompatibilityNames( const OUString
& aProgrammaticName
) override
;
106 virtual void SAL_CALL
setLocale( const css::lang::Locale
& eLocale
) override
;
107 virtual css::lang::Locale SAL_CALL
getLocale( ) override
;
110 virtual OUString SAL_CALL
getServiceName( ) override
;
113 virtual OUString SAL_CALL
getImplementationName( ) override
;
114 virtual sal_Bool SAL_CALL
supportsService( const OUString
& ServiceName
) override
;
115 virtual css::uno::Sequence
< OUString
> SAL_CALL
getSupportedServiceNames( ) override
;
117 // methods from own interfaces start here
120 // virtual double SAL_CALL get_Test( const css::uno::Reference< css::beans::XPropertySet >&, sal_Int32 nMode, double f1, double f2, double f3 ) throw( css::uno::RuntimeException );
122 virtual sal_Int32 SAL_CALL
getWorkday( const css::uno::Reference
< css::beans::XPropertySet
>&, sal_Int32 nStartDate
, sal_Int32 nDays
, const css::uno::Any
& aHDay
) override
;
123 virtual double SAL_CALL
getYearfrac( const css::uno::Reference
< css::beans::XPropertySet
>&, sal_Int32 nStartDate
, sal_Int32 nEndDate
, const css::uno::Any
& aMode
) override
;
124 virtual sal_Int32 SAL_CALL
getEdate( const css::uno::Reference
< css::beans::XPropertySet
>&, sal_Int32 nStartDate
, sal_Int32 nMonths
) override
;
125 virtual sal_Int32 SAL_CALL
getWeeknum( const css::uno::Reference
< css::beans::XPropertySet
>&, sal_Int32 nStartDate
, sal_Int32 nMode
) override
;
126 virtual sal_Int32 SAL_CALL
getEomonth( const css::uno::Reference
< css::beans::XPropertySet
>&, sal_Int32 nStartDate
, sal_Int32 nMonths
) override
;
127 virtual sal_Int32 SAL_CALL
getNetworkdays( const css::uno::Reference
< css::beans::XPropertySet
>&, sal_Int32 nStartDate
, sal_Int32 nEndDate
, const css::uno::Any
& aHDay
) override
;
129 virtual sal_Int32 SAL_CALL
getIseven( sal_Int32 nVal
) override
;
130 virtual sal_Int32 SAL_CALL
getIsodd( sal_Int32 nVal
) override
;
132 virtual double SAL_CALL
getMultinomial( const css::uno::Reference
< css::beans::XPropertySet
>& xOpt
, const css::uno::Sequence
< css::uno::Sequence
< sal_Int32
> >& aVLst
, const css::uno::Sequence
< css::uno::Any
>& aOptVLst
) override
;
133 virtual double SAL_CALL
getSeriessum( double fX
, double fN
, double fM
, const css::uno::Sequence
< css::uno::Sequence
< double > >& aCoeffList
) override
;
134 virtual double SAL_CALL
getQuotient( double fNum
, double fDenum
) override
;
136 virtual double SAL_CALL
getMround( double fNum
, double fMult
) override
;
137 virtual double SAL_CALL
getSqrtpi( double fNum
) override
;
139 virtual double SAL_CALL
getRandbetween( double fMin
, double fMax
) override
;
141 virtual double SAL_CALL
getGcd( const css::uno::Reference
< css::beans::XPropertySet
>& xOpt
, const css::uno::Sequence
< css::uno::Sequence
< double > >& aVLst
, const css::uno::Sequence
< css::uno::Any
>& aOptVLst
) override
;
142 virtual double SAL_CALL
getLcm( const css::uno::Reference
< css::beans::XPropertySet
>& xOpt
, const css::uno::Sequence
< css::uno::Sequence
< double > >& aVLst
, const css::uno::Sequence
< css::uno::Any
>& aOptVLst
) override
;
144 virtual double SAL_CALL
getBesseli( double fNum
, sal_Int32 nOrder
) override
;
145 virtual double SAL_CALL
getBesselj( double fNum
, sal_Int32 nOrder
) override
;
146 virtual double SAL_CALL
getBesselk( double fNum
, sal_Int32 nOrder
) override
;
147 virtual double SAL_CALL
getBessely( double fNum
, sal_Int32 nOrder
) override
;
149 virtual OUString SAL_CALL
getBin2Oct( const css::uno::Reference
< css::beans::XPropertySet
>& xOpt
, const OUString
& aNum
, const css::uno::Any
& rPlaces
) override
;
150 virtual double SAL_CALL
getBin2Dec( const OUString
& aNum
) override
;
151 virtual OUString SAL_CALL
getBin2Hex( const css::uno::Reference
< css::beans::XPropertySet
>& xOpt
, const OUString
& aNum
, const css::uno::Any
& rPlaces
) override
;
153 virtual OUString SAL_CALL
getOct2Bin( const css::uno::Reference
< css::beans::XPropertySet
>& xOpt
, const OUString
& aNum
, const css::uno::Any
& rPlaces
) override
;
154 virtual double SAL_CALL
getOct2Dec( const OUString
& aNum
) override
;
155 virtual OUString SAL_CALL
getOct2Hex( const css::uno::Reference
< css::beans::XPropertySet
>& xOpt
, const OUString
& aNum
, const css::uno::Any
& rPlaces
) override
;
157 virtual OUString SAL_CALL
getDec2Bin( const css::uno::Reference
< css::beans::XPropertySet
>& xOpt
, sal_Int32 fNum
, const css::uno::Any
& rPlaces
) override
;
158 virtual OUString SAL_CALL
getDec2Oct( const css::uno::Reference
< css::beans::XPropertySet
>& xOpt
, sal_Int32 fNum
, const css::uno::Any
& rPlaces
) override
;
159 virtual OUString SAL_CALL
getDec2Hex( const css::uno::Reference
< css::beans::XPropertySet
>& xOpt
, double fNum
, const css::uno::Any
& rPlaces
) override
;
161 virtual OUString SAL_CALL
getHex2Bin( const css::uno::Reference
< css::beans::XPropertySet
>& xOpt
, const OUString
& aNum
, const css::uno::Any
& rPlaces
) override
;
162 virtual double SAL_CALL
getHex2Dec( const OUString
& aNum
) override
;
163 virtual OUString SAL_CALL
getHex2Oct( const css::uno::Reference
< css::beans::XPropertySet
>& xOpt
, const OUString
& aNum
, const css::uno::Any
& rPlaces
) override
;
165 virtual sal_Int32 SAL_CALL
getDelta( const css::uno::Reference
< css::beans::XPropertySet
>& xOpt
, double fNum1
, const css::uno::Any
& rNum2
) override
;
167 virtual double SAL_CALL
getErf( const css::uno::Reference
< css::beans::XPropertySet
>& xOpt
, double fLowerLimit
, const css::uno::Any
& rUpperLimit
) override
;
168 virtual double SAL_CALL
getErfc( double fLowerLimit
) override
;
170 virtual sal_Int32 SAL_CALL
getGestep( const css::uno::Reference
< css::beans::XPropertySet
>& xOpt
, double fNum
, const css::uno::Any
& rStep
) override
;
172 virtual double SAL_CALL
getFactdouble( sal_Int32 nNum
) override
;
174 virtual double SAL_CALL
getImabs( const OUString
& aNum
) override
;
175 virtual double SAL_CALL
getImaginary( const OUString
& aNum
) override
;
176 virtual OUString SAL_CALL
getImpower( const OUString
& aNum
, double fPower
) override
;
177 virtual double SAL_CALL
getImargument( const OUString
& aNum
) override
;
178 virtual OUString SAL_CALL
getImcos( const OUString
& aNum
) override
;
179 virtual OUString SAL_CALL
getImdiv( const OUString
& aDivident
, const OUString
& aDivisor
) override
;
180 virtual OUString SAL_CALL
getImexp( const OUString
& aNum
) override
;
181 virtual OUString SAL_CALL
getImconjugate( const OUString
& aNum
) override
;
182 virtual OUString SAL_CALL
getImln( const OUString
& aNum
) override
;
183 virtual OUString SAL_CALL
getImlog10( const OUString
& aNum
) override
;
184 virtual OUString SAL_CALL
getImlog2( const OUString
& aNum
) override
;
185 virtual OUString SAL_CALL
getImproduct( const css::uno::Reference
< css::beans::XPropertySet
>& xOpt
, const css::uno::Sequence
< css::uno::Sequence
< OUString
> >& aNum1
, const css::uno::Sequence
< css::uno::Any
>& aNumList
) override
;
186 virtual double SAL_CALL
getImreal( const OUString
& aNum
) override
;
187 virtual OUString SAL_CALL
getImsin( const OUString
& aNum
) override
;
188 virtual OUString SAL_CALL
getImsub( const OUString
& aNum1
, const OUString
& aNum2
) override
;
189 virtual OUString SAL_CALL
getImsum( const css::uno::Reference
< css::beans::XPropertySet
>& xOpt
, const css::uno::Sequence
< css::uno::Sequence
< OUString
> >& aNum1
, const css::uno::Sequence
< css::uno::Any
>& aFollowingPars
) override
;
191 virtual OUString SAL_CALL
getImsqrt( const OUString
& aNum
) override
;
192 virtual OUString SAL_CALL
getImtan( const OUString
& aNum
) override
;
193 virtual OUString SAL_CALL
getImsec( const OUString
& aNum
) override
;
194 virtual OUString SAL_CALL
getImcsc( const OUString
& aNum
) override
;
195 virtual OUString SAL_CALL
getImcot( const OUString
& aNum
) override
;
196 virtual OUString SAL_CALL
getImsinh( const OUString
& aNum
) override
;
197 virtual OUString SAL_CALL
getImcosh( const OUString
& aNum
) override
;
198 virtual OUString SAL_CALL
getImsech( const OUString
& aNum
) override
;
199 virtual OUString SAL_CALL
getImcsch( const OUString
& aNum
) override
;
200 virtual OUString SAL_CALL
getComplex( double fReal
, double fImaginary
, const css::uno::Any
& rSuffix
) override
;
202 virtual double SAL_CALL
getConvert( double fVal
, const OUString
& aFromUnit
, const OUString
& aToUnit
) override
;
204 virtual double SAL_CALL
getAmordegrc( const css::uno::Reference
< css::beans::XPropertySet
>&, double fCost
, sal_Int32 nDate
, sal_Int32 nFirstPer
, double fRestVal
, double fPer
, double fRate
, const css::uno::Any
& rOptBase
) override
;
205 virtual double SAL_CALL
getAmorlinc( const css::uno::Reference
< css::beans::XPropertySet
>&, double fCost
, sal_Int32 nDate
, sal_Int32 nFirstPer
, double fRestVal
, double fPer
, double fRate
, const css::uno::Any
& rOptBase
) override
;
206 virtual double SAL_CALL
getAccrint( const css::uno::Reference
< css::beans::XPropertySet
>& xOpt
, sal_Int32 nIssue
, sal_Int32 nFirstInter
, sal_Int32 nSettle
, double fRate
, const css::uno::Any
& rVal
, sal_Int32 nFreq
, const css::uno::Any
& rOptBase
) override
;
207 virtual double SAL_CALL
getAccrintm( const css::uno::Reference
< css::beans::XPropertySet
>& xOpt
, sal_Int32 nIssue
, sal_Int32 nSettle
, double fRate
, const css::uno::Any
& rVal
, const css::uno::Any
& rOptBase
) override
;
208 virtual double SAL_CALL
getReceived( const css::uno::Reference
< css::beans::XPropertySet
>& xOpt
, sal_Int32 nSettle
, sal_Int32 nMat
, double fInvest
, double fDisc
, const css::uno::Any
& rOptBase
) override
;
209 virtual double SAL_CALL
getDisc( const css::uno::Reference
< css::beans::XPropertySet
>& xOpt
, sal_Int32 nSettle
, sal_Int32 nMat
, double fPrice
, double fRedemp
, const css::uno::Any
& rOptBase
) override
;
210 virtual double SAL_CALL
getDuration( const css::uno::Reference
< css::beans::XPropertySet
>& xOpt
, sal_Int32 nSettle
, sal_Int32 nMat
, double fCoup
, double fYield
, sal_Int32 nFreq
, const css::uno::Any
& rOptBase
) override
;
211 virtual double SAL_CALL
getEffect( double fNominal
, sal_Int32 nPeriods
) override
;
212 virtual double SAL_CALL
getCumprinc( double fRate
, sal_Int32 nNumPeriods
, double fVal
, sal_Int32 nStartPer
, sal_Int32 nEndPer
, sal_Int32 nPayType
) override
;
213 virtual double SAL_CALL
getCumipmt( double fRate
, sal_Int32 nNumPeriods
, double fVal
, sal_Int32 nStartPer
, sal_Int32 nEndPer
, sal_Int32 nPayType
) override
;
214 virtual double SAL_CALL
getPrice( const css::uno::Reference
< css::beans::XPropertySet
>& xOpt
, sal_Int32 nSettle
, sal_Int32 nMat
, double fRate
, double fYield
, double fRedemp
, sal_Int32 nFreq
, const css::uno::Any
& rOptBase
) override
;
215 virtual double SAL_CALL
getPricedisc( const css::uno::Reference
< css::beans::XPropertySet
>& xOpt
, sal_Int32 nSettle
, sal_Int32 nMat
, double fDisc
, double fRedemp
, const css::uno::Any
& rOptBase
) override
;
216 virtual double SAL_CALL
getPricemat( const css::uno::Reference
< css::beans::XPropertySet
>& xOpt
, sal_Int32 nSettle
, sal_Int32 nMat
, sal_Int32 nIssue
, double fRate
, double fYield
, const css::uno::Any
& rOptBase
) override
;
217 virtual double SAL_CALL
getMduration( const css::uno::Reference
< css::beans::XPropertySet
>& xOpt
, sal_Int32 nSettle
, sal_Int32 nMat
, double fCoup
, double fYield
, sal_Int32 nFreq
, const css::uno::Any
& rOptBase
) override
;
218 virtual double SAL_CALL
getNominal( double fRate
, sal_Int32 nPeriods
) override
;
219 virtual double SAL_CALL
getDollarfr( double fDollarDec
, sal_Int32 nFrac
) override
;
220 virtual double SAL_CALL
getDollarde( double fDollarFrac
, sal_Int32 nFrac
) override
;
221 virtual double SAL_CALL
getYield( const css::uno::Reference
< css::beans::XPropertySet
>& xOpt
, sal_Int32 nSettle
, sal_Int32 nMat
, double fCoup
, double fPrice
, double fRedemp
, sal_Int32 nFreq
, const css::uno::Any
& rOptBase
) override
;
222 virtual double SAL_CALL
getYielddisc( const css::uno::Reference
< css::beans::XPropertySet
>& xOpt
, sal_Int32 nSettle
, sal_Int32 nMat
, double fPrice
, double fRedemp
, const css::uno::Any
& rOptBase
) override
;
223 virtual double SAL_CALL
getYieldmat( const css::uno::Reference
< css::beans::XPropertySet
>& xOpt
, sal_Int32 nSettle
, sal_Int32 nMat
, sal_Int32 nIssue
, double fRate
, double fPrice
, const css::uno::Any
& rOptBase
) override
;
224 virtual double SAL_CALL
getTbilleq( const css::uno::Reference
< css::beans::XPropertySet
>& xOpt
, sal_Int32 nSettle
, sal_Int32 nMat
, double fDisc
) override
;
225 virtual double SAL_CALL
getTbillprice( const css::uno::Reference
< css::beans::XPropertySet
>& xOpt
, sal_Int32 nSettle
, sal_Int32 nMat
, double fDisc
) override
;
226 virtual double SAL_CALL
getTbillyield( const css::uno::Reference
< css::beans::XPropertySet
>& xOpt
, sal_Int32 nSettle
, sal_Int32 nMat
, double fPrice
) override
;
227 virtual double SAL_CALL
getOddfprice( const css::uno::Reference
< css::beans::XPropertySet
>& xOpt
, sal_Int32 nSettle
, sal_Int32 nMat
, sal_Int32 nIssue
, sal_Int32 nFirstCoup
, double fRate
, double fYield
, double fRedemp
, sal_Int32 nFreq
, const css::uno::Any
& rOptBase
) override
;
228 virtual double SAL_CALL
getOddfyield( const css::uno::Reference
< css::beans::XPropertySet
>& xOpt
, sal_Int32 nSettle
, sal_Int32 nMat
, sal_Int32 nIssue
, sal_Int32 nFirstCoup
, double fRate
, double fPrice
, double fRedemp
, sal_Int32 nFreq
, const css::uno::Any
& rOptBase
) override
;
229 virtual double SAL_CALL
getOddlprice( const css::uno::Reference
< css::beans::XPropertySet
>& xOpt
, sal_Int32 nSettle
, sal_Int32 nMat
, sal_Int32 nLastInterest
, double fRate
, double fYield
, double fRedemp
, sal_Int32 nFreq
, const css::uno::Any
& rOptBase
) override
;
230 virtual double SAL_CALL
getOddlyield( const css::uno::Reference
< css::beans::XPropertySet
>& xOpt
, sal_Int32 nSettle
, sal_Int32 nMat
, sal_Int32 nLastInterest
, double fRate
, double fPrice
, double fRedemp
, sal_Int32 nFreq
, const css::uno::Any
& rOptBase
) override
;
231 virtual double SAL_CALL
getXirr( const css::uno::Reference
< css::beans::XPropertySet
>& xOpt
, const css::uno::Sequence
< css::uno::Sequence
< double > >& rValues
, const css::uno::Sequence
< css::uno::Sequence
< sal_Int32
> >& rDates
, const css::uno::Any
& rGuess
) override
;
232 virtual double SAL_CALL
getXnpv( double fRate
, const css::uno::Sequence
< css::uno::Sequence
< double > >& rValues
, const css::uno::Sequence
< css::uno::Sequence
< sal_Int32
> >& rDates
) override
;
233 virtual double SAL_CALL
getIntrate( const css::uno::Reference
< css::beans::XPropertySet
>& xOpt
, sal_Int32 nSettle
, sal_Int32 nMat
, double fInvest
, double fRedemp
, const css::uno::Any
& rOptBase
) override
;
234 virtual double SAL_CALL
getCoupncd( const css::uno::Reference
< css::beans::XPropertySet
>& xOpt
, sal_Int32 nSettle
, sal_Int32 nMat
, sal_Int32 nFreq
, const css::uno::Any
& rOptBase
) override
;
235 virtual double SAL_CALL
getCoupdays( const css::uno::Reference
< css::beans::XPropertySet
>& xOpt
, sal_Int32 nSettle
, sal_Int32 nMat
, sal_Int32 nFreq
, const css::uno::Any
& rOptBase
) override
;
236 virtual double SAL_CALL
getCoupdaysnc( const css::uno::Reference
< css::beans::XPropertySet
>& xOpt
, sal_Int32 nSettle
, sal_Int32 nMat
, sal_Int32 nFreq
, const css::uno::Any
& rOptBase
) override
;
237 virtual double SAL_CALL
getCoupdaybs( const css::uno::Reference
< css::beans::XPropertySet
>& xOpt
, sal_Int32 nSettle
, sal_Int32 nMat
, sal_Int32 nFreq
, const css::uno::Any
& rOptBase
) override
;
238 virtual double SAL_CALL
getCouppcd( const css::uno::Reference
< css::beans::XPropertySet
>& xOpt
, sal_Int32 nSettle
, sal_Int32 nMat
, sal_Int32 nFreq
, const css::uno::Any
& rOptBase
) override
;
239 virtual double SAL_CALL
getCoupnum( const css::uno::Reference
< css::beans::XPropertySet
>& xOpt
, sal_Int32 nSettle
, sal_Int32 nMat
, sal_Int32 nFreq
, const css::uno::Any
& rOptBase
) override
;
240 virtual double SAL_CALL
getFvschedule( double fPrinc
, const css::uno::Sequence
< css::uno::Sequence
< double > >& rSchedule
) override
;
245 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */