[Libreoffice-commits] core.git: Branch 'feature/calc-group-interpreter-4' - 2 commits - sc/source

I-Jui Sung (Ray) ray at multicorewareinc.com
Fri Nov 1 19:06:54 CET 2013


 sc/source/core/opencl/formulagroupcl.cxx          |    2 
 sc/source/core/opencl/formulagroupcl_finacial.hxx |  727 ------------------
 sc/source/core/opencl/op_financial.cxx            |  234 +++++
 sc/source/core/opencl/op_financial.hxx            |   17 
 sc/source/core/opencl/opinlinefun_finacial.cxx    |  879 +++++++++++++++++++++-
 5 files changed, 1123 insertions(+), 736 deletions(-)

New commits:
commit 988e71b2aa9b41aa6506a74bfdd3b53f0931576e
Author: I-Jui (Ray) Sung <ray at multicorewareinc.com>
Date:   Fri Nov 1 13:04:04 2013 -0500

    GPU Calc: fixed a compiler warning
    
    Change-Id: Ia468731911f4b492b85ede63a9646fe28ca63cd8

diff --git a/sc/source/core/opencl/op_financial.cxx b/sc/source/core/opencl/op_financial.cxx
index ff167e0..f2ae100 100644
--- a/sc/source/core/opencl/op_financial.cxx
+++ b/sc/source/core/opencl/op_financial.cxx
@@ -1963,11 +1963,11 @@ void OpPMT::GenSlidingWindowFunction(std::stringstream &ss,
     ss << "int gid0 = get_global_id(0);\n    ";
     ss<<"double tmp0,tmp1,tmp2;\n    ";
     ss<<"double tmp3=0,tmp4=0;\n    ";
-    unsigned i = vSubArguments.size();
+    size_t i = vSubArguments.size();
     size_t nItems = 0;
     ss <<"\n    ";
     //while (i-- > 1)
-    for (size_t i = 0; i < vSubArguments.size(); i++)
+    for (i = 0; i < vSubArguments.size(); i++)
     {
         FormulaToken *pCur = vSubArguments[i]->GetFormulaToken();
         assert(pCur);
commit 255c360bd75a27d2c5bf1293cc690a933247e4c3
Author: yiming ju <yiming at multicorewareinc.com>
Date:   Fri Nov 1 16:54:56 2013 +0800

    GPU Calc: refactor code generation for inlined library routines
    
    Refactored all  library functions of now formule calc in GPU
    
    Change-Id: Icf238c18cae5ca2b685a99204994f5d3211b3ac9
    Signed-off-by: haochen <haochen at multicorewareinc.com>
    Signed-off-by: I-Jui (Ray) Sung <ray at multicorewareinc.com>

diff --git a/sc/source/core/opencl/formulagroupcl.cxx b/sc/source/core/opencl/formulagroupcl.cxx
index ed186b3..b4bb0f9 100644
--- a/sc/source/core/opencl/formulagroupcl.cxx
+++ b/sc/source/core/opencl/formulagroupcl.cxx
@@ -23,7 +23,6 @@
 #include "op_math.hxx"
 #include "op_statistical.hxx"
 #include "formulagroupcl_public.hxx"
-#include "formulagroupcl_finacial.hxx"
 
 #include <list>
 #include <map>
@@ -1187,7 +1186,6 @@ public:
         }
         // preambles
         decl << publicFunc;
-        decl << finacialFunc;
         DK->DumpInlineFun(inlineDecl,inlineFun);
         for(std::set<std::string>::iterator set_iter=inlineDecl.begin();
                                          set_iter!=inlineDecl.end();set_iter++)
diff --git a/sc/source/core/opencl/formulagroupcl_finacial.hxx b/sc/source/core/opencl/formulagroupcl_finacial.hxx
deleted file mode 100644
index da09168..0000000
--- a/sc/source/core/opencl/formulagroupcl_finacial.hxx
+++ /dev/null
@@ -1,727 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- */
-
-#ifndef SC_OPENCL_FORMULAGROUPCL_FINACIAL_HXX
-#define SC_OPENCL_FORMULAGROUPCL_FINACIAL_HXX
-const char* finacialFunc =
-"double GetRmz( double fZins, double fZzr, double fBw, double fZw, int nF )\n"
-"{\n"
-    "\tdouble      fRmz;\n"
-    "\tif( fZins == 0.0 )\n"
-        "\t\tfRmz = ( fBw + fZw ) / fZzr;\n"
-    "\telse\n"
-        "\t\t{\n"
-            "\t\t\tdouble  fTerm = pow( 1.0 + fZins, fZzr );\n"
-            "\t\t\tif( nF > 0 )\n"
-                      "\t\t\t\tfRmz = ( fZw * fZins / ( fTerm - 1.0 ) + fBw"
-                      " * fZins / ( 1.0 - 1.0 / fTerm ) ) / ( 1.0 + fZins );\n"
-            "\t\t\telse\n"
-            "\t\t\t\tfRmz = fZw * fZins / ( fTerm - 1.0 ) + fBw * fZins /"
-            "( 1.0 - 1.0 / fTerm );\n"
-        "\t\t}\n"
-    "\treturn -fRmz;\n"
-"}\n\n"
-"double GetZw( double fZins, double fZzr, double fRmz, double fBw, int nF )\n"
-"{\n"
-"    double      fZw;\n"
-"    if( fZins == 0.0 )\n"
-"        fZw = fBw + fRmz * fZzr;\n"
-"    else\n"
-"    {\n"
-"        double  fTerm = pow( 1.0 + fZins, fZzr );\n"
-"        if( nF > 0 )\n"
-"            fZw = fBw * fTerm + fRmz * ( 1.0 + fZins ) *"
-"( fTerm - 1.0 ) / fZins;\n"
-"        else\n"
-"            fZw = fBw * fTerm + fRmz * ( fTerm - 1.0 ) / fZins;\n"
-"    }\n"
-"    return -fZw;\n"
-"}\n\n"
-"bool IsLeapYear( int n )\n"
-"{\n"
-    "return ( (( ( n % 4 ) == 0 ) && ( ( n % 100 ) != 0)) || ( ( n % 400 ) == 0 ) );\n"
-"}\n"
-
-"int DaysInMonth( int nMonth, int nYear )\n"
-"{\n"
- "   int aDaysInMonth[12] = { 31, 28, 31, 30, 31, 30,\n"
- "                                       31, 31, 30, 31, 30, 31 };\n"
-"\n"
-"    if ( nMonth != 2 )\n"
-"        return aDaysInMonth[nMonth-1];\n"
-"    else\n"
-"    {\n"
-"        if ( IsLeapYear(nYear) )\n"
-"            return aDaysInMonth[nMonth-1] + 1;\n"
-"        else\n"
-"            return aDaysInMonth[nMonth-1];\n"
-"    }\n"
-"}\n"
-
-"void DaysToDate( int nDays, int *rDay, int* rMonth, int* rYear )\n"
-"{\n"
-"\n"
-"    int   nTempDays;\n"
-"    int   i = 0;\n"
-"    bool    bCalc;\n"
-
-"    do\n"
-"    {\n"
-"        nTempDays = nDays;\n"
-"        *rYear = (int)((nTempDays / 365) - i);\n"
-"        nTempDays -= ((int) *rYear -1) * 365;\n"
-"        nTempDays -= (( *rYear -1) / 4) - (( *rYear -1) / 100) + ((*rYear -1) / 400);\n"
-"        bCalc = false;\n"
-"        if ( nTempDays < 1 )\n"
-"        {\n"
-"            i++;\n"
-"            bCalc = true;\n"
-"        }\n"
-"        else\n"
-"        {\n"
-"            if ( nTempDays > 365 )\n"
-"            {\n"
-"                if ( (nTempDays != 366) || !IsLeapYear( *rYear ) )\n"
-"                {\n"
-"                    i--;\n"
-"                    bCalc = true;\n"
-"                }\n"
-"            }\n"
-"        }\n"
-"    }\n"
-"    while ( bCalc );\n"
-
-"    *rMonth = 1;\n"
-"    while ( (int)nTempDays > DaysInMonth( *rMonth, *rYear ) )\n"
-"    {\n"
-"        nTempDays -= DaysInMonth( *rMonth, *rYear );\n"
-"        *rMonth+=1;\n"
-"    }\n"
-"    *rDay = (int)nTempDays;\n"
-"}\n"
-
-"int  DateToDays( int nDay, int nMonth, int nYear )\n"
-"{\n"
-"    int nDays = ((int)nYear-1) * 365;\n"
-"    nDays += ((nYear-1) / 4) - ((nYear-1) / 100) + ((nYear-1) / 400);\n"
-
-"    for( int i = 1; i < nMonth; i++ )\n"
-"        nDays += DaysInMonth(i,nYear);\n"
-"    nDays += nDay;\n"
-"\n"
-"    return nDays;\n"
-"}\n"
-"int GetNullDate()\n"
-"{\n"
-"     return DateToDays(30,12,1899 );\n"
-"}\n"
-
-"void ScaDate( int nNullDate, int nDate, int nBase,int *nOrigDay, int *nMonth,int *nYear,int *bLastDayMode,int *bLastDay,int *b30Days,int *bUSMode,int *nDay)\n"
-"{\n"
-"DaysToDate( nNullDate + nDate, nOrigDay, nMonth, nYear );\n"
-"*bLastDayMode = (nBase != 5);\n"
-"*bLastDay = (*nOrigDay >= DaysInMonth( *nMonth, *nYear ));\n"
-"*b30Days = (nBase == 0) || (nBase == 4);\n"
-"*bUSMode = (nBase == 0);\n"
-    "if( *b30Days)\n"
-    "{\n"
-        "*nDay = min( *nOrigDay, 30);\n"
-        "if( *bLastDay || (*nDay >=DaysInMonth( *nMonth, *nYear )) )\n"
-        "*nDay = 30;\n"
-    "}\n"
-    "else\n"
-    "{\n"
-        "int nLastDay = DaysInMonth( *nMonth, *nYear );\n"
-        "*nDay = *bLastDay ? nLastDay : min( *nOrigDay, nLastDay );\n"
-    "}\n"
-"}\n"
-
-"void addMonths(int b30Days,int bLastDay,int *nDay,int nOrigDay,int *nMonth,int nMonthCount,int *year)\n"
-"{\n"
-    "int nNewMonth = nMonthCount + *nMonth;\n"
-    "if( nNewMonth > 12 )\n"
-    "{\n"
-        "--nNewMonth;\n"
-        "*year+=nNewMonth / 12 ;\n"
-        "*nMonth = ( nNewMonth % 12 ) + 1;\n"
-    "}\n"
-    "else if( nNewMonth < 1 )\n"
-    "{\n"
-        "*year+= nNewMonth / 12 - 1 ;\n"
-        "*nMonth =  nNewMonth % 12 + 12 ;\n"
-    "}\n"
-    "else\n"
-    "*nMonth = nNewMonth ;\n"
-    "if( b30Days )\n"
-    "{\n"
-        "*nDay = min( nOrigDay, 30);\n"
-        "if( bLastDay || (*nDay >= DaysInMonth( *nMonth, *year )) )\n"
-            "*nDay = 30;\n"
-    "}\n"
-    "else\n"
-    "{\n"
-        "int nLastDay = DaysInMonth( *nMonth, *year );\n"
-        "*nDay = bLastDay ? nLastDay : min( nOrigDay, nLastDay );\n"
-    "}\n"
-"}\n"
-"int getDaysInMonthRange( int nFrom, int nTo,int b30Days,int year)\n"
-"{\n"
-    "if( nFrom > nTo )\n"
-        "return 0;\n"
-    "int nRet = 0;\n"
-    "if( b30Days )\n"
-        "nRet = (nTo - nFrom + 1) * 30;\n"
-    "else\n"
-    "{\n"
-        "for( int nMonthIx = nFrom; nMonthIx <= nTo; ++nMonthIx )\n"
-            "nRet += b30Days ? 30 : DaysInMonth( nMonthIx, year );\n"
-    "}\n"
-    "return nRet;\n"
-"}\n"
-
-"int GetDaysInYears( int nYear1, int nYear2 )\n"
-"{\n"
-    "int  nLeaps = 0;\n"
-    "for( int n = nYear1 ; n <= nYear2 ; n++ )\n"
-    "{\n"
-        "if( IsLeapYear( n ) )\n"
-            "nLeaps++;\n"
-    "}\n"
-    "int  nSum = 1;\n"
-    "nSum += nYear2;\n"
-    "nSum -= nYear1;\n"
-    "nSum *= 365;\n"
-    "nSum += nLeaps;\n"
-    "return nSum;\n"
-"}\n"
-
-"int GetDaysInYear( int nNullDate, int nDate, int nMode )\n"
-"{\n"
-"switch( nMode )\n"
-"{\n"
-"case 0:\n"
-"case 2:\n"
-"case 4:\n"
-     "return 360;\n"
-"case 1:\n"
-     "{\n"
-      "int  nD=0, nM=0, nY=0;\n"
-        "nDate += nNullDate;\n"
-        "DaysToDate( nDate, &nD, &nM, &nY );\n"
-        "return IsLeapYear( nY )? 366 : 365;\n"
-    "}\n"
-"case 3:\n"         
-    "return 365;\n"
-"}\n"
-"}\n"
-"int getDaysInYearRange( int nFrom, int nTo,int b30Days )\n"
-"{\n"
-    "if( nFrom > nTo )\n"
-        "return 0;\n"
-    "return b30Days ? ((nTo - nFrom + 1) * 360) : GetDaysInYears( nFrom, nTo );\n"
-"}\n"
-
-"int getDiff(int rFrom,int rTo,int fDay,int fMonth,int fYear,int fbLastDayMode,int fbLastDay,int fb30Days,int fbUSMode,int fnDay,\n"
-    "int tDay,int tMonth,int tYear,int tbLastDayMode,int tbLastDay,int tb30Days,int tbUSMode,int tnDay)\n"
-"{\n"
-"if(rFrom>rTo)\n"
-"{\n"
-"int d=fDay;fDay=tDay;tDay=d;\n"
-"int m=fMonth;fMonth=tMonth;tMonth=m;\n"
-"int y=fYear;fYear=tYear;tYear=y;\n"
-"int a=fbLastDayMode;fbLastDayMode=tbLastDayMode;tbLastDayMode=a;\n"
-"int b=fbLastDay;fbLastDay=tbLastDay;tbLastDay=b;\n"
-"int c=fb30Days;fb30Days=tb30Days;tb30Days=c;\n"
-"int e=fbUSMode;fbUSMode=tbUSMode;tbUSMode=e;\n"
-"int f=fnDay;fnDay=tnDay;tnDay=f;\n"
-"}\n"
-"int nDiff=0;\n"
-"if( tb30Days )\n"
-"{\n"
-"if( tbUSMode )\n"
-"{\n"
-    "if( ((fMonth == 2) || (fnDay < 30)) && (tDay == 31) )\n"
-        "tnDay = 31;\n"
-     "else if( (tMonth == 2) && tbLastDay )\n"
-     "tnDay = DaysInMonth( 2, tYear );\n"
-"}\n"
-"else\n"
-"{\n"
-     "if( (fMonth == 2) && (fnDay == 30) )\n"
-       "fnDay = DaysInMonth( 2, fYear );\n"
-     "if( (tMonth == 2) && (tnDay == 30) )\n"
-        "tnDay = DaysInMonth( 2, tYear );\n"
-"}\n"
-"}\n"
-"if( (fYear < tYear) || ((fYear == tYear) && (fMonth < tMonth)) )\n"
-"{\n"
-"nDiff = (fb30Days? 30:DaysInMonth(fMonth,fYear) )- fnDay + 1;\n"
-"fDay = fnDay = 1;\n"
-"fbLastDay = 0;\n"
-"addMonths(fb30Days,fbLastDay,&fnDay,fDay,&fMonth,1,&fYear);\n"
-"if( fYear < tYear )\n"
-"{\n"
-    "nDiff += getDaysInMonthRange( fMonth, 12,fb30Days,fYear);\n"
-    "addMonths(fb30Days,fbLastDay,&fnDay,fDay,&fMonth,13-fMonth,&fYear);\n"
-    "nDiff += getDaysInYearRange( fYear, tYear - 1,fb30Days);\n"
-    "fYear+=tYear - fYear;\n"
-"}\n"
-"nDiff += getDaysInMonthRange(fMonth, tMonth - 1,fb30Days ,fYear );\n"
-"addMonths(fb30Days,fbLastDay,&fnDay,fDay,&fMonth,tMonth-fMonth,&fYear);\n"
-"}\n"
-"nDiff += tnDay - fnDay;\n"
-"return nDiff > 0 ? nDiff : 0;\n"
-"}\n"
-
-"int lcl_Getcoupdaybs(int nNullDate,int nSettle, int nMat,int nFreq,int nBase)\n"
-"{\n"
-    "int aDate = nMat;\n"
-    "int rDay=0,rMonth=0, rYear=0;int mDay=0,mMonth=0, mYear=0;int sDay=0,sMonth=0, sYear=0;\n"
-    "int rbLastDayMode=0, rbLastDay=0,rb30Days=0,rbUSMode=0,rnDay=0;\n"	
-    "int sbLastDayMode=0, sbLastDay=0,sb30Days=0,sbUSMode=0,snDay=0;\n"
-    "ScaDate( nNullDate,aDate,nBase,&rDay,&rMonth,&rYear,&rbLastDayMode,&rbLastDay,&rb30Days,&rbUSMode,&rnDay);\n"
-    "ScaDate( nNullDate,nSettle,nBase,&sDay,&sMonth,&sYear,&sbLastDayMode,&sbLastDay,&sb30Days,&sbUSMode,&snDay);\n"
-    "rYear= sYear;\n"
-    "nSettle=nSettle+nNullDate;\n"
-    "aDate=DateToDays( rDay,rMonth,rYear );\n"
-    "if( aDate < nSettle )\n"
-    "{\n"
-        "rYear+= 1;\n"
-        "aDate=DateToDays( rDay,rMonth,rYear );\n"
-    "}\n"
-    "while(aDate > nSettle )\n"
-    "{\n"
-        "addMonths(rb30Days,rbLastDay,&rnDay,rDay,&rMonth,-1*(12/nFreq),&rYear);\n"
-        "aDate=DateToDays( rDay,rMonth,rYear );\n"
-    "}\n"
-    "return getDiff( aDate, nSettle, rDay, rMonth, rYear, rbLastDayMode, rbLastDay, rb30Days, rbUSMode, rnDay,\n"
-            "sDay, sMonth, sYear, sbLastDayMode, sbLastDay, sb30Days, sbUSMode, snDay);\n"
-"}\n"
-
-"int lcl_Getcoupdays(int nNullDate,int nSettle, int nMat,int nFreq,int nBase)\n"  
-"{\n"
-    "int aDate = nMat;\n"
-    "int rDay=0,rMonth=0, rYear=0;int mDay=0,mMonth=0, mYear=0;int sDay=0,sMonth=0, sYear=0;\n"
-    "int rbLastDayMode=0, rbLastDay=0,rb30Days=0,rbUSMode=0,rnDay=0;\n"	
-    "int sbLastDayMode=0, sbLastDay=0,sb30Days=0,sbUSMode=0,snDay=0;\n"
-    "ScaDate( nNullDate,aDate,nBase,&rDay,&rMonth,&rYear,&rbLastDayMode,&rbLastDay,&rb30Days,&rbUSMode,&rnDay);\n"	
-    "ScaDate( nNullDate,nSettle,nBase,&sDay,&sMonth,&sYear,&sbLastDayMode,&sbLastDay,&sb30Days,&sbUSMode,&snDay);\n"
-    "rYear= sYear;\n"
-    "nSettle=nSettle+nNullDate;\n"
-    "aDate=DateToDays( rDay,rMonth,rYear );\n"
-    "if( aDate < nSettle )\n"
-    "{  \n"
-        "rYear+= 1;\n"
-        "aDate=DateToDays( rDay,rMonth,rYear );\n"
-    "}\n"
-    "while(aDate > nSettle )\n"
-    "{\n"
-        "addMonths(rb30Days,rbLastDay,&rnDay,rDay,&rMonth,-1*(12/nFreq),&rYear);\n"
-        "aDate=DateToDays( rDay,rMonth,rYear );\n"
-    "}\n"
-    "int aNextDate=aDate;int aDay=rDay,aMonth=rMonth, aYear=rYear;\n"
-    "int abLastDayMode=rbLastDayMode, abLastDay=rbLastDay,ab30Days=rb30Days,abUSMode=rbUSMode,anDay=rnDay;\n"	
-    "addMonths(ab30Days,abLastDay,&anDay,aDay,&aMonth,12/nFreq,&aYear);\n"
-    "return getDiff( aDate, aNextDate, rDay, rMonth, rYear, rbLastDayMode, rbLastDay, rb30Days, rbUSMode, rnDay,\n"
-        "aDay, aMonth, aYear, abLastDayMode, abLastDay, ab30Days, abUSMode, anDay);\n"
-"}\n"
-
-"int lcl_Getcoupnum(int nNullDate,int nSettle, int nMat,int nFreq)\n"
-"{\n"
-    "int aDate = nMat;int rDay=0,rMonth=0, rYear=0;int mDay=0,mMonth=0, mYear=0;\n"
-    "int sDay=0,sMonth=0, sYear=0;\n"
-    "DaysToDate(aDate+nNullDate,&rDay, &rMonth, &rYear );\n"
-    "DaysToDate(nMat+nNullDate,&mDay, &mMonth, &mYear );\n"
-    "DaysToDate(nSettle+nNullDate,&sDay, &sMonth, &sYear );\n"
-    "rYear= sYear;\n"
-    "nSettle=nSettle+nNullDate;\n"
-    "aDate=DateToDays( rDay,rMonth,rYear );\n"
-    "if( aDate < nSettle )\n"
-        "rYear+= 1;\n"
-    "int d=DateToDays( rDay,rMonth,rYear );\n"
-    "int nMonthCount=-1*(12 / nFreq);\n"
-    "while(d > nSettle )\n"
-    "{\n"
-        "int nNewMonth = nMonthCount + rMonth;\n"
-        "if( nNewMonth > 12 )\n"
-        "{\n"
-            "--nNewMonth;\n"
-            "rYear+=nNewMonth / 12;\n"
-            "rMonth = nNewMonth % 12 + 1;\n"
-        "}\n"
-        "else if( nNewMonth < 1 )\n"
-        "{\n"
-            "rYear+= nNewMonth / 12 - 1;\n"
-            "rMonth = nNewMonth % 12 + 12;\n"
-        "}\n"
-        "else\n"
-            "rMonth =  nNewMonth;\n"
-        "d=DateToDays( rDay,rMonth,rYear );\n"
-    "}\n"
-    "int n=(mYear-rYear)*12+mMonth-rMonth;\n"
-    "n=n*nFreq/12;\n"
-    "return n;\n"
-"}\n"
-
-"double coupdays(int nSettle,int nMat,int nFreq,int nBase)\n"
-"{\n"
-    "int nNullDate=GetNullDate();\n"	
-    "if( nBase == 1 )\n"
-        "return lcl_Getcoupdays(nNullDate, nSettle, nMat,nFreq, nBase);\n"
-    "else\n"
-        "return (double)GetDaysInYear(0,0,nBase)/nFreq;\n"
-"}\n"
-
-"double coupdaybs( int nSettle,int nMat,int nFreq,int nBase)\n"
-"{\n"
-    "int nNullDate=GetNullDate();\n"	
-    "return lcl_Getcoupdaybs(nNullDate, nSettle, nMat,nFreq, nBase);\n"
-"}\n"
-
-"double coupdaysnc( int nSettle,int nMat,int nFreq,int nBase)\n"
-"{\n"
-"int nNullDate=GetNullDate();\n"	
-"if((nBase != 0) && (nBase != 4))\n"
-"{\n"
-        "int aDate = nMat;\n"
-        "int rDay=0,rMonth=0, rYear=0;int mDay=0,mMonth=0, mYear=0;int sDay=0,sMonth=0, sYear=0;\n"
-        "int rbLastDayMode=0, rbLastDay=0,rb30Days=0,rbUSMode=0,rnDay=0;\n"
-        "int sbLastDayMode=0, sbLastDay=0,sb30Days=0,sbUSMode=0,snDay=0;\n"
-        "ScaDate( nNullDate,aDate,nBase,&rDay,&rMonth,&rYear,&rbLastDayMode,&rbLastDay,&rb30Days,&rbUSMode,&rnDay);\n"	
-        "ScaDate( nNullDate,nSettle,nBase,&sDay,&sMonth,&sYear,&sbLastDayMode,&sbLastDay,&sb30Days,&sbUSMode,&snDay);\n"
-        "rYear= sYear;\n"
-        "nSettle=nSettle+nNullDate;\n"
-        "aDate=DateToDays( rDay,rMonth,rYear );\n"
-        "if( aDate > nSettle )\n"
-        "{\n"  
-        "rYear-= 1;\n"
-        "aDate=DateToDays( rDay,rMonth,rYear );\n"
-"}\n"
-"while(aDate <= nSettle )\n"
-"{\n"
-    "addMonths(rb30Days,rbLastDay,&rnDay,rDay,&rMonth,12/nFreq,&rYear);\n"
-    "aDate=DateToDays( rDay,rMonth,rYear );\n"
-"}\n"
-"return getDiff( nSettle, aDate, sDay, sMonth, sYear, sbLastDayMode, sbLastDay, sb30Days, sbUSMode, snDay,\n"
-    "rDay, rMonth, rYear, rbLastDayMode, rbLastDay, rb30Days, rbUSMode, rnDay);\n"
-"}\n"
-"else\n"
-    "return coupdays(nSettle,nMat,nFreq,nBase)- coupdaybs( nSettle,nMat,nFreq,nBase);\n"
-"}\n"
-
-"double coupnum( int nSettle,int nMat,int nFreq,int nBase)\n"
-"{\n"
-    "int nNullDate=GetNullDate();\n"	
-    "return lcl_Getcoupnum(nNullDate,nSettle,nMat,nFreq);\n"
-"}\n"
-
-"double getPrice_(int nSettle, int nMat, double fRate, double fYield,\n"
-    "double fRedemp, int nFreq, int nBase )\n"
-"{\n"
-    "double      fFreq = nFreq;\n"
-    "double      fE = coupdays( nSettle, nMat, nFreq, nBase );\n"
-    "double      fDSC_E = coupdaysnc(  nSettle, nMat, nFreq, nBase ) / fE;\n"
-    "double      fN = coupnum( nSettle, nMat, nFreq, nBase );\n"
-    "double      fA = coupdaybs( nSettle, nMat, nFreq, nBase );\n"
-    "double      fRet = fRedemp / ( pow( 1.0 + fYield / fFreq, fN - 1.0 + fDSC_E ) );\n"
-    "fRet -= 100.0 * fRate / fFreq * fA / fE;\n"
-    "double      fT1 = 100.0 * fRate / fFreq;\n"
-    "double      fT2 = 1.0 + fYield / fFreq;\n"
-    "for( double fK = 0.0 ; fK < fN ; fK+=1.0 )\n"
-      "fRet += fT1 / pow( fT2, fK + fDSC_E );\n"
-"return fRet;\n"
-"}\n"
-
-"double getYield_( int nNullDate, int nSettle, int nMat, double fCoup, double fPrice,double fRedemp, int nFreq, int nBase )\n"
-"{\n"
-    "double      fRate = fCoup;\n"
-    "double      fPriceN = 0.0;\n"
-    "double      fYield1 = 0.0;\n"
-    "double      fYield2 = 1.0;\n"
-    "double      fPrice1 = getPrice_(nSettle, nMat, fRate, fYield1, fRedemp, nFreq, nBase );\n"
-    "double      fPrice2 = getPrice_(nSettle, nMat, fRate, fYield2, fRedemp, nFreq, nBase );\n"
-    "double      fYieldN = ( fYield2 - fYield1 ) * 0.5;\n"
-    "for( unsigned int nIter = 0 ; nIter < 100 && fPriceN != fPrice ; nIter++ )\n"
-    "{\n"
-        "fPriceN = getPrice_(nSettle, nMat, fRate, fYieldN, fRedemp, nFreq, nBase );\n"
-        "if( fPrice == fPrice1 )\n"
-            "return fYield1;\n"
-        "else if( fPrice == fPrice2 )\n"
-            "return fYield2;\n"
-        "else if( fPrice == fPriceN )\n"
-            "return fYieldN;\n"
-        "else if( fPrice < fPrice2 )\n"
-        "{\n"
-            "fYield2 *= 2.0;\n"
-            "fPrice2 = getPrice_(nSettle, nMat, fRate, fYield2, fRedemp, nFreq, nBase );\n"
-            "fYieldN = ( fYield2 - fYield1 ) * 0.5;\n"
-        "}\n"
-        "else\n"
-        "{\n"
-            "if( fPrice < fPriceN )\n"
-            "{\n"
-                "fYield1 = fYieldN;\n"
-                "fPrice1 = fPriceN;\n"
-            "}\n"
-            "else\n"
-            "{\n"
-                "fYield2 = fYieldN;\n"
-                "fPrice2 = fPriceN;\n"
-            "}\n"
-            "fYieldN = fYield2 - ( fYield2 - fYield1 ) * ( ( fPrice - fPrice2 ) / ( fPrice1 - fPrice2 ) );\n"
-        "}\n"
-    "}\n"
-    "return fYieldN;\n"
-"}\n"
-
-"double GetYearFrac( int nNullDate, int nStartDate, int nEndDate, int nMode ) \n"
-"{\n"
-"    if( nStartDate == nEndDate )\n"
-"        return 0.0;     \n"
-
- "   if( nStartDate > nEndDate )\n"
- "   {\n"
- "       int   n = nEndDate;\n"
- "       nEndDate = nStartDate;\n"
- "       nStartDate = n;\n"
- "   }\n"
-
-  "  int nDate1 = nStartDate + nNullDate;\n"
-  "  int nDate2 = nEndDate + nNullDate;\n"
-
-  "  int  nDay1, nDay2;\n"
-  "  int  nMonth1, nMonth2;\n"
-  "  int  nYear1, nYear2;\n"
-
-  "  DaysToDate( nDate1, &nDay1, &nMonth1, &nYear1 );\n"
-  "  DaysToDate( nDate2, &nDay2, &nMonth2, &nYear2 );\n"
-
-    
-  "  int nDayDiff;\n"
-  "  switch( nMode )\n"
-  "  {\n"
-  "      case 0:         \n"
-  "          if ( nDay1 == 31 )\n"
-  "          {\n"
-  "              nDay1--;\n"
-  "          }\n"
-  "          if ( nDay1 == 30 && nDay2 == 31 )\n"
-  "          {\n"
-  "              nDay2--;\n"
-  "          }\n"
-  "          else\n"
-  "          {\n"
-  "              if ( nMonth1 == 2 && nDay1 == ( IsLeapYear( nYear1 ) ? 29 : 28 ) )\n"
-  "              {\n"
-  "                  nDay1 = 30;\n"
-  "                  if ( nMonth2 == 2 && nDay2 == ( IsLeapYear( nYear2 ) ? 29 : 28 ) )\n"
-  "                  {\n"
-  "                      nDay2 = 30;\n"
-  "                  }\n"
-  "              }\n"
-  "          }\n"
-  "          nDayDiff = ( nYear2 - nYear1 ) * 360 + ( nMonth2 - nMonth1 ) * 30 + ( nDay2 - nDay1 );\n"
-  "          break;\n"
-  "      case 1:         \n"
-  "      case 2:        \n"
-  "      case 3:         \n"
-  "         nDayDiff = nDate2 - nDate1;\n"
-  "          break;\n"
-  "      case 4:         \n"
-  "          if ( nDay1 == 31 )\n"
-  "          {\n"
-  "              nDay1--;\n"
-  "          }\n"
-  "          if ( nDay2 == 31 )\n"
-  "          {\n"
-  "              nDay2--;\n"
-  "          }\n"
-  "          nDayDiff = ( nYear2 - nYear1 ) * 360 + ( nMonth2 - nMonth1 ) * 30 + ( nDay2 - nDay1 );\n"
-  "          break;\n"
-  "  }\n"
-
- 
-  "  double nDaysInYear;\n"
-  "  switch( nMode )\n"
-  "  {\n"
-  "      case 0:         \n"
-  "      case 2:         \n"
-  "      case 4:         \n"
-  "          nDaysInYear = 360;\n"
-  "          break;\n"
-  "      case 1:         \n"
-  "          {\n"
-  "              bool isYearDifferent = ( nYear1 != nYear2 );\n"
-  "              if ( isYearDifferent &&\n"
-  "                   ( ( nYear2 != nYear1 + 1 ) ||\n"
-  "                     ( nMonth1 < nMonth2 ) ||\n"
-  "                     ( nMonth1 == nMonth2 && nDay1 < nDay2 ) ) )\n"
-  "              {\n"
-           
-  "                  int nDayCount = 0;\n"
-   "                 for ( int i = nYear1; i <= nYear2; i++ )\n"
-  "                      nDayCount += ( IsLeapYear( i ) ? 366 : 365 );\n"
-
-  "                  nDaysInYear = ( double ) nDayCount / ( double ) ( nYear2 - nYear1 + 1 );\n"
-  "              }\n"
-   "             else\n"
-  "              {\n"
-  "                  if ( isYearDifferent && IsLeapYear( nYear1 ) )\n"
-  "                  {\n"
-  "                      nDaysInYear = 366;\n"
-  "                  }\n"
- "                   else\n"
-  "                  {\n"
-                   
-  "                      if ( ( IsLeapYear( nYear1 ) && nMonth1 <= 2 && nDay1 <= 29 ) ||\n"
-  "                           ( IsLeapYear( nYear2 ) && ( nMonth2 > 3 || ( nMonth2 == 2 && nDay1 == 29 ) ) ) )\n"
-   "                     {\n"
-   "                         nDaysInYear = 366;\n"
-   "                     }\n"
-  "                      else\n"
-  "                      {\n"
-  "                          nDaysInYear = 365;\n"
- "                           for ( int i = nYear1; i <= nYear2; i++ )\n"
-  "                          {\n"
-   "                             if ( IsLeapYear( i ) )\n"
-  "                              {\n"
-  "                                  nDaysInYear = 366;\n"
-   "                                 break;\n"
-   "                             }\n"
-  "                          }\n"
-   "                     }\n"
-   "                 }\n"
-   "             }\n"
-   "         }\n"
-  "          break;\n"
-  "      case 3:         \n"
-  "          nDaysInYear = 365;\n"
- "           break;\n"
-
-  "  }\n"
-
-  "  return (double)( nDayDiff ) / (nDaysInYear);\n"
-"}\n"
-    "double GetYieldmat( int nNullDate, int nSettle, int nMat, int nIssue,\n"
-        "double fRate, double fPrice, int nBase )\n"
-    "{\n"
-        "double      fIssMat = GetYearFrac( nNullDate, nIssue, nMat, nBase );\n"
-        "double      fIssSet = GetYearFrac( nNullDate, nIssue, nSettle, nBase );\n"
-        "double      fSetMat = GetYearFrac( nNullDate, nSettle, nMat, nBase );\n"
-        "double      y = 1.0 + fIssMat * fRate;\n"
-        "y /= fPrice / 100.0 + fIssSet * fRate;\n"
-        "y-=1.0;\n"
-        "y /= fSetMat;\n"
-        "return y;\n"
-    "}\n"
-
-"int GetDiffDate( int nNullDate, int nStartDate, int nEndDate, int nMode,"
-"    int* pOptDaysIn1stYear )\n"
-"{\n"
-"\t   bool    bNeg = nStartDate > nEndDate;\n"
-
-"\t    if( bNeg )\n"
-"\t    {\n"
-"\t\t        int   n = nEndDate;\n"
-"\t\t        nEndDate = nStartDate;\n"
-"\t\t        nStartDate = n;\n"
-"\t    }\n"
-"\t    int       nRet;\n"
-"\t    switch( nMode )\n"
-"\t    {\n"
-"\t\t       case 0:   \n"
-"\t\t       case 4:   \n"
-"\t\t            {\n"
-"\t\t\t            int      nD1, nM1, nY1, nD2, nM2, nY2;\n"
-"\t\t\t            nStartDate += nNullDate;\n"
-"\t\t\t            nEndDate += nNullDate;\n"
-"\t\t\t            DaysToDate( nStartDate, &nD1, &nM1, &nY1 );\n"
-"\t\t\t            DaysToDate( nEndDate, &nD2, &nM2, &nY2 );\n"
-"\t\t\t            bool        bLeap = IsLeapYear( nY1 );\n"
-"\t\t\t            int       nDays, nMonths;\n"
-"\t\t\t            nMonths = nM2 - nM1;\n"
-"\t\t\t            nDays = nD2 - nD1;\n"
-"\t\t\t            nMonths += ( nY2 - nY1 ) * 12;\n"
-"\t\t\t            nRet = nMonths * 30 + nDays;\n"
-"\t\t\t            if( nMode == 0 && nM1 == 2 && nM2 != 2 && nY1 == nY2 )\n"
-"\t\t\t\t                nRet -= bLeap? 1 : 2;\n"
-"\t\t\t            if( pOptDaysIn1stYear )\n"
-"\t\t\t\t                *pOptDaysIn1stYear = 360;\n"
-"\t\t            }\n"
-"\t\t\t           break;\n"
-"\t\t        case 1:    \n"
-"\t\t\t           if( pOptDaysIn1stYear )\n"
-"\t\t\t            {\n"
-"\t\t\t\t                int      nD, nM, nY;\n"
-"\t\t\t\t                DaysToDate( nStartDate + nNullDate, &nD, &nM, &nY );\n"
-"\t\t\t\t                *pOptDaysIn1stYear = IsLeapYear( nY )? 366 : 365;\n"
-"\t\t\t           }\n"
-"\t\t\t            nRet = nEndDate - nStartDate;\n"
-"\t\t\t            break;\n"
-"\t\t        case 2:      \n"
-"\t\t\t            nRet = nEndDate - nStartDate;\n"
-"\t\t\t            if( pOptDaysIn1stYear )\n"
-"\t\t\t\t                *pOptDaysIn1stYear = 360;\n"
-"\t\t\t            break;\n"
-"\t\t        case 3:        \n"
-"\t\t\t            nRet = nEndDate - nStartDate;\n"
-"\t\t\t            if( pOptDaysIn1stYear )\n"
-"\t\t\t\t                *pOptDaysIn1stYear = 365;\n"
-"\t\t\t            break;\n"
-"\t    }\n"
-"\t    return bNeg? -nRet : nRet;\n"
-"}\n"
-"double GetYearDiff( int nNullDate, int nStartDate, int nEndDate, int nMode )\n"
-"{\n"
-"\t    int   nDays1stYear;\n"
-"\t    int   nTotalDays = GetDiffDate( nNullDate, nStartDate, nEndDate, nMode, &nDays1stYear );\n"
-"\t    double result=(double)(nTotalDays)/(nDays1stYear);\n"
-"\treturn result;\n"
-"}\n"
-"int GetDiffDate360_(\n"
-"                int nDay1, int nMonth1, int nYear1, bool bLeapYear1,\n"
-"                int nDay2, int nMonth2, int nYear2,\n"
-"                bool bUSAMethod )\n"
-"{\n"
-"    if( nDay1 == 31 )\n"
-"        nDay1--;\n"
-"    else if( bUSAMethod && ( nMonth1 == 2 && ( nDay1 == 29 || ( nDay1 == 28 && !bLeapYear1 ) ) ) )\n"
-"            nDay1 = 30;\n"
-"    if( nDay2 == 31 )\n"
-"    {\n"
-"        if( bUSAMethod && nDay1 != 30 )\n"
-"        {\n"
-"            nDay2 = 1;\n"
-"            if( nMonth2 == 12 )\n"
-"            {\n"
-"                nYear2++;\n"
-"                nMonth2 = 1;\n"
-"            }\n"
-"            else\n"
-"                nMonth2++;\n"
-"        }\n"
-"        else\n"
-"            nDay2 = 30;\n"
-"    }\n"
-"    return nDay2 + nMonth2 * 30 + nYear2 * 360 - nDay1 - nMonth1 * 30 - nYear1 * 360;\n"
-"}\n"
-
-"int GetDiffDate360( int nNullDate, int nDate1, int nDate2, bool bUSAMethod )\n"
-"{\n"
-"    nDate1 += nNullDate;\n"
-"    nDate2 += nNullDate;\n"
-"    int nDay1, nMonth1, nYear1, nDay2, nMonth2, nYear2;\n"
-"    DaysToDate( nDate1, &nDay1, &nMonth1, &nYear1 );\n"
-"    DaysToDate( nDate2, &nDay2, &nMonth2, &nYear2 );\n"
-"    return GetDiffDate360_( nDay1, nMonth1, nYear1, IsLeapYear( nYear1 ), nDay2, nMonth2, nYear2, bUSAMethod );\n"
-"}\n";
-
-#endif
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sc/source/core/opencl/op_financial.cxx b/sc/source/core/opencl/op_financial.cxx
index 69f7d02..ff167e0 100644
--- a/sc/source/core/opencl/op_financial.cxx
+++ b/sc/source/core/opencl/op_financial.cxx
@@ -258,6 +258,17 @@ void OpDollarfr::GenSlidingWindowFunction(std::stringstream &ss,
     ss << "}";
 }
 
+void OpDISC::BinInlineFun(std::set<std::string>& decls,
+    std::set<std::string>& funs)
+{
+    decls.insert(GetYearFracDecl);decls.insert(DaysToDateDecl);
+    decls.insert(GetNullDateDecl);decls.insert(DateToDaysDecl);
+    decls.insert(DaysInMonthDecl);decls.insert(IsLeapYearDecl);
+    funs.insert(GetYearFrac);funs.insert(DaysToDate);
+    funs.insert(GetNullDate);funs.insert(DateToDays);
+    funs.insert(DaysInMonth);funs.insert(IsLeapYear);
+}
+
 void OpDISC::GenSlidingWindowFunction(
     std::stringstream &ss, const std::string sSymName, SubArguments &vSubArguments)
 {
@@ -361,6 +372,19 @@ void OpDISC::GenSlidingWindowFunction(
     ss << "}";
 }
 
+void OpINTRATE::BinInlineFun(std::set<std::string>& decls,
+    std::set<std::string>& funs)
+{
+    decls.insert(GetYearDiffDecl);decls.insert(GetDiffDateDecl);
+    decls.insert(DaysToDateDecl);decls.insert(GetNullDateDecl);
+    decls.insert(DateToDaysDecl);decls.insert(DaysInMonthDecl);
+    decls.insert(IsLeapYearDecl);
+    funs.insert(GetYearDiff);funs.insert(GetDiffDate);
+    funs.insert(DaysToDate);funs.insert(GetNullDate);
+    funs.insert(DateToDays);funs.insert(DaysInMonth);
+    funs.insert(IsLeapYear);
+}
+
 void OpINTRATE::GenSlidingWindowFunction(
     std::stringstream &ss, const std::string sSymName, SubArguments &vSubArguments)
 {
@@ -507,7 +531,12 @@ void Fvschedule::GenSlidingWindowFunction(
     ss << "return (double)tmp * arg0";
     ss << ";\n}";
 }
-
+void Cumipmt::BinInlineFun(std::set<std::string>& decls,
+    std::set<std::string>& funs)
+{
+    decls.insert(GetRmzDecl); decls.insert(GetZwDecl);
+    funs.insert(GetRmz);funs.insert(GetZw);
+}
 void Cumipmt::GenSlidingWindowFunction(
     std::stringstream &ss, const std::string sSymName, SubArguments &vSubArguments)
 {
@@ -803,6 +832,17 @@ void XNPV::GenSlidingWindowFunction(
     ss << "}";
 }
 
+ void PriceMat::BinInlineFun(std::set<std::string>& decls,
+    std::set<std::string>& funs)
+{
+    decls.insert(GetYearFracDecl);decls.insert(GetNullDateDecl);
+    decls.insert(DateToDaysDecl);decls.insert(DaysToDateDecl);
+    decls.insert(DaysInMonthDecl);decls.insert(IsLeapYearDecl);
+
+    funs.insert(GetYearFrac);funs.insert(GetNullDate);
+    funs.insert(DateToDays);funs.insert(DaysToDate);
+    funs.insert(DaysInMonth);funs.insert(IsLeapYear);
+}
 void PriceMat::GenSlidingWindowFunction(
     std::stringstream &ss, const std::string sSymName, SubArguments &vSubArguments)
 {
@@ -1153,6 +1193,18 @@ void OpEffective::GenSlidingWindowFunction(
     ss << "}";
 }
 
+ void OpTbilleq::BinInlineFun(std::set<std::string>& decls,
+    std::set<std::string>& funs)
+{
+    decls.insert(GetDiffDate360_Decl);decls.insert(GetDiffDate360Decl);
+    decls.insert(DateToDaysDecl);decls.insert(DaysToDateDecl);
+    decls.insert(DaysInMonthDecl);decls.insert(GetNullDateDecl);
+    decls.insert(IsLeapYearDecl);
+    funs.insert(GetDiffDate360_);funs.insert(GetDiffDate360);
+    funs.insert(DateToDays);funs.insert(DaysToDate);
+    funs.insert(DaysInMonth);funs.insert(GetNullDate);
+    funs.insert(IsLeapYear);
+}
 void OpTbilleq::GenSlidingWindowFunction(
     std::stringstream &ss, const std::string sSymName, SubArguments &vSubArguments)
 {
@@ -1233,7 +1285,12 @@ void OpTbilleq::GenSlidingWindowFunction(
     ss << "return tmp;\n";
     ss << "}";
 }
-
+void OpCumprinc::BinInlineFun(std::set<std::string>& decls,
+    std::set<std::string>& funs)
+{
+    decls.insert(GetRmzDecl); decls.insert(GetZwDecl);
+    funs.insert(GetRmz);funs.insert(GetZw);
+}
 void OpCumprinc::GenSlidingWindowFunction(std::stringstream &ss,
             const std::string sSymName, SubArguments &vSubArguments)
 {
@@ -1361,6 +1418,16 @@ void OpCumprinc::GenSlidingWindowFunction(std::stringstream &ss,
     ss << "}";
 }
 
+void OpAccrintm::BinInlineFun(std::set<std::string>& decls,
+    std::set<std::string>& funs)
+{
+    decls.insert(IsLeapYearDecl); decls.insert(DaysInMonthDecl);
+    decls.insert(DaysToDateDecl); decls.insert(DateToDaysDecl);
+    decls.insert(GetNullDateDecl); decls.insert(GetDiffDateDecl);
+    funs.insert(IsLeapYear);funs.insert(DaysInMonth);
+    funs.insert(DaysToDate);funs.insert(DateToDays);
+    funs.insert(GetNullDate);funs.insert(GetDiffDate);
+}
 void OpAccrintm::GenSlidingWindowFunction(
     std::stringstream &ss, const std::string sSymName, SubArguments &vSubArguments)
 {
@@ -1472,6 +1539,35 @@ void OpAccrintm::GenSlidingWindowFunction(
     ss << "}";
 }
 
+ void OpYield::BinInlineFun(std::set<std::string>& decls,
+    std::set<std::string>& funs)
+{
+    decls.insert(getYield_Decl);decls.insert(getPrice_Decl);
+    decls.insert(coupnumDecl);decls.insert(coupdaysncDecl);
+    decls.insert(coupdaybsDecl);decls.insert(coupdaysDecl);
+    decls.insert(lcl_GetcoupnumDecl);decls.insert(lcl_GetcoupdaysDecl);
+    decls.insert(lcl_GetcoupdaybsDecl);decls.insert(getDiffDecl);
+    decls.insert(getDaysInYearRangeDecl);decls.insert(GetDaysInYearDecl);
+    decls.insert(GetDaysInYearsDecl);decls.insert(getDaysInMonthRangeDecl);
+    decls.insert(addMonthsDecl);decls.insert(ScaDateDecl);
+    decls.insert(GetNullDateDecl);decls.insert(DateToDaysDecl);
+    decls.insert(DaysToDateDecl);decls.insert(DaysInMonthDecl);
+    decls.insert(IsLeapYearDecl);
+
+    funs.insert(getYield_);funs.insert(getPrice_);
+    funs.insert(coupnum);funs.insert(coupdaysnc);
+    funs.insert(coupdaybs);funs.insert(coupdays);
+    funs.insert(lcl_Getcoupnum);funs.insert(lcl_Getcoupdays);
+    funs.insert(lcl_Getcoupdaybs);funs.insert(getDiff);
+    funs.insert(getDaysInYearRange);funs.insert(GetDaysInYear);
+    funs.insert(GetDaysInYears);funs.insert(getDaysInMonthRange);
+    funs.insert(addMonths);funs.insert(ScaDate);
+    funs.insert(GetNullDate);funs.insert(DateToDays);
+    funs.insert(DaysToDate);funs.insert(DaysInMonth);
+    funs.insert(IsLeapYear);
+}
+
+
 void OpYield::GenSlidingWindowFunction(
     std::stringstream &ss, const std::string sSymName, SubArguments &vSubArguments)
 {
@@ -1699,6 +1795,20 @@ void OpSLN::GenSlidingWindowFunction(std::stringstream &ss,
     ss << "}";
 }
 
+ void OpYieldmat::BinInlineFun(std::set<std::string>& decls,
+    std::set<std::string>& funs)
+{
+    decls.insert(GetYearFracDecl);decls.insert(GetNullDateDecl);
+    decls.insert(DateToDaysDecl);decls.insert(DaysToDateDecl);
+    decls.insert(DaysInMonthDecl);decls.insert(IsLeapYearDecl);
+    decls.insert(GetYieldmatDecl);
+
+    funs.insert(GetYearFrac);funs.insert(GetNullDate);
+    funs.insert(DateToDays);funs.insert(DaysToDate);
+    funs.insert(DaysInMonth);funs.insert(IsLeapYear);
+    funs.insert(GetYieldmat);
+}
+
 void OpYieldmat::GenSlidingWindowFunction(
     std::stringstream &ss, const std::string sSymName, SubArguments &vSubArguments)
 {
@@ -1952,6 +2062,12 @@ void OpPMT::GenSlidingWindowFunction(std::stringstream &ss,
     ss << "return tmp;\n";
     ss << "}";
 }
+ void OpPPMT::BinInlineFun(std::set<std::string>& decls,
+    std::set<std::string>& funs)
+{
+    decls.insert(GetZwDecl);
+    funs.insert(GetZw);
+}
 
 void OpPPMT::GenSlidingWindowFunction(std::stringstream &ss,
         const std::string sSymName, SubArguments &vSubArguments)
@@ -2036,7 +2152,24 @@ void OpPPMT::GenSlidingWindowFunction(std::stringstream &ss,
     ss << "return tmp;\n";
     ss << "}";
 }
-
+void OpCoupdaybs::BinInlineFun(std::set<std::string>& decls,
+    std::set<std::string>& funs)
+{
+    decls.insert(IsLeapYearDecl); decls.insert(DaysInMonthDecl);
+    decls.insert(DaysToDateDecl); decls.insert(DateToDaysDecl);
+    decls.insert(GetNullDateDecl); decls.insert(ScaDateDecl);
+    decls.insert(addMonthsDecl); decls.insert(getDaysInMonthRangeDecl);
+    decls.insert(GetDaysInYearsDecl);
+    decls.insert(getDaysInYearRangeDecl); decls.insert(getDiffDecl);
+    decls.insert(lcl_GetcoupdaybsDecl);
+    funs.insert(IsLeapYear);funs.insert(DaysInMonth);
+    funs.insert(DaysToDate);funs.insert(DateToDays);
+    funs.insert(GetNullDate);funs.insert(ScaDate);
+    funs.insert(addMonths);funs.insert(getDaysInMonthRange);
+    funs.insert(GetDaysInYears);
+    funs.insert(getDaysInYearRange);funs.insert(getDiff);
+    funs.insert(lcl_Getcoupdaybs);
+}
 void OpCoupdaybs::GenSlidingWindowFunction(
     std::stringstream &ss, const std::string sSymName, SubArguments &vSubArguments)
 {
@@ -2120,6 +2253,24 @@ void OpCoupdaybs::GenSlidingWindowFunction(
     ss << "return tmp;\n";
     ss << "}";
 }
+void OpCoupdays::BinInlineFun(std::set<std::string>& decls,
+    std::set<std::string>& funs)
+{
+    decls.insert(IsLeapYearDecl); decls.insert(DaysInMonthDecl);
+    decls.insert(DaysToDateDecl); decls.insert(DateToDaysDecl);
+    decls.insert(GetNullDateDecl); decls.insert(ScaDateDecl);
+    decls.insert(addMonthsDecl); decls.insert(getDaysInMonthRangeDecl);
+    decls.insert(GetDaysInYearsDecl); decls.insert(GetDaysInYearDecl);
+    decls.insert(getDaysInYearRangeDecl); decls.insert(getDiffDecl);
+    decls.insert(lcl_GetcoupdaysDecl);
+    funs.insert(IsLeapYear);funs.insert(DaysInMonth);
+    funs.insert(DaysToDate);funs.insert(DateToDays);
+    funs.insert(GetNullDate);funs.insert(ScaDate);
+    funs.insert(addMonths);funs.insert(getDaysInMonthRange);
+    funs.insert(GetDaysInYears);funs.insert(GetDaysInYear);
+    funs.insert(getDaysInYearRange);funs.insert(getDiff);
+    funs.insert(lcl_Getcoupdays);
+}
 
 void OpCoupdays::GenSlidingWindowFunction(
     std::stringstream &ss, const std::string sSymName, SubArguments &vSubArguments)
@@ -2207,7 +2358,28 @@ void OpCoupdays::GenSlidingWindowFunction(
     ss << "return tmp;\n";
     ss << "}";
 }
-
+void OpCoupdaysnc::BinInlineFun(std::set<std::string>& decls,
+    std::set<std::string>& funs)
+{
+    decls.insert(IsLeapYearDecl); decls.insert(DaysInMonthDecl);
+    decls.insert(DaysToDateDecl); decls.insert(DateToDaysDecl);
+    decls.insert(GetNullDateDecl); decls.insert(ScaDateDecl);
+    decls.insert(addMonthsDecl); decls.insert(getDaysInMonthRangeDecl);
+    decls.insert(GetDaysInYearsDecl); decls.insert(GetDaysInYearDecl);
+    decls.insert(getDaysInYearRangeDecl); decls.insert(getDiffDecl);
+    decls.insert(lcl_GetcoupdaysDecl);decls.insert(lcl_GetcoupdaybsDecl);
+    decls.insert(coupdaysDecl);decls.insert(coupdaybsDecl);
+    decls.insert(coupdaysncDecl);
+    funs.insert(IsLeapYear);funs.insert(DaysInMonth);
+    funs.insert(DaysToDate);funs.insert(DateToDays);
+    funs.insert(GetNullDate);funs.insert(ScaDate);
+    funs.insert(addMonths);funs.insert(getDaysInMonthRange);
+    funs.insert(GetDaysInYears);funs.insert(GetDaysInYear);
+    funs.insert(getDaysInYearRange);funs.insert(getDiff);
+    funs.insert(lcl_Getcoupdays);funs.insert(lcl_Getcoupdaybs);
+    funs.insert(coupdaysnc);funs.insert(coupdaybs);
+    funs.insert(coupdays);
+}
 void OpCoupdaysnc::GenSlidingWindowFunction(
     std::stringstream &ss, const std::string sSymName, SubArguments &vSubArguments)
 {
@@ -2290,6 +2462,19 @@ void OpCoupdaysnc::GenSlidingWindowFunction(
     ss << "}";
 }
 
+ void OpReceived::BinInlineFun(std::set<std::string>& decls,
+    std::set<std::string>& funs)
+{
+    decls.insert(GetYearDiffDecl);decls.insert(GetDiffDateDecl);
+    decls.insert(DaysToDateDecl);decls.insert(DaysInMonthDecl);
+    decls.insert(GetNullDateDecl);decls.insert(IsLeapYearDecl);
+    decls.insert(DateToDaysDecl);
+    funs.insert(GetDiffDate);funs.insert(DaysToDate);
+    funs.insert(DaysInMonth);funs.insert(GetNullDate);
+    funs.insert(DateToDays);funs.insert(IsLeapYear);
+    funs.insert(GetYearDiff);
+}
+
 void OpReceived::GenSlidingWindowFunction(std::stringstream &ss,
         const std::string sSymName, SubArguments &vSubArguments)
 {
@@ -2387,6 +2572,17 @@ void OpReceived::GenSlidingWindowFunction(std::stringstream &ss,
     ss << "}";
 }
 
+ void OpYielddisc::BinInlineFun(std::set<std::string>& decls,
+    std::set<std::string>& funs)
+{
+    decls.insert(GetYearFracDecl);decls.insert(GetNullDateDecl);
+    decls.insert(DateToDaysDecl);decls.insert(DaysToDateDecl);
+    decls.insert(DaysInMonthDecl);decls.insert(IsLeapYearDecl);
+
+    funs.insert(GetYearFrac);funs.insert(GetNullDate);
+    funs.insert(DateToDays);funs.insert(DaysToDate);
+    funs.insert(DaysInMonth);funs.insert(IsLeapYear);
+}
 void OpYielddisc::GenSlidingWindowFunction(
     std::stringstream &ss, const std::string sSymName, SubArguments &vSubArguments)
 {
@@ -2507,6 +2703,18 @@ void OpYielddisc::GenSlidingWindowFunction(
     ss << "}";
 }
 
+ void OpTbillprice::BinInlineFun(std::set<std::string>& decls,
+    std::set<std::string>& funs)
+{
+    decls.insert(GetYearFracDecl);decls.insert(GetNullDateDecl);
+    decls.insert(DateToDaysDecl);decls.insert(DaysToDateDecl);
+    decls.insert(DaysInMonthDecl);decls.insert(IsLeapYearDecl);
+
+    funs.insert(GetYearFrac);funs.insert(GetNullDate);
+    funs.insert(DateToDays);funs.insert(DaysToDate);
+    funs.insert(DaysInMonth);funs.insert(IsLeapYear);
+}
+
 void OpTbillprice::GenSlidingWindowFunction(
     std::stringstream &ss, const std::string sSymName, SubArguments &vSubArguments)
 {
@@ -2709,6 +2917,20 @@ void RATE::GenSlidingWindowFunction(
     ss << "}";
 }
 
+ void OpTbillyield::BinInlineFun(std::set<std::string>& decls,
+    std::set<std::string>& funs)
+{
+    decls.insert(GetDiffDate360Decl);decls.insert(IsLeapYearDecl);
+    decls.insert(DateToDaysDecl);decls.insert(DaysToDateDecl);
+    decls.insert(DaysInMonthDecl);decls.insert(GetNullDateDecl);
+    decls.insert(GetDiffDate360_Decl);
+    funs.insert(GetDiffDate360);funs.insert(DateToDays);
+    funs.insert(DaysToDate);funs.insert(IsLeapYear);
+    funs.insert(DaysInMonth);funs.insert(GetNullDate);
+    funs.insert(GetDiffDate360_);
+
+}
+
 void OpTbillyield::GenSlidingWindowFunction(
     std::stringstream &ss, const std::string sSymName, SubArguments &vSubArguments)
 {
diff --git a/sc/source/core/opencl/op_financial.hxx b/sc/source/core/opencl/op_financial.hxx
index 544d757..7a79dde 100644
--- a/sc/source/core/opencl/op_financial.hxx
+++ b/sc/source/core/opencl/op_financial.hxx
@@ -69,6 +69,7 @@ public:
 
     virtual void GenSlidingWindowFunction(std::stringstream &ss,
             const std::string sSymName, SubArguments &vSubArguments);
+    virtual void BinInlineFun(std::set<std::string>& ,std::set<std::string>& );
 
     virtual std::string BinFuncName(void) const { return "DISC"; }
 };
@@ -80,6 +81,7 @@ public:
 
     virtual void GenSlidingWindowFunction(std::stringstream &ss,
             const std::string sSymName, SubArguments &vSubArguments);
+    virtual void BinInlineFun(std::set<std::string>& ,std::set<std::string>& );
 
     virtual std::string BinFuncName(void) const { return "INTRATE"; }
 };
@@ -96,6 +98,7 @@ class Cumipmt: public Normal
 public:
     virtual void GenSlidingWindowFunction(std::stringstream &ss,
             const std::string sSymName, SubArguments &vSubArguments);
+    virtual void BinInlineFun(std::set<std::string>& ,std::set<std::string>& );
 };
 
 class IRR: public Normal
@@ -124,6 +127,7 @@ class PriceMat: public Normal
 public:
     virtual void GenSlidingWindowFunction(std::stringstream &ss,
             const std::string sSymName, SubArguments &vSubArguments);
+    virtual void BinInlineFun(std::set<std::string>& ,std::set<std::string>& );
 };
 class OpSYD: public Normal
 {
@@ -174,6 +178,7 @@ public:
             const std::string sSymName, SubArguments &vSubArguments);
 
     virtual std::string BinFuncName(void) const { return "fTbilleq"; }
+    virtual void BinInlineFun(std::set<std::string>& ,std::set<std::string>& );
 };
 
 class OpCumprinc: public Normal
@@ -182,6 +187,7 @@ public:
     virtual std::string GetBottom(void) { return "0"; }
     virtual void GenSlidingWindowFunction(std::stringstream &ss,
             const std::string sSymName, SubArguments &vSubArguments);
+    virtual void BinInlineFun(std::set<std::string>& ,std::set<std::string>& );
     virtual std::string BinFuncName(void) const { return "cumprinc"; }
 };
 
@@ -189,6 +195,7 @@ class OpAccrintm: public Normal
 {
  public:
     virtual std::string GetBottom(void) { return "0"; }
+    virtual void BinInlineFun(std::set<std::string>& ,std::set<std::string>& );
     virtual void GenSlidingWindowFunction(std::stringstream &ss,
             const std::string sSymName, SubArguments &vSubArguments);
     virtual std::string BinFuncName(void) const { return "Accrintm"; }
@@ -200,6 +207,7 @@ public:
     virtual void GenSlidingWindowFunction(std::stringstream &ss,
             const std::string sSymName, SubArguments &vSubArguments);
     virtual std::string BinFuncName(void) const { return "Yield"; }
+     virtual void BinInlineFun(std::set<std::string>& ,std::set<std::string>& );
 };
 
 
@@ -224,6 +232,7 @@ public:
     virtual void GenSlidingWindowFunction(std::stringstream &ss,
             const std::string sSymName, SubArguments &vSubArguments);
     virtual std::string BinFuncName(void) const { return "Yieldmat"; }
+     virtual void BinInlineFun(std::set<std::string>& ,std::set<std::string>& );
 };
 
 class OpPMT: public Normal
@@ -239,6 +248,7 @@ class OpPPMT: public Normal
 public:
     virtual void GenSlidingWindowFunction(std::stringstream &ss,
         const std::string sSymName, SubArguments &vSubArguments);
+    virtual void BinInlineFun(std::set<std::string>& ,std::set<std::string>& );
     virtual std::string BinFuncName(void) const { return "PPMT"; }
 };
 
@@ -248,6 +258,7 @@ public:
     virtual std::string GetBottom(void) { return "0";}
     virtual void GenSlidingWindowFunction(std::stringstream &ss,
         const std::string sSymName, SubArguments &vSubArguments);
+    virtual void BinInlineFun(std::set<std::string>& ,std::set<std::string>& );
     virtual std::string BinFuncName(void) const { return "Coupdaybs"; }
 
 };
@@ -258,6 +269,7 @@ public:
     virtual std::string GetBottom(void) { return "0";}
     virtual void GenSlidingWindowFunction(std::stringstream &ss,
         const std::string sSymName, SubArguments &vSubArguments);
+    virtual void BinInlineFun(std::set<std::string>& ,std::set<std::string>& );
     virtual std::string BinFuncName(void) const { return "Coupdays";}
 
 };
@@ -268,6 +280,7 @@ public:
     virtual std::string GetBottom(void) { return "0";}
     virtual void GenSlidingWindowFunction(std::stringstream &ss,
         const std::string sSymName, SubArguments &vSubArguments);
+    virtual void BinInlineFun(std::set<std::string>& ,std::set<std::string>& );
     virtual std::string BinFuncName(void) const { return "Coupdaysnc"; }
 
 };
@@ -279,6 +292,7 @@ public:
     virtual void GenSlidingWindowFunction(std::stringstream &ss,
         const std::string sSymName, SubArguments &vSubArguments);
     virtual std::string BinFuncName(void) const { return "Received"; }
+    virtual void BinInlineFun(std::set<std::string>& ,std::set<std::string>& );
 };
 
 class OpYielddisc: public Normal
@@ -287,6 +301,7 @@ public:
     virtual void GenSlidingWindowFunction(std::stringstream &ss,
         const std::string sSymName, SubArguments &vSubArguments);
     virtual std::string BinFuncName(void) const { return "Yielddisc"; }
+    virtual void BinInlineFun(std::set<std::string>& ,std::set<std::string>& );
 };
 
 class OpTbillprice: public Normal
@@ -295,6 +310,7 @@ public:
     virtual void GenSlidingWindowFunction(std::stringstream &ss,
             const std::string sSymName, SubArguments &vSubArguments);
     virtual std::string BinFuncName(void) const { return "fTbillprice"; }
+    virtual void BinInlineFun(std::set<std::string>& ,std::set<std::string>& );
 };
 
 class OpPriceMat:public PriceMat
@@ -324,6 +340,7 @@ public:
             const std::string sSymName, SubArguments &vSubArguments);
 
     virtual std::string BinFuncName(void) const { return "fTbillyield"; }
+    virtual void BinInlineFun(std::set<std::string>& ,std::set<std::string>& );
 };
 
 class OpMIRR: public MIRR
diff --git a/sc/source/core/opencl/opinlinefun_finacial.cxx b/sc/source/core/opencl/opinlinefun_finacial.cxx
index bb5d3f2..05e6a5f 100644
--- a/sc/source/core/opencl/opinlinefun_finacial.cxx
+++ b/sc/source/core/opencl/opinlinefun_finacial.cxx
@@ -13,7 +13,7 @@ std::string approxEqualDecl="bool approxEqual(double a, double b);\n";
 std::string approxEqual =
 "bool approxEqual(double a, double b)\n"
 "{\n"
-    "\tif (a == b)\n"
+"     if (a == b)\n"
         "\t\treturn true;\n"
     "\tdouble x = a - b;\n"
     "\treturn (x < 0.0 ? -x : x) < ((a < 0.0 ? -a : a) * (1.0 / (16777216.0 *"
@@ -48,6 +48,883 @@ std::string Round =
     "\tfValue = floor(fValue + 0.5 + nKorrVal[nIndex]);\n"
     "\treturn fValue;\n"
 "}\n";
+
+std::string GetRmzDecl =
+"double GetRmz( double fZins, double fZzr, double fBw, double fZw,int nF );\n";
+
+std::string GetRmz=
+"double GetRmz( double fZins, double fZzr, double fBw, double fZw, int nF )\n"
+"{\n"
+    "\tdouble      fRmz;\n"
+    "\tif( fZins == 0.0 )\n"
+        "\t\tfRmz = ( fBw + fZw ) / fZzr;\n"
+    "\telse\n"
+        "\t\t{\n"
+            "\t\t\tdouble  fTerm = pow( 1.0 + fZins, fZzr );\n"
+            "\t\t\tif( nF > 0 )\n"
+                      "\t\t\t\tfRmz = ( fZw * fZins / ( fTerm - 1.0 ) + fBw"
+                      " * fZins / ( 1.0 - 1.0 / fTerm ) ) / ( 1.0 + fZins );\n"
+            "\t\t\telse\n"
+            "\t\t\t\tfRmz = fZw * fZins / ( fTerm - 1.0 ) + fBw * fZins /"
+            "( 1.0 - 1.0 / fTerm );\n"
+        "\t\t}\n"
+    "\treturn -fRmz;\n"
+"}\n\n";
+
+std::string GetZwDecl =
+"double GetZw( double fZins, double fZzr, double fRmz, double fBw, int nF );\n";
+
+std::string GetZw =
+"double GetZw( double fZins, double fZzr, double fRmz, double fBw, int nF )\n"
+"{\n"
+"    double      fZw;\n"
+"    if( fZins == 0.0 )\n"
+"        fZw = fBw + fRmz * fZzr;\n"
+"    else\n"
+"    {\n"
+"        double  fTerm = pow( 1.0 + fZins, fZzr );\n"
+"        if( nF > 0 )\n"
+"            fZw = fBw * fTerm + fRmz * ( 1.0 + fZins ) *"
+"( fTerm - 1.0 ) / fZins;\n"
+"        else\n"
+"            fZw = fBw * fTerm + fRmz * ( fTerm - 1.0 ) / fZins;\n"
+"    }\n"
+"    return -fZw;\n"
+"}\n\n";
+
+std::string IsLeapYearDecl =
+"bool IsLeapYear( int n );\n";
+
+std::string IsLeapYear =
+"bool IsLeapYear( int n )\n"
+"{\n"
+    "return ( (( ( n % 4 ) == 0 ) && ( ( n % 100 ) != 0)) || ( ( n % 400 ) == 0 ) );\n"
+"}\n";
+
+std::string DaysInMonthDecl=
+"int DaysInMonth( int nMonth, int nYear );\n";
+
+std::string DaysInMonth =
+"int DaysInMonth( int nMonth, int nYear )\n"
+"{\n"
+ "   int aDaysInMonth[12] = { 31, 28, 31, 30, 31, 30,\n"
+ "                                       31, 31, 30, 31, 30, 31 };\n"
+"\n"
+"    if ( nMonth != 2 )\n"
+"        return aDaysInMonth[nMonth-1];\n"
+"    else\n"
+"    {\n"
+"        if ( IsLeapYear(nYear) )\n"
+"            return aDaysInMonth[nMonth-1] + 1;\n"
+"        else\n"
+"            return aDaysInMonth[nMonth-1];\n"
+"    }\n"
+"}\n";
+
+std::string DaysToDateDecl =
+"void DaysToDate( int nDays, int *rDay, int* rMonth, int* rYear );\n";
+
+std::string DaysToDate =
+"void DaysToDate( int nDays, int *rDay, int* rMonth, int* rYear )\n"
+"{\n"
+"\n"
+"    int   nTempDays;\n"
+"    int   i = 0;\n"
+"    bool    bCalc;\n"
+
+"    do\n"
+"    {\n"
+"        nTempDays = nDays;\n"
+"        *rYear = (int)((nTempDays / 365) - i);\n"
+"        nTempDays -= ((int) *rYear -1) * 365;\n"
+"        nTempDays -= (( *rYear -1) / 4) - (( *rYear -1) / 100) + ((*rYear -1) / 400);\n"
+"        bCalc = false;\n"
+"        if ( nTempDays < 1 )\n"
+"        {\n"
+"            i++;\n"
+"            bCalc = true;\n"
+"        }\n"
+"        else\n"
+"        {\n"
+"            if ( nTempDays > 365 )\n"
+"            {\n"
+"                if ( (nTempDays != 366) || !IsLeapYear( *rYear ) )\n"
+"                {\n"
+"                    i--;\n"
+"                    bCalc = true;\n"
+"                }\n"
+"            }\n"
+"        }\n"
+"    }\n"
+"    while ( bCalc );\n"
+
+"    *rMonth = 1;\n"
+"    while ( (int)nTempDays > DaysInMonth( *rMonth, *rYear ) )\n"
+"    {\n"
+"        nTempDays -= DaysInMonth( *rMonth, *rYear );\n"
+"        *rMonth+=1;\n"
+"    }\n"
+"    *rDay = (int)nTempDays;\n"
+"}\n";
+
+std::string DateToDaysDecl=
+"int  DateToDays( int nDay, int nMonth, int nYear );\n";
+
+std::string DateToDays=
+"int  DateToDays( int nDay, int nMonth, int nYear )\n"
+"{\n"
+"    int nDays = ((int)nYear-1) * 365;\n"
+"    nDays += ((nYear-1) / 4) - ((nYear-1) / 100) + ((nYear-1) / 400);\n"
+
+"    for( int i = 1; i < nMonth; i++ )\n"
+"        nDays += DaysInMonth(i,nYear);\n"
+"    nDays += nDay;\n"
+"\n"
+"    return nDays;\n"
+"}\n";
+
+std::string GetNullDateDecl=
+"int GetNullDate();\n";
+
+std::string GetNullDate=
+"int GetNullDate()\n"
+"{\n"
+"     return DateToDays(30,12,1899 );\n"
+"}\n";
+
+std::string ScaDateDecl=
+"void ScaDate( int nNullDate, int nDate, int nBase,int *nOrigDay, "
+"int *nMonth,int *nYear,int *bLastDayMode,int *bLastDay,"
+"int *b30Days,int *bUSMode,int *nDay);\n";
+
+std::string ScaDate=
+"void ScaDate( int nNullDate, int nDate, int nBase,int *nOrigDay, "
+"int *nMonth,int *nYear,int *bLastDayMode,int *bLastDay,"
+"int *b30Days,int *bUSMode,int *nDay)\n"
+"{\n"
+"DaysToDate( nNullDate + nDate, nOrigDay, nMonth, nYear );\n"
+"*bLastDayMode = (nBase != 5);\n"
+"*bLastDay = (*nOrigDay >= DaysInMonth( *nMonth, *nYear ));\n"
+"*b30Days = (nBase == 0) || (nBase == 4);\n"
+"*bUSMode = (nBase == 0);\n"
+    "if( *b30Days)\n"
+    "{\n"
+        "*nDay = min( *nOrigDay, 30);\n"
+        "if( *bLastDay || (*nDay >=DaysInMonth( *nMonth, *nYear )) )\n"
+        "*nDay = 30;\n"
+    "}\n"
+    "else\n"
+    "{\n"
+        "int nLastDay = DaysInMonth( *nMonth, *nYear );\n"
+        "*nDay = *bLastDay ? nLastDay : min( *nOrigDay, nLastDay );\n"
+    "}\n"
+"}\n";
+
+std::string addMonthsDecl=
+"void addMonths(int b30Days,int bLastDay,int *nDay,int nOrigDay,"
+"int *nMonth,int nMonthCount,int *year);\n";
+
+std::string addMonths=
+"void addMonths(int b30Days,int bLastDay,int *nDay,int nOrigDay,"
+"int *nMonth,int nMonthCount,int *year)\n"
+"{\n"
+    "int nNewMonth = nMonthCount + *nMonth;\n"
+    "if( nNewMonth > 12 )\n"
+    "{\n"
+        "--nNewMonth;\n"
+        "*year+=nNewMonth / 12 ;\n"
+        "*nMonth = ( nNewMonth % 12 ) + 1;\n"
+    "}\n"
+    "else if( nNewMonth < 1 )\n"
+    "{\n"
+        "*year+= nNewMonth / 12 - 1 ;\n"
+        "*nMonth =  nNewMonth % 12 + 12 ;\n"
+    "}\n"
+    "else\n"
+    "*nMonth = nNewMonth ;\n"
+    "if( b30Days )\n"
+    "{\n"
+        "*nDay = min( nOrigDay, 30);\n"
+        "if( bLastDay || (*nDay >= DaysInMonth( *nMonth, *year )) )\n"
+            "*nDay = 30;\n"
+    "}\n"
+    "else\n"
+    "{\n"
+        "int nLastDay = DaysInMonth( *nMonth, *year );\n"
+        "*nDay = bLastDay ? nLastDay : min( nOrigDay, nLastDay );\n"
+    "}\n"
+"}\n";
+
+std::string getDaysInMonthRangeDecl=
+"int getDaysInMonthRange( int nFrom, int nTo,int b30Days,int year);\n";
+
+std::string getDaysInMonthRange=
+"int getDaysInMonthRange( int nFrom, int nTo,int b30Days,int year)\n"
+"{\n"
+    "if( nFrom > nTo )\n"
+        "return 0;\n"
+    "int nRet = 0;\n"
+    "if( b30Days )\n"
+        "nRet = (nTo - nFrom + 1) * 30;\n"
+    "else\n"
+    "{\n"
+        "for( int nMonthIx = nFrom; nMonthIx <= nTo; ++nMonthIx )\n"
+            "nRet += b30Days ? 30 : DaysInMonth( nMonthIx, year );\n"
+    "}\n"
+    "return nRet;\n"
+"}\n";
+
+std::string GetDaysInYearsDecl=
+"int GetDaysInYears( int nYear1, int nYear2 );\n";
+
+std::string GetDaysInYears=
+"int GetDaysInYears( int nYear1, int nYear2 )\n"
+"{\n"
+    "int  nLeaps = 0;\n"
+    "for( int n = nYear1 ; n <= nYear2 ; n++ )\n"
+    "{\n"
+        "if( IsLeapYear( n ) )\n"
+            "nLeaps++;\n"
+    "}\n"
+    "int  nSum = 1;\n"
+    "nSum += nYear2;\n"
+    "nSum -= nYear1;\n"
+    "nSum *= 365;\n"
+    "nSum += nLeaps;\n"
+    "return nSum;\n"
+"}\n";
+
+std::string GetDaysInYearDecl=
+"int GetDaysInYear( int nNullDate, int nDate, int nMode );\n";
+
+std::string GetDaysInYear=
+"int GetDaysInYear( int nNullDate, int nDate, int nMode )\n"
+"{\n"
+"switch( nMode )\n"
+"{\n"
+"case 0:\n"
+"case 2:\n"
+"case 4:\n"
+     "return 360;\n"
+"case 1:\n"
+     "{\n"
+      "int  nD=0, nM=0, nY=0;\n"
+        "nDate += nNullDate;\n"
+        "DaysToDate( nDate, &nD, &nM, &nY );\n"
+        "return IsLeapYear( nY )? 366 : 365;\n"
+    "}\n"
+"case 3:\n"
+    "return 365;\n"
+"}\n"
+"}\n";
+
+std::string getDaysInYearRangeDecl =
+"int getDaysInYearRange( int nFrom, int nTo,int b30Days );\n";
+
+std::string getDaysInYearRange=
+"int getDaysInYearRange( int nFrom, int nTo,int b30Days )\n"
+"{\n"
+    "if( nFrom > nTo )\n"
+        "return 0;\n"
+    "return b30Days ? ((nTo - nFrom + 1) * 360) : GetDaysInYears( nFrom, nTo );\n"
+"}\n";
+
+
+std::string getDiffDecl=
+"int getDiff(int rFrom,int rTo,int fDay,int fMonth,int fYear,int fbLastDayMode,int fbLastDay,"
+"int fb30Days,int fbUSMode,int fnDay,""int tDay,int tMonth,int tYear,int tbLastDayMode,"
+"int tbLastDay,int tb30Days,int tbUSMode,int tnDay);\n";
+
+
+std::string getDiff=
+"int getDiff(int rFrom,int rTo,int fDay,int fMonth,int fYear,int fbLastDayMode,int fbLastDay,"
+"int fb30Days,int fbUSMode,int fnDay,""int tDay,int tMonth,int tYear,int tbLastDayMode,"
+"int tbLastDay,int tb30Days,int tbUSMode,int tnDay)\n"
+"{\n"
+"if(rFrom>rTo)\n"
+"{\n"
+"int d=fDay;fDay=tDay;tDay=d;\n"
+"int m=fMonth;fMonth=tMonth;tMonth=m;\n"
+"int y=fYear;fYear=tYear;tYear=y;\n"
+"int a=fbLastDayMode;fbLastDayMode=tbLastDayMode;tbLastDayMode=a;\n"
+"int b=fbLastDay;fbLastDay=tbLastDay;tbLastDay=b;\n"
+"int c=fb30Days;fb30Days=tb30Days;tb30Days=c;\n"
+"int e=fbUSMode;fbUSMode=tbUSMode;tbUSMode=e;\n"
+"int f=fnDay;fnDay=tnDay;tnDay=f;\n"
+"}\n"
+"int nDiff=0;\n"
+"if( tb30Days )\n"
+"{\n"
+"if( tbUSMode )\n"
+"{\n"
+    "if( ((fMonth == 2) || (fnDay < 30)) && (tDay == 31) )\n"
+        "tnDay = 31;\n"
+     "else if( (tMonth == 2) && tbLastDay )\n"
+     "tnDay = DaysInMonth( 2, tYear );\n"
+"}\n"
+"else\n"
+"{\n"
+     "if( (fMonth == 2) && (fnDay == 30) )\n"
+       "fnDay = DaysInMonth( 2, fYear );\n"
+     "if( (tMonth == 2) && (tnDay == 30) )\n"
+        "tnDay = DaysInMonth( 2, tYear );\n"
+"}\n"
+"}\n"
+"if( (fYear < tYear) || ((fYear == tYear) && (fMonth < tMonth)) )\n"
+"{\n"
+"nDiff = (fb30Days? 30:DaysInMonth(fMonth,fYear) )- fnDay + 1;\n"
+"fDay = fnDay = 1;\n"
+"fbLastDay = 0;\n"
+"addMonths(fb30Days,fbLastDay,&fnDay,fDay,&fMonth,1,&fYear);\n"
+"if( fYear < tYear )\n"
+"{\n"
+    "nDiff += getDaysInMonthRange( fMonth, 12,fb30Days,fYear);\n"
+    "addMonths(fb30Days,fbLastDay,&fnDay,fDay,&fMonth,13-fMonth,&fYear);\n"
+    "nDiff += getDaysInYearRange( fYear, tYear - 1,fb30Days);\n"
+    "fYear+=tYear - fYear;\n"
+"}\n"
+"nDiff += getDaysInMonthRange(fMonth, tMonth - 1,fb30Days ,fYear );\n"
+"addMonths(fb30Days,fbLastDay,&fnDay,fDay,&fMonth,tMonth-fMonth,&fYear);\n"
+"}\n"
+"nDiff += tnDay - fnDay;\n"
+"return nDiff > 0 ? nDiff : 0;\n"
+"}\n";
+
+
+
+std::string lcl_GetcoupdaybsDecl=
+"int lcl_Getcoupdaybs(int nNullDate,int nSettle, int nMat,int nFreq,int nBase);\n";
+
+
+std::string lcl_Getcoupdaybs=
+"int lcl_Getcoupdaybs(int nNullDate,int nSettle, int nMat,int nFreq,int nBase)\n"
+"{\n"
+    "int aDate = nMat;\n"
+    "int rDay=0,rMonth=0, rYear=0;int mDay=0,mMonth=0, mYear=0;int sDay=0,sMonth=0,"
+    "sYear=0;\n"
+    "int rbLastDayMode=0, rbLastDay=0,rb30Days=0,rbUSMode=0,rnDay=0;\n"
+    "int sbLastDayMode=0, sbLastDay=0,sb30Days=0,sbUSMode=0,snDay=0;\n"
+    "ScaDate( nNullDate,aDate,nBase,&rDay,&rMonth,&rYear,&rbLastDayMode,&rbLastDay,"
+    "&rb30Days,&rbUSMode,&rnDay);\n"
+    "ScaDate( nNullDate,nSettle,nBase,&sDay,&sMonth,&sYear,&sbLastDayMode,&sbLastDay,"
+    "&sb30Days,&sbUSMode,&snDay);\n"
+    "rYear= sYear;\n"
+    "nSettle=nSettle+nNullDate;\n"
+    "aDate=DateToDays( rDay,rMonth,rYear );\n"
+    "if( aDate < nSettle )\n"
+    "{\n"
+        "rYear+= 1;\n"
+        "aDate=DateToDays( rDay,rMonth,rYear );\n"
+    "}\n"
+    "while(aDate > nSettle )\n"
+    "{\n"
+        "addMonths(rb30Days,rbLastDay,&rnDay,rDay,&rMonth,-1*(12/nFreq),&rYear);\n"
+        "aDate=DateToDays( rDay,rMonth,rYear );\n"
+    "}\n"
+    "return getDiff( aDate, nSettle, rDay, rMonth, rYear, rbLastDayMode, rbLastDay, rb30Days,"
+    "rbUSMode, rnDay,\n"
+    "sDay, sMonth, sYear, sbLastDayMode, sbLastDay, sb30Days, sbUSMode, snDay);\n"
+"}\n";
+
+std::string lcl_GetcoupdaysDecl=
+"int lcl_Getcoupdays(int nNullDate,int nSettle, int nMat,int nFreq,int nBase);\n";
+
+std::string lcl_Getcoupdays=
+"int lcl_Getcoupdays(int nNullDate,int nSettle, int nMat,int nFreq,int nBase)\n"
+"{\n"
+    "int aDate = nMat;\n"
+    "int rDay=0,rMonth=0, rYear=0;int mDay=0,mMonth=0, mYear=0;int sDay=0,"
+    "sMonth=0, sYear=0;\n"
+    "int rbLastDayMode=0, rbLastDay=0,rb30Days=0,rbUSMode=0,rnDay=0;\n"
+    "int sbLastDayMode=0, sbLastDay=0,sb30Days=0,sbUSMode=0,snDay=0;\n"
+    "ScaDate( nNullDate,aDate,nBase,&rDay,&rMonth,&rYear,"
+    "&rbLastDayMode,&rbLastDay,&rb30Days,&rbUSMode,&rnDay);\n"
+    "ScaDate( nNullDate,nSettle,nBase,&sDay,&sMonth,&sYear,"
+    "&sbLastDayMode,&sbLastDay,&sb30Days,&sbUSMode,&snDay);\n"
+    "rYear= sYear;\n"
+    "nSettle=nSettle+nNullDate;\n"
+    "aDate=DateToDays( rDay,rMonth,rYear );\n"
+    "if( aDate < nSettle )\n"
+    "{  \n"
+        "rYear+= 1;\n"
+        "aDate=DateToDays( rDay,rMonth,rYear );\n"
+    "}\n"
+    "while(aDate > nSettle )\n"
+    "{\n"
+        "addMonths(rb30Days,rbLastDay,&rnDay,rDay,&rMonth,-1*(12/nFreq),&rYear);\n"
+        "aDate=DateToDays( rDay,rMonth,rYear );\n"
+    "}\n"
+    "int aNextDate=aDate;int aDay=rDay,aMonth=rMonth, aYear=rYear;\n"
+    "int abLastDayMode=rbLastDayMode, abLastDay=rbLastDay,"
+    "ab30Days=rb30Days,abUSMode=rbUSMode,anDay=rnDay;\n"
+    "addMonths(ab30Days,abLastDay,&anDay,aDay,&aMonth,12/nFreq,&aYear);\n"
+    "return getDiff( aDate, aNextDate, rDay, rMonth, rYear, rbLastDayMode,"
+    "rbLastDay, rb30Days, rbUSMode, rnDay,\n"
+        "aDay, aMonth, aYear, abLastDayMode, abLastDay, ab30Days, abUSMode, anDay);\n"
+"}\n";
+
+
+std::string lcl_GetcoupnumDecl=
+"int lcl_Getcoupnum(int nNullDate,int nSettle, int nMat,int nFreq);\n";
+
+std::string lcl_Getcoupnum=
+"int lcl_Getcoupnum(int nNullDate,int nSettle, int nMat,int nFreq)\n"
+"{\n"
+    "int aDate = nMat;int rDay=0,rMonth=0, rYear=0;int mDay=0,mMonth=0, mYear=0;\n"
+    "int sDay=0,sMonth=0, sYear=0;\n"
+    "DaysToDate(aDate+nNullDate,&rDay, &rMonth, &rYear );\n"
+    "DaysToDate(nMat+nNullDate,&mDay, &mMonth, &mYear );\n"
+    "DaysToDate(nSettle+nNullDate,&sDay, &sMonth, &sYear );\n"
+    "rYear= sYear;\n"
+    "nSettle=nSettle+nNullDate;\n"
+    "aDate=DateToDays( rDay,rMonth,rYear );\n"
+    "if( aDate < nSettle )\n"
+        "rYear+= 1;\n"
+    "int d=DateToDays( rDay,rMonth,rYear );\n"
+    "int nMonthCount=-1*(12 / nFreq);\n"
+    "while(d > nSettle )\n"
+    "{\n"
+        "int nNewMonth = nMonthCount + rMonth;\n"
+        "if( nNewMonth > 12 )\n"
+        "{\n"
+            "--nNewMonth;\n"
+            "rYear+=nNewMonth / 12;\n"
+            "rMonth = nNewMonth % 12 + 1;\n"
+        "}\n"
+        "else if( nNewMonth < 1 )\n"
+        "{\n"
+            "rYear+= nNewMonth / 12 - 1;\n"
+            "rMonth = nNewMonth % 12 + 12;\n"
+        "}\n"
+        "else\n"
+            "rMonth =  nNewMonth;\n"
+        "d=DateToDays( rDay,rMonth,rYear );\n"
+    "}\n"
+    "int n=(mYear-rYear)*12+mMonth-rMonth;\n"
+    "n=n*nFreq/12;\n"
+    "return n;\n"
+"}\n";
+
+std::string coupdaysDecl=
+"double coupdays(int nSettle,int nMat,int nFreq,int nBase);\n";
+
+
+std::string coupdays=
+"double coupdays(int nSettle,int nMat,int nFreq,int nBase)\n"
+"{\n"
+    "int nNullDate=GetNullDate();\n"
+    "if( nBase == 1 )\n"
+        "return lcl_Getcoupdays(nNullDate, nSettle, nMat,nFreq, nBase);\n"
+    "else\n"
+        "return (double)GetDaysInYear(0,0,nBase)/nFreq;\n"
+"}\n";
+
+std::string coupdaybsDecl=
+"double coupdaybs( int nSettle,int nMat,int nFreq,int nBase);\n";
+
+std::string coupdaybs=
+"double coupdaybs( int nSettle,int nMat,int nFreq,int nBase)\n"
+"{\n"
+    "int nNullDate=GetNullDate();\n"
+    "return lcl_Getcoupdaybs(nNullDate, nSettle, nMat,nFreq, nBase);\n"
+"}\n";
+
+std::string coupdaysncDecl=
+"double coupdaysnc( int nSettle,int nMat,int nFreq,int nBase);\n";
+
+
+std::string coupdaysnc=
+"double coupdaysnc( int nSettle,int nMat,int nFreq,int nBase)\n"
+"{\n"
+"int nNullDate=GetNullDate();\n"
+"if((nBase != 0) && (nBase != 4))\n"
+"{\n"
+        "int aDate = nMat;\n"
+        "int rDay=0,rMonth=0, rYear=0;int mDay=0,mMonth=0,"
+        "mYear=0;int sDay=0,sMonth=0, sYear=0;\n"
+        "int rbLastDayMode=0, rbLastDay=0,rb30Days=0,rbUSMode=0,rnDay=0;\n"
+        "int sbLastDayMode=0, sbLastDay=0,sb30Days=0,sbUSMode=0,snDay=0;\n"
+        "ScaDate( nNullDate,aDate,nBase,&rDay,&rMonth,&rYear,"
+        "&rbLastDayMode,&rbLastDay,&rb30Days,&rbUSMode,&rnDay);\n"
+        "ScaDate( nNullDate,nSettle,nBase,&sDay,&sMonth,&sYear,"
+        "&sbLastDayMode,&sbLastDay,&sb30Days,&sbUSMode,&snDay);\n"
+        "rYear= sYear;\n"
+        "nSettle=nSettle+nNullDate;\n"
+        "aDate=DateToDays( rDay,rMonth,rYear );\n"
+        "if( aDate > nSettle )\n"
+        "{\n"
+        "rYear-= 1;\n"
+        "aDate=DateToDays( rDay,rMonth,rYear );\n"
+"}\n"
+"while(aDate <= nSettle )\n"
+"{\n"
+    "addMonths(rb30Days,rbLastDay,&rnDay,rDay,&rMonth,12/nFreq,&rYear);\n"
+    "aDate=DateToDays( rDay,rMonth,rYear );\n"
+"}\n"
+"return getDiff( nSettle, aDate, sDay, sMonth, sYear, "
+"sbLastDayMode, sbLastDay, sb30Days, sbUSMode, snDay,\n"
+    "rDay, rMonth, rYear, rbLastDayMode, rbLastDay, rb30Days, rbUSMode, rnDay);\n"
+"}\n"
+"else\n"
+    "return coupdays(nSettle,nMat,nFreq,nBase)- coupdaybs( nSettle,nMat,nFreq,nBase);\n"
+"}\n";
+
+std::string coupnumDecl=
+"double coupnum( int nSettle,int nMat,int nFreq,int nBase);\n";
+
+std::string coupnum=
+"double coupnum( int nSettle,int nMat,int nFreq,int nBase)\n"
+"{\n"
+    "int nNullDate=GetNullDate();\n"
+    "return lcl_Getcoupnum(nNullDate,nSettle,nMat,nFreq);\n"
+"}\n";
+
+std::string getPrice_Decl=
+"double getPrice_(int nSettle, int nMat, double fRate, double fYield,\n"
+    "double fRedemp, int nFreq, int nBase );\n";
+
+
+std::string getPrice_=
+"double getPrice_(int nSettle, int nMat, double fRate, double fYield,\n"
+    "double fRedemp, int nFreq, int nBase )\n"
+"{\n"
+    "double      fFreq = nFreq;\n"
+    "double      fE = coupdays( nSettle, nMat, nFreq, nBase );\n"
+    "double      fDSC_E = coupdaysnc(  nSettle, nMat, nFreq, nBase ) / fE;\n"
+    "double      fN = coupnum( nSettle, nMat, nFreq, nBase );\n"
+    "double      fA = coupdaybs( nSettle, nMat, nFreq, nBase );\n"
+    "double      fRet = fRedemp / ( pow( 1.0 + fYield / fFreq, fN - 1.0 + fDSC_E ) );\n"
+    "fRet -= 100.0 * fRate / fFreq * fA / fE;\n"
+    "double      fT1 = 100.0 * fRate / fFreq;\n"
+    "double      fT2 = 1.0 + fYield / fFreq;\n"
+    "for( double fK = 0.0 ; fK < fN ; fK+=1.0 )\n"
+      "fRet += fT1 / pow( fT2, fK + fDSC_E );\n"
+"return fRet;\n"
+"}\n";
+
+std::string getYield_Decl=
+"double getYield_( int nNullDate, int nSettle, int nMat, double fCoup,"
+"double fPrice,double fRedemp, int nFreq, int nBase);\n";
+
+std::string getYield_=
+"double getYield_( int nNullDate, int nSettle, int nMat, double fCoup,"
+"double fPrice,double fRedemp, int nFreq, int nBase )\n"
+"{\n"
+    "double      fRate = fCoup;\n"
+    "double      fPriceN = 0.0;\n"
+    "double      fYield1 = 0.0;\n"
+    "double      fYield2 = 1.0;\n"
+    "double      fPrice1 = getPrice_(nSettle, nMat, fRate, fYield1, fRedemp, nFreq, nBase );\n"
+    "double      fPrice2 = getPrice_(nSettle, nMat, fRate, fYield2, fRedemp, nFreq, nBase );\n"
+    "double      fYieldN = ( fYield2 - fYield1 ) * 0.5;\n"
+    "for( unsigned int nIter = 0 ; nIter < 100 && fPriceN != fPrice ; nIter++ )\n"
+    "{\n"
+        "fPriceN = getPrice_(nSettle, nMat, fRate, fYieldN, fRedemp, nFreq, nBase );\n"
+        "if( fPrice == fPrice1 )\n"
+            "return fYield1;\n"
+        "else if( fPrice == fPrice2 )\n"
+            "return fYield2;\n"
+        "else if( fPrice == fPriceN )\n"
+            "return fYieldN;\n"
+        "else if( fPrice < fPrice2 )\n"
+        "{\n"
+            "fYield2 *= 2.0;\n"
+            "fPrice2 = getPrice_(nSettle, nMat, fRate, fYield2, fRedemp, nFreq, nBase );\n"
+            "fYieldN = ( fYield2 - fYield1 ) * 0.5;\n"
+        "}\n"
+        "else\n"
+        "{\n"
+            "if( fPrice < fPriceN )\n"
+            "{\n"
+                "fYield1 = fYieldN;\n"
+                "fPrice1 = fPriceN;\n"
+            "}\n"
+            "else\n"
+            "{\n"
+                "fYield2 = fYieldN;\n"
+                "fPrice2 = fPriceN;\n"
+            "}\n"
+            "fYieldN = fYield2 - ( fYield2 - fYield1 ) * "
+            "( ( fPrice - fPrice2 ) / ( fPrice1 - fPrice2 ) );\n"
+        "}\n"
+    "}\n"
+    "return fYieldN;\n"
+"}\n";
+
+std::string GetYearFracDecl=
+"double GetYearFrac( int nNullDate, int nStartDate, int nEndDate, int nMode );\n";
+
+std::string GetYearFrac=
+"double GetYearFrac( int nNullDate, int nStartDate, int nEndDate, int nMode ) \n"
+"{\n"
+"    if( nStartDate == nEndDate )\n"
+"        return 0.0;     \n"
+
+ "   if( nStartDate > nEndDate )\n"
+ "   {\n"
+ "       int   n = nEndDate;\n"
+ "       nEndDate = nStartDate;\n"
+ "       nStartDate = n;\n"
+ "   }\n"
+
+  "  int nDate1 = nStartDate + nNullDate;\n"
+  "  int nDate2 = nEndDate + nNullDate;\n"
+
+  "  int  nDay1, nDay2;\n"
+  "  int  nMonth1, nMonth2;\n"
+  "  int  nYear1, nYear2;\n"
+  "  DaysToDate( nDate1, &nDay1, &nMonth1, &nYear1 );\n"
+  "  DaysToDate( nDate2, &nDay2, &nMonth2, &nYear2 );\n"
+  "  int nDayDiff;\n"
+  "  switch( nMode )\n"
+  "  {\n"
+  "      case 0:         \n"
+  "          if ( nDay1 == 31 )\n"
+  "          {\n"
+  "              nDay1--;\n"
+  "          }\n"
+  "          if ( nDay1 == 30 && nDay2 == 31 )\n"
+  "          {\n"
+  "              nDay2--;\n"
+  "          }\n"
+  "          else\n"
+  "          {\n"
+  "              if ( nMonth1 == 2 && nDay1 == ( IsLeapYear( nYear1 ) ? 29 : 28 ) )\n"
+  "              {\n"
+  "                  nDay1 = 30;\n"
+  "                  if ( nMonth2 == 2 && nDay2 == ( IsLeapYear( nYear2 ) ? 29 : 28 ) )\n"
+  "                  {\n"
+  "                      nDay2 = 30;\n"
+  "                  }\n"
+  "              }\n"
+  "          }\n"
+  "          nDayDiff = ( nYear2 - nYear1 ) * 360 + "
+  "( nMonth2 - nMonth1 ) * 30 + ( nDay2 - nDay1 );\n"
+  "          break;\n"
+  "      case 1:         \n"
+  "      case 2:        \n"
+  "      case 3:         \n"
+  "         nDayDiff = nDate2 - nDate1;\n"
+  "          break;\n"
+  "      case 4:         \n"
+  "          if ( nDay1 == 31 )\n"
+  "          {\n"
+  "              nDay1--;\n"
+  "          }\n"
+  "          if ( nDay2 == 31 )\n"
+  "          {\n"
+  "              nDay2--;\n"
+  "          }\n"
+  "          nDayDiff = ( nYear2 - nYear1 ) * 360 + "
+  "( nMonth2 - nMonth1 ) * 30 + ( nDay2 - nDay1 );\n"
+  "          break;\n"
+  "  }\n"
+
+  "  double nDaysInYear;\n"
+  "  switch( nMode )\n"
+  "  {\n"
+  "      case 0:         \n"
+  "      case 2:         \n"
+  "      case 4:         \n"
+  "          nDaysInYear = 360;\n"
+  "          break;\n"
+  "      case 1:         \n"
+  "          {\n"
+  "              bool isYearDifferent = ( nYear1 != nYear2 );\n"
+  "              if ( isYearDifferent &&\n"
+  "                   ( ( nYear2 != nYear1 + 1 ) ||\n"
+  "                     ( nMonth1 < nMonth2 ) ||\n"
+  "                     ( nMonth1 == nMonth2 && nDay1 < nDay2 ) ) )\n"
+  "              {\n"
+  "                  int nDayCount = 0;\n"
+   "                 for ( int i = nYear1; i <= nYear2; i++ )\n"
+  "                      nDayCount += ( IsLeapYear( i ) ? 366 : 365 );\n"
+  "                  nDaysInYear = ( double ) nDayCount / ( double ) ( nYear2 - nYear1 + 1 );\n"
+  "              }\n"
+   "             else\n"
+  "              {\n"
+  "                  if ( isYearDifferent && IsLeapYear( nYear1 ) )\n"
+  "                  {\n"
+  "                      nDaysInYear = 366;\n"
+  "                  }\n"
+ "                   else\n"
+  "                  {\n"
+  "                      if ( ( IsLeapYear( nYear1 ) && nMonth1 <= 2 && nDay1 <= 29 ) ||\n"
+  "                           ( IsLeapYear( nYear2 ) && ( nMonth2 > 3 || "
+  "( nMonth2 == 2 && nDay1 == 29 ) ) ) )\n"
+   "                     {\n"
+   "                         nDaysInYear = 366;\n"
+   "                     }\n"
+  "                      else\n"
+  "                      {\n"
+  "                          nDaysInYear = 365;\n"
+ "                           for ( int i = nYear1; i <= nYear2; i++ )\n"
+  "                          {\n"
+   "                             if ( IsLeapYear( i ) )\n"
+  "                              {\n"
+  "                                  nDaysInYear = 366;\n"
+   "                                 break;\n"
+   "                             }\n"
+  "                          }\n"
+   "                     }\n"
+   "                 }\n"
+   "             }\n"
+   "         }\n"
+  "          break;\n"
+  "      case 3:         \n"
+  "          nDaysInYear = 365;\n"
+ "           break;\n"
+  "  }\n"
+  "  return (double)( nDayDiff ) / (nDaysInYear);\n"
+"}\n";
+
+
+std::string GetYieldmatDecl=
+    "double GetYieldmat( int nNullDate, int nSettle, int nMat, int nIssue,\n"
+        "double fRate, double fPrice, int nBase );\n";
+
+
+std::string GetYieldmat=
+    "double GetYieldmat( int nNullDate, int nSettle, int nMat, int nIssue,\n"
+        "double fRate, double fPrice, int nBase )\n"
+    "{\n"
+        "double      fIssMat = GetYearFrac( nNullDate, nIssue, nMat, nBase );\n"
+        "double      fIssSet = GetYearFrac( nNullDate, nIssue, nSettle, nBase );\n"
+        "double      fSetMat = GetYearFrac( nNullDate, nSettle, nMat, nBase );\n"
+        "double      y = 1.0 + fIssMat * fRate;\n"
+        "y /= fPrice / 100.0 + fIssSet * fRate;\n"
+        "y-=1.0;\n"
+        "y /= fSetMat;\n"
+        "return y;\n"
+    "}\n";
+
+std::string GetDiffDateDecl=
+"int GetDiffDate( int nNullDate, int nStartDate, int nEndDate, int nMode,"
+"    int* pOptDaysIn1stYear );\n";
+
+std::string GetDiffDate=
+"int GetDiffDate( int nNullDate, int nStartDate, int nEndDate, int nMode,"
+"    int* pOptDaysIn1stYear )\n"
+"{\n"
+"\t   bool    bNeg = nStartDate > nEndDate;\n"
+
+"\t    if( bNeg )\n"
+"\t    {\n"
+"\t\t        int   n = nEndDate;\n"
+"\t\t        nEndDate = nStartDate;\n"
+"\t\t        nStartDate = n;\n"
+"\t    }\n"
+"\t    int       nRet;\n"
+"\t    switch( nMode )\n"
+"\t    {\n"
+"\t\t       case 0:   \n"
+"\t\t       case 4:   \n"
+"\t\t            {\n"
+"\t\t\t            int      nD1, nM1, nY1, nD2, nM2, nY2;\n"
+"\t\t\t            nStartDate += nNullDate;\n"
+"\t\t\t            nEndDate += nNullDate;\n"
+"\t\t\t            DaysToDate( nStartDate, &nD1, &nM1, &nY1 );\n"
+"\t\t\t            DaysToDate( nEndDate, &nD2, &nM2, &nY2 );\n"
+"\t\t\t            bool        bLeap = IsLeapYear( nY1 );\n"
+"\t\t\t            int       nDays, nMonths;\n"
+"\t\t\t            nMonths = nM2 - nM1;\n"
+"\t\t\t            nDays = nD2 - nD1;\n"
+"\t\t\t            nMonths += ( nY2 - nY1 ) * 12;\n"
+"\t\t\t            nRet = nMonths * 30 + nDays;\n"
+"\t\t\t            if( nMode == 0 && nM1 == 2 && nM2 != 2 && nY1 == nY2 )\n"
+"\t\t\t\t                nRet -= bLeap? 1 : 2;\n"
+"\t\t\t            if( pOptDaysIn1stYear )\n"
+"\t\t\t\t                *pOptDaysIn1stYear = 360;\n"
+"\t\t            }\n"
+"\t\t\t           break;\n"
+"\t\t        case 1:    \n"
+"\t\t\t           if( pOptDaysIn1stYear )\n"
+"\t\t\t            {\n"
+"\t\t\t\t                int      nD, nM, nY;\n"
+"\t\t\t\t                DaysToDate( nStartDate + nNullDate, &nD, &nM, &nY );\n"
+"\t\t\t\t                *pOptDaysIn1stYear = IsLeapYear( nY )? 366 : 365;\n"
+"\t\t\t           }\n"
+"\t\t\t            nRet = nEndDate - nStartDate;\n"
+"\t\t\t            break;\n"
+"\t\t        case 2:      \n"
+"\t\t\t            nRet = nEndDate - nStartDate;\n"
+"\t\t\t            if( pOptDaysIn1stYear )\n"
+"\t\t\t\t                *pOptDaysIn1stYear = 360;\n"
+"\t\t\t            break;\n"
+"\t\t        case 3:        \n"
+"\t\t\t            nRet = nEndDate - nStartDate;\n"
+"\t\t\t            if( pOptDaysIn1stYear )\n"
+"\t\t\t\t                *pOptDaysIn1stYear = 365;\n"
+"\t\t\t            break;\n"
+"\t    }\n"
+"\t    return bNeg? -nRet : nRet;\n"
+"}\n";
+
+std::string GetYearDiffDecl=
+"double GetYearDiff( int nNullDate, int nStartDate, int nEndDate, int nMode);\n";
+
+std::string GetYearDiff=
+"double GetYearDiff( int nNullDate, int nStartDate, int nEndDate, int nMode )\n"
+"{\n"
+"\t    int   nDays1stYear;\n"
+"\t    int   nTotalDays = GetDiffDate( nNullDate, nStartDate,"
+"nEndDate, nMode, &nDays1stYear );\n"
+"\t    double result=(double)(nTotalDays)/(nDays1stYear);\n"
+"\treturn result;\n"
+"}\n";
+
+std::string GetDiffDate360_Decl=
+"int GetDiffDate360_(\n"
+"                int nDay1, int nMonth1, int nYear1, bool bLeapYear1,\n"
+"                int nDay2, int nMonth2, int nYear2,\n"
+"                bool bUSAMethod );\n";
+
+std::string GetDiffDate360_=
+"int GetDiffDate360_(\n"
+"                int nDay1, int nMonth1, int nYear1, bool bLeapYear1,\n"
+"                int nDay2, int nMonth2, int nYear2,\n"
+"                bool bUSAMethod )\n"
+"{\n"
+"    if( nDay1 == 31 )\n"
+"        nDay1--;\n"
+"    else if( bUSAMethod && ( nMonth1 == 2 && ( nDay1 == 29 ||"
+"( nDay1 == 28 && !bLeapYear1 ) ) ) )\n"
+"            nDay1 = 30;\n"
+"    if( nDay2 == 31 )\n"
+"    {\n"
+"        if( bUSAMethod && nDay1 != 30 )\n"
+"        {\n"
+"            nDay2 = 1;\n"
+"            if( nMonth2 == 12 )\n"
+"            {\n"
+"                nYear2++;\n"
+"                nMonth2 = 1;\n"
+"            }\n"
+"            else\n"
+"                nMonth2++;\n"
+"        }\n"
+"        else\n"
+"            nDay2 = 30;\n"
+"    }\n"
+"    return nDay2 + nMonth2 * 30 + nYear2 * 360 - nDay1 - nMonth1 * 30 - nYear1 * 360;\n"
+"}\n";
+
+std::string GetDiffDate360Decl=
+"int GetDiffDate360( int nNullDate, int nDate1, int nDate2, bool bUSAMethod);\n";
+
+
+std::string GetDiffDate360=
+"int GetDiffDate360( int nNullDate, int nDate1, int nDate2, bool bUSAMethod )\n"
+"{\n"
+"    nDate1 += nNullDate;\n"
+"    nDate2 += nNullDate;\n"
+"    int nDay1, nMonth1, nYear1, nDay2, nMonth2, nYear2;\n"
+"    DaysToDate( nDate1, &nDay1, &nMonth1, &nYear1 );\n"
+"    DaysToDate( nDate2, &nDay2, &nMonth2, &nYear2 );\n"
+"    return GetDiffDate360_( nDay1, nMonth1, nYear1, "
+"IsLeapYear( nYear1 ), nDay2, nMonth2, nYear2, bUSAMethod );\n"
+"}\n";
+
 #endif
 
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */


More information about the Libreoffice-commits mailing list