diff options
author | Regina Henschel <rb.henschel@t-online.de> | 2012-06-09 17:34:38 +0200 |
---|---|---|
committer | Eike Rathke <erack@redhat.com> | 2012-06-12 23:55:48 +0200 |
commit | e659fbd2779d1f3e6f871a2405db173c5f70d320 (patch) | |
tree | 54314fc5ea379a88bf28c960cb130615a133da2a /scaddins/source | |
parent | 3174c0234bd9fdbbd182d05e86a2699e239f7f68 (diff) |
fdo#51017 ODFF: implement missing imaginary functions [AOO i111609 r1348096]
Adds IMTAN, IMSEC, IMCSC, IMCOT, IMSINH, IMCOSH, IMSECH, IMCSCH spreadsheet
functions.
Change-Id: I04ce0b1fdf787c3d8b2301cd92400e54049494bf
Diffstat (limited to 'scaddins/source')
-rw-r--r-- | scaddins/source/analysis/analysis.cxx | 80 | ||||
-rw-r--r-- | scaddins/source/analysis/analysis.hrc | 27 | ||||
-rw-r--r-- | scaddins/source/analysis/analysis.hxx | 8 | ||||
-rw-r--r-- | scaddins/source/analysis/analysis.src | 144 | ||||
-rw-r--r-- | scaddins/source/analysis/analysis_deffuncnames.src | 72 | ||||
-rw-r--r-- | scaddins/source/analysis/analysis_funcnames.src | 40 | ||||
-rw-r--r-- | scaddins/source/analysis/analysishelper.cxx | 172 | ||||
-rw-r--r-- | scaddins/source/analysis/analysishelper.hxx | 13 |
8 files changed, 543 insertions, 13 deletions
diff --git a/scaddins/source/analysis/analysis.cxx b/scaddins/source/analysis/analysis.cxx index e62265f0a252..2215f28340d2 100644 --- a/scaddins/source/analysis/analysis.cxx +++ b/scaddins/source/analysis/analysis.cxx @@ -1215,6 +1215,86 @@ STRING SAL_CALL AnalysisAddIn::getImsqrt( const STRING& aNum ) THROWDEF_RTE_IAE } +STRING SAL_CALL AnalysisAddIn::getImtan( const STRING& aNum ) THROWDEF_RTE_IAE +{ + Complex z( aNum ); + + z.Tan(); + + return z.GetString(); +} + + +STRING SAL_CALL AnalysisAddIn::getImsec( const STRING& aNum ) THROWDEF_RTE_IAE +{ + Complex z( aNum ); + + z.Sec(); + + return z.GetString(); +} + + +STRING SAL_CALL AnalysisAddIn::getImcsc( const STRING& aNum ) THROWDEF_RTE_IAE +{ + Complex z( aNum ); + + z.Csc(); + + return z.GetString(); +} + + +STRING SAL_CALL AnalysisAddIn::getImcot( const STRING& aNum ) THROWDEF_RTE_IAE +{ + Complex z( aNum ); + + z.Cot(); + + return z.GetString(); +} + + +STRING SAL_CALL AnalysisAddIn::getImsinh( const STRING& aNum ) THROWDEF_RTE_IAE +{ + Complex z( aNum ); + + z.Sinh(); + + return z.GetString(); +} + + +STRING SAL_CALL AnalysisAddIn::getImcosh( const STRING& aNum ) THROWDEF_RTE_IAE +{ + Complex z( aNum ); + + z.Cosh(); + + return z.GetString(); +} + + +STRING SAL_CALL AnalysisAddIn::getImsech( const STRING& aNum ) THROWDEF_RTE_IAE +{ + Complex z( aNum ); + + z.Sech(); + + return z.GetString(); +} + + +STRING SAL_CALL AnalysisAddIn::getImcsch( const STRING& aNum ) THROWDEF_RTE_IAE +{ + Complex z( aNum ); + + z.Csch(); + + return z.GetString(); +} + + STRING SAL_CALL AnalysisAddIn::getComplex( double fR, double fI, const ANY& rSuff ) THROWDEF_RTE_IAE { sal_Bool bi; diff --git a/scaddins/source/analysis/analysis.hrc b/scaddins/source/analysis/analysis.hrc index 7b5b94ff178c..d53eb1e2f7e5 100644 --- a/scaddins/source/analysis/analysis.hrc +++ b/scaddins/source/analysis/analysis.hrc @@ -131,7 +131,14 @@ #define ANALYSIS_Couppcd (ANALYSIS_FUNCDESC_START+90) #define ANALYSIS_Coupnum (ANALYSIS_FUNCDESC_START+91) #define ANALYSIS_Fvschedule (ANALYSIS_FUNCDESC_START+92) - +#define ANALYSIS_Imtan (ANALYSIS_FUNCDESC_START+93) +#define ANALYSIS_Imsec (ANALYSIS_FUNCDESC_START+94) +#define ANALYSIS_Imcsc (ANALYSIS_FUNCDESC_START+95) +#define ANALYSIS_Imcot (ANALYSIS_FUNCDESC_START+96) +#define ANALYSIS_Imsinh (ANALYSIS_FUNCDESC_START+97) +#define ANALYSIS_Imcosh (ANALYSIS_FUNCDESC_START+98) +#define ANALYSIS_Imsech (ANALYSIS_FUNCDESC_START+99) +#define ANALYSIS_Imcsch (ANALYSIS_FUNCDESC_START+100) #define ANALYSIS_FUNCNAME_START (1) @@ -228,7 +235,14 @@ #define ANALYSIS_FUNCNAME_Couppcd (ANALYSIS_FUNCNAME_START+90) #define ANALYSIS_FUNCNAME_Coupnum (ANALYSIS_FUNCNAME_START+91) #define ANALYSIS_FUNCNAME_Fvschedule (ANALYSIS_FUNCNAME_START+92) - +#define ANALYSIS_FUNCNAME_Imtan (ANALYSIS_FUNCNAME_START+93) +#define ANALYSIS_FUNCNAME_Imsec (ANALYSIS_FUNCNAME_START+94) +#define ANALYSIS_FUNCNAME_Imcsc (ANALYSIS_FUNCNAME_START+95) +#define ANALYSIS_FUNCNAME_Imcot (ANALYSIS_FUNCNAME_START+96) +#define ANALYSIS_FUNCNAME_Imsinh (ANALYSIS_FUNCNAME_START+97) +#define ANALYSIS_FUNCNAME_Imcosh (ANALYSIS_FUNCNAME_START+98) +#define ANALYSIS_FUNCNAME_Imsech (ANALYSIS_FUNCNAME_START+99) +#define ANALYSIS_FUNCNAME_Imcsch (ANALYSIS_FUNCNAME_START+100) #define ANALYSIS_DEFFUNCNAME_START (RID_ANALYSIS_DEFFUNCTION_NAMES+1) @@ -325,6 +339,13 @@ #define ANALYSIS_DEFFUNCNAME_Couppcd (ANALYSIS_DEFFUNCNAME_START+90) #define ANALYSIS_DEFFUNCNAME_Coupnum (ANALYSIS_DEFFUNCNAME_START+91) #define ANALYSIS_DEFFUNCNAME_Fvschedule (ANALYSIS_DEFFUNCNAME_START+92) - +#define ANALYSIS_DEFFUNCNAME_Imtan (ANALYSIS_DEFFUNCNAME_START+93) +#define ANALYSIS_DEFFUNCNAME_Imsec (ANALYSIS_DEFFUNCNAME_START+94) +#define ANALYSIS_DEFFUNCNAME_Imcsc (ANALYSIS_DEFFUNCNAME_START+95) +#define ANALYSIS_DEFFUNCNAME_Imcot (ANALYSIS_DEFFUNCNAME_START+96) +#define ANALYSIS_DEFFUNCNAME_Imsinh (ANALYSIS_DEFFUNCNAME_START+97) +#define ANALYSIS_DEFFUNCNAME_Imcosh (ANALYSIS_DEFFUNCNAME_START+98) +#define ANALYSIS_DEFFUNCNAME_Imsech (ANALYSIS_DEFFUNCNAME_START+99) +#define ANALYSIS_DEFFUNCNAME_Imcsch (ANALYSIS_DEFFUNCNAME_START+100) #endif diff --git a/scaddins/source/analysis/analysis.hxx b/scaddins/source/analysis/analysis.hxx index 3e0fd4a99e73..b6d58e621452 100644 --- a/scaddins/source/analysis/analysis.hxx +++ b/scaddins/source/analysis/analysis.hxx @@ -193,6 +193,14 @@ public: virtual STRING SAL_CALL getImsum( constREFXPS& xOpt, const SEQSEQ( STRING )& aNum1, const SEQ( ANY )& aFollowingPars ) THROWDEF_RTE_IAE; virtual STRING SAL_CALL getImsqrt( const STRING& aNum ) THROWDEF_RTE_IAE; + virtual STRING SAL_CALL getImtan( const STRING& aNum ) THROWDEF_RTE_IAE; + virtual STRING SAL_CALL getImsec( const STRING& aNum ) THROWDEF_RTE_IAE; + virtual STRING SAL_CALL getImcsc( const STRING& aNum ) THROWDEF_RTE_IAE; + virtual STRING SAL_CALL getImcot( const STRING& aNum ) THROWDEF_RTE_IAE; + virtual STRING SAL_CALL getImsinh( const STRING& aNum ) THROWDEF_RTE_IAE; + virtual STRING SAL_CALL getImcosh( const STRING& aNum ) THROWDEF_RTE_IAE; + virtual STRING SAL_CALL getImsech( const STRING& aNum ) THROWDEF_RTE_IAE; + virtual STRING SAL_CALL getImcsch( const STRING& aNum ) THROWDEF_RTE_IAE; virtual STRING SAL_CALL getComplex( double fReal, double fImaginary, const ANY& rSuffix ) THROWDEF_RTE_IAE; virtual double SAL_CALL getConvert( double fVal, const STRING& aFromUnit, const STRING& aToUnit ) THROWDEF_RTE_IAE; diff --git a/scaddins/source/analysis/analysis.src b/scaddins/source/analysis/analysis.src index bdff7932b68b..8e81e3e3010c 100644 --- a/scaddins/source/analysis/analysis.src +++ b/scaddins/source/analysis/analysis.src @@ -1352,6 +1352,150 @@ Resource RID_ANALYSIS_FUNCTION_DESCRIPTIONS }; + Resource ANALYSIS_Imtan + { + String 1 // description Imtan + { + Text [ en-US ] = "Returns the tangent of a complex number"; + }; + + String 2 // name of parameter 1 Imtan + { + Text [ en-US ] = "Complex number"; + }; + + String 3 // description of parameter 1 Imtan + { + Text [ en-US ] = "A complex number"; + }; + }; + + Resource ANALYSIS_Imsec + { + String 1 // description Imsec + { + Text [ en-US ] = "Returns the secant of a complex number"; + }; + + String 2 // name of parameter 1 Imsec + { + Text [ en-US ] = "Complex number"; + }; + + String 3 // description of parameter 1 Imsec + { + Text [ en-US ] = "A complex number"; + }; + }; + + Resource ANALYSIS_Imcsc + { + String 1 // description Imcsc + { + Text [ en-US ] = "Returns the cosecant of a complex number"; + }; + + String 2 // name of parameter 1 Imcsc + { + Text [ en-US ] = "Complex number"; + }; + + String 3 // description of parameter 1 Imcsc + { + Text [ en-US ] = "A complex number"; + }; + }; + + Resource ANALYSIS_Imcot + { + String 1 // description Imcot + { + Text [ en-US ] = "Returns the cotangent of a complex number"; + }; + + String 2 // name of parameter 1 Imcot + { + Text [ en-US ] = "Complex number"; + }; + + String 3 // description of parameter 1 Imcot + { + Text [ en-US ] = "A complex number"; + }; + }; + + Resource ANALYSIS_Imsinh + { + String 1 // description Imsinh + { + Text [ en-US ] = "Returns the hyperbolic sine of a complex number"; + }; + + String 2 // name of parameter 1 Imsinh + { + Text [ en-US ] = "Complex number"; + }; + + String 3 // description of parameter 1 Imsinh + { + Text [ en-US ] = "A complex number"; + }; + }; + + Resource ANALYSIS_Imcosh + { + String 1 // description Imcosh + { + Text [ en-US ] = "Returns the hyperbolic cosine of a complex number"; + }; + + String 2 // name of parameter 1 Imcosh + { + Text [ en-US ] = "Complex number"; + }; + + String 3 // description of parameter 1 Imcosh + { + Text [ en-US ] = "A complex number"; + }; + }; + + Resource ANALYSIS_Imsech + { + String 1 // description Imsech + { + Text [ en-US ] = "Returns the hyperbolic secant of a complex number"; + }; + + String 2 // name of parameter 1 Imsech + { + Text [ en-US ] = "Complex number"; + }; + + String 3 // description of parameter 1 Imsech + { + Text [ en-US ] = "A complex number"; + }; + }; + + Resource ANALYSIS_Imcsch + { + String 1 // description Imcsch + { + Text [ en-US ] = "Returns the hyperbolic cosecant of a complex number"; + }; + + String 2 // name of parameter 1 Imcsch + { + Text [ en-US ] = "Complex number"; + }; + + String 3 // description of parameter 1 Imcsch + { + Text [ en-US ] = "A complex number"; + }; + }; + Resource ANALYSIS_Complex { String 1 // description Complex diff --git a/scaddins/source/analysis/analysis_deffuncnames.src b/scaddins/source/analysis/analysis_deffuncnames.src index 2c67e2ca3c11..cff3b5db7312 100644 --- a/scaddins/source/analysis/analysis_deffuncnames.src +++ b/scaddins/source/analysis/analysis_deffuncnames.src @@ -813,6 +813,78 @@ Resource RID_ANALYSIS_DEFFUNCTION_NAMES }; }; + StringArray ANALYSIS_DEFFUNCNAME_Imtan + { + ItemList = + { + < "IMTAN"; >; + < "IMTAN"; >; + }; + }; + + StringArray ANALYSIS_DEFFUNCNAME_Imsec + { + ItemList = + { + < "IMSEC"; >; + < "IMSEC"; >; + }; + }; + + StringArray ANALYSIS_DEFFUNCNAME_Imcsc + { + ItemList = + { + < "IMCSC"; >; + < "IMCSC"; >; + }; + }; + + StringArray ANALYSIS_DEFFUNCNAME_Imcot + { + ItemList = + { + < "IMCOT"; >; + < "IMCOT"; >; + }; + }; + + StringArray ANALYSIS_DEFFUNCNAME_Imsinh + { + ItemList = + { + < "IMSINH"; >; + < "IMSINH"; >; + }; + }; + + StringArray ANALYSIS_DEFFUNCNAME_Imcosh + { + ItemList = + { + < "IMCOSH"; >; + < "IMCOSH"; >; + }; + }; + + StringArray ANALYSIS_DEFFUNCNAME_Imsech + { + ItemList = + { + < "IMSECH"; >; + < "IMSECH"; >; + }; + }; + + StringArray ANALYSIS_DEFFUNCNAME_Imcsch + { + ItemList = + { + < "IMCSCH"; >; + < "IMCSCH"; >; + }; + }; + StringArray ANALYSIS_DEFFUNCNAME_Complex { ItemList = diff --git a/scaddins/source/analysis/analysis_funcnames.src b/scaddins/source/analysis/analysis_funcnames.src index 47796f3b0e3c..fea61a58bbdc 100644 --- a/scaddins/source/analysis/analysis_funcnames.src +++ b/scaddins/source/analysis/analysis_funcnames.src @@ -465,6 +465,46 @@ Resource RID_ANALYSIS_FUNCTION_NAMES Text [ en-US ] = "IMSQRT"; }; + String ANALYSIS_FUNCNAME_Imtan + { + Text [ en-US ] = "IMTAN"; + }; + + String ANALYSIS_FUNCNAME_Imsec + { + Text [ en-US ] = "IMSEC"; + }; + + String ANALYSIS_FUNCNAME_Imcsc + { + Text [ en-US ] = "IMCSC"; + }; + + String ANALYSIS_FUNCNAME_Imcot + { + Text [ en-US ] = "IMCOT"; + }; + + String ANALYSIS_FUNCNAME_Imsinh + { + Text [ en-US ] = "IMSINH"; + }; + + String ANALYSIS_FUNCNAME_Imcosh + { + Text [ en-US ] = "IMCOSH"; + }; + + String ANALYSIS_FUNCNAME_Imsech + { + Text [ en-US ] = "IMSECH"; + }; + + String ANALYSIS_FUNCNAME_Imcsch + { + Text [ en-US ] = "IMCSCH"; + }; + String ANALYSIS_FUNCNAME_Complex { Text [ en-US ] = "COMPLEX"; diff --git a/scaddins/source/analysis/analysishelper.cxx b/scaddins/source/analysis/analysishelper.cxx index c2e17a8c05a8..a37632f2fca9 100644 --- a/scaddins/source/analysis/analysishelper.cxx +++ b/scaddins/source/analysis/analysishelper.cxx @@ -108,6 +108,14 @@ const FuncDataBase pFuncDatas[] = FUNCDATA( Imsub, UNIQUE, STDPAR, 2, FDCat_Tech ), FUNCDATA( Imsqrt, UNIQUE, STDPAR, 1, FDCat_Tech ), FUNCDATA( Imsum, UNIQUE, INTPAR, 1, FDCat_Tech ), + FUNCDATA( Imtan, UNIQUE, STDPAR, 1, FDCat_Tech ), + FUNCDATA( Imsec, UNIQUE, STDPAR, 1, FDCat_Tech ), + FUNCDATA( Imcsc, UNIQUE, STDPAR, 1, FDCat_Tech ), + FUNCDATA( Imcot, UNIQUE, STDPAR, 1, FDCat_Tech ), + FUNCDATA( Imsinh, UNIQUE, STDPAR, 1, FDCat_Tech ), + FUNCDATA( Imcosh, UNIQUE, STDPAR, 1, FDCat_Tech ), + FUNCDATA( Imsech, UNIQUE, STDPAR, 1, FDCat_Tech ), + FUNCDATA( Imcsch, UNIQUE, STDPAR, 1, FDCat_Tech ), FUNCDATA( Complex, UNIQUE, STDPAR, 3, FDCat_Tech ), FUNCDATA( Convert, DOUBLE, STDPAR, 3, FDCat_Tech ), FUNCDATA( Amordegrc, UNIQUE, INTPAR, 7, FDCat_Finance ), @@ -1861,15 +1869,9 @@ void Complex::Sqrt( void ) } -inline sal_Bool SinOverflow( double f ) -{ - return fabs( f ) >= 134217728; -} - - void Complex::Sin( void ) THROWDEF_RTE_IAE { - if( SinOverflow( r ) ) + if( !::rtl::math::isValidArcArg( r ) ) THROW_IAE; if( i ) @@ -1887,7 +1889,7 @@ void Complex::Sin( void ) THROWDEF_RTE_IAE void Complex::Cos( void ) THROWDEF_RTE_IAE { - if( SinOverflow( r ) ) + if( !::rtl::math::isValidArcArg( r ) ) THROW_IAE; if( i ) @@ -1961,6 +1963,160 @@ void Complex::Log2( void ) THROWDEF_RTE_IAE } +void Complex::Tan(void) THROWDEF_RTE_IAE +{ + if ( i ) + { + if( !::rtl::math::isValidArcArg( 2.0 * r ) ) + THROW_IAE; + double fScale =1.0 / ( cos( 2.0 * r ) + cosh( 2.0 * i )); + r = sin( 2.0 * r ) * fScale; + i = sinh( 2.0 * i ) * fScale; + } + else + { + if( !::rtl::math::isValidArcArg( r ) ) + THROW_IAE; + r = tan( r ); + } +} + + +void Complex::Sec( void ) THROWDEF_RTE_IAE +{ + if( i ) + { + if( !::rtl::math::isValidArcArg( 2 * r ) ) + THROW_IAE; + double fScale = 1.0 / (cosh( 2.0 * i) + cos ( 2.0 * r)); + double r_; + r_ = 2.0 * cos( r ) * cosh( i ) * fScale; + i = 2.0 * sin( r ) * sinh( i ) * fScale; + r = r_; + } + else + { + if( !::rtl::math::isValidArcArg( r ) ) + THROW_IAE; + r = 1.0 / cos( r ); + } +} + + +void Complex::Csc( void ) THROWDEF_RTE_IAE +{ + if( i ) + { + if( !::rtl::math::isValidArcArg( 2 * r ) ) + THROW_IAE; + double fScale = 1.0 / (cosh( 2.0 * i) - cos ( 2.0 * r)); + double r_; + r_ = 2.0 * sin( r ) * cosh( i ) * fScale; + i = -2.0 * cos( r ) * sinh( i ) * fScale; + r = r_; + } + else + { + if( !::rtl::math::isValidArcArg( r ) ) + THROW_IAE; + r = 1.0 / sin( r ); + } +} + + +void Complex::Cot(void) THROWDEF_RTE_IAE +{ + if ( i ) + { + if( !::rtl::math::isValidArcArg( 2.0 * r ) ) + THROW_IAE; + double fScale =1.0 / ( cosh( 2.0 * i ) - cos( 2.0 * r ) ); + r = sin( 2.0 * r ) * fScale; + i = - ( sinh( 2.0 * i ) * fScale ); + } + else + { + if( !::rtl::math::isValidArcArg( r ) ) + THROW_IAE; + r = 1.0 / tan( r ); + } +} + + +void Complex::Sinh( void ) THROWDEF_RTE_IAE +{ + if( !::rtl::math::isValidArcArg( r ) ) + THROW_IAE; + + if( i ) + { + double r_; + r_ = sinh( r ) * cos( i ); + i = cosh( r ) * sin( i ); + r = r_; + } + else + r = sinh( r ); +} + + +void Complex::Cosh( void ) THROWDEF_RTE_IAE +{ + if( !::rtl::math::isValidArcArg( r ) ) + THROW_IAE; + + if( i ) + { + double r_; + r_ = cosh( r ) * cos( i ); + i = sinh( r ) * sin( i ); + r = r_; + } + else + r = cosh( r ); +} + + +void Complex::Sech(void) THROWDEF_RTE_IAE +{ + if ( i ) + { + if( !::rtl::math::isValidArcArg( 2.0 * r ) ) + THROW_IAE; + double fScale =1.0 / ( cosh( 2.0 * r ) + cos( 2.0 * i )); + double r_; + r_ = 2.0 * cosh( 2.0 * r ) * cos( i ) * fScale; + i = - (2.0 * sinh( 2.0 * r ) * sin( i ) * fScale ); + r = r_ ; + } + else + { + if( !::rtl::math::isValidArcArg( r ) ) + THROW_IAE; + r = 1.0 / cosh( r ); + } +} + + +void Complex::Csch(void) THROWDEF_RTE_IAE +{ + if ( i ) + { + if( !::rtl::math::isValidArcArg( 2.0 * r ) ) + THROW_IAE; + double fScale =1.0 / ( cosh( 2.0 * r ) - cos( 2.0 * i )); + double r_; + r_ = 2.0 * sinh( 2.0 * r ) * cos( i ) * fScale; + i = - ( 2.0 * cosh( 2.0 * r ) * sin( i ) * fScale ); + r = r_ ; + } + else + { + if( !::rtl::math::isValidArcArg( r ) ) + THROW_IAE; + r = 1.0 / sinh( r ); + } +} ComplexList::~ComplexList() diff --git a/scaddins/source/analysis/analysishelper.hxx b/scaddins/source/analysis/analysishelper.hxx index 136a6e385f64..2abfc0f533ab 100644 --- a/scaddins/source/analysis/analysishelper.hxx +++ b/scaddins/source/analysis/analysishelper.hxx @@ -462,7 +462,7 @@ class Complex sal_Unicode c; public: - inline Complex( double fReal, double fImag = 0.0, sal_Char cC = '\0' ); + inline Complex( double fReal, double fImag = 0.0, sal_Unicode cC = '\0' ); Complex( const STRING& rComplexAsString ) THROWDEF_RTE_IAE; inline static sal_Bool IsImagUnit( sal_Unicode c ); @@ -490,6 +490,15 @@ public: inline void Mult( const Complex& rMult ); inline void Sub( const Complex& rMult ); inline void Add( const Complex& rAdd ); + void Tan( void ) THROWDEF_RTE_IAE; + void Sec( void ) THROWDEF_RTE_IAE; + void Csc( void ) THROWDEF_RTE_IAE; + void Cot( void ) THROWDEF_RTE_IAE; + void Sinh( void ) THROWDEF_RTE_IAE; + void Cosh( void ) THROWDEF_RTE_IAE; + void Sech( void ) THROWDEF_RTE_IAE; + void Csch( void ) THROWDEF_RTE_IAE; + }; @@ -807,7 +816,7 @@ inline const FuncData* FuncDataList::Get( sal_uInt32 n ) const } -inline Complex::Complex( double fReal, double fImag, sal_Char cC ) : +inline Complex::Complex( double fReal, double fImag, sal_Unicode cC ) : r( fReal ), i( fImag ), c( cC ) { } |