[Libreoffice-commits] core.git: Branch 'aoo/trunk' - 2 commits - sccomp/source
Pedro Giffuni
pfg at apache.org
Tue Sep 29 09:09:57 PDT 2015
sccomp/source/solver/solver.cxx | 19 ++++++++++++++++++-
sccomp/source/solver/solver.hrc | 11 ++++++-----
sccomp/source/solver/solver.hxx | 1 +
sccomp/source/solver/solver.src | 7 +++++--
4 files changed, 30 insertions(+), 8 deletions(-)
New commits:
commit 389cc5a97f0d3fbf88fa15b92e849d821131ba6c
Author: Pedro Giffuni <pfg at apache.org>
Date: Tue Sep 29 15:45:47 2015 +0000
Minor formatting fix
diff --git a/sccomp/source/solver/solver.hxx b/sccomp/source/solver/solver.hxx
index 5e161f2..7f69f0b 100644
--- a/sccomp/source/solver/solver.hxx
+++ b/sccomp/source/solver/solver.hxx
@@ -56,8 +56,7 @@ class SolverComponent : public comphelper::OMutexAndBroadcastHelper,
sal_Int32 mnTimeout;
sal_Int32 mnEpsilonLevel;
sal_Bool mbLimitBBDepth;
- sal_Bool
- mbNonLinearTest;
+ sal_Bool mbNonLinearTest;
// results
sal_Bool mbSuccess;
double mfResultValue;
commit 899f3a1c6c24f71efabfbcaa0238308037cf830b
Author: Pedro Giffuni <pfg at apache.org>
Date: Tue Sep 29 15:04:00 2015 +0000
i124091 - Reinstate the check for nonlinearity but turn it into an option.
We only really support a linear solver at this time so the test for
non-linearity was actually useful. Make it optional (ON by default)
so that we can now override the check and provide a solution.
diff --git a/sccomp/source/solver/solver.cxx b/sccomp/source/solver/solver.cxx
index ca4ce39..496edcd 100644
--- a/sccomp/source/solver/solver.cxx
+++ b/sccomp/source/solver/solver.cxx
@@ -58,6 +58,7 @@ using ::rtl::OUString;
#define STR_TIMEOUT "Timeout"
#define STR_EPSILONLEVEL "EpsilonLevel"
#define STR_LIMITBBDEPTH "LimitBBDepth"
+#define STR_NONLINEARTEST "NonLinearTest"
// -----------------------------------------------------------------------
// Resources from tools are used for translated strings
@@ -82,7 +83,8 @@ namespace
PROP_INTEGER,
PROP_TIMEOUT,
PROP_EPSILONLEVEL,
- PROP_LIMITBBDEPTH
+ PROP_LIMITBBDEPTH,
+ PROP_NONLINEARTEST
};
}
@@ -146,6 +148,7 @@ SolverComponent::SolverComponent( const uno::Reference<uno::XComponentContext>&
mnTimeout( 120 ),
mnEpsilonLevel( 0 ),
mbLimitBBDepth( sal_True ),
+ mbNonLinearTest( sal_True ),
mbSuccess( sal_False ),
mfResultValue( 0.0 )
{
@@ -155,6 +158,7 @@ SolverComponent::SolverComponent( const uno::Reference<uno::XComponentContext>&
registerProperty( C2U(STR_TIMEOUT), PROP_TIMEOUT, 0, &mnTimeout, getCppuType( &mnTimeout ) );
registerProperty( C2U(STR_EPSILONLEVEL), PROP_EPSILONLEVEL, 0, &mnEpsilonLevel, getCppuType( &mnEpsilonLevel ) );
registerProperty( C2U(STR_LIMITBBDEPTH), PROP_LIMITBBDEPTH, 0, &mbLimitBBDepth, getCppuType( &mbLimitBBDepth ) );
+ registerProperty( C2U(STR_NONLINEARTEST), PROP_NONLINEARTEST, 0, &mbNonLinearTest, getCppuType( &mbNonLinearTest ) );
}
SolverComponent::~SolverComponent()
@@ -214,6 +218,9 @@ OUString SAL_CALL SolverComponent::getPropertyDescription( const OUString& rProp
case PROP_LIMITBBDEPTH:
nResId = RID_PROPERTY_LIMITBBDEPTH;
break;
+ case PROP_NONLINEARTEST:
+ nResId = RID_PROPERTY_NONLINEARTEST;
+ break;
default:
{
// unknown - leave empty
@@ -369,6 +376,16 @@ void SAL_CALL SolverComponent::solve() throw(uno::RuntimeException)
double fInitial = aCellsIter->second.front();
double fCoeff = aCellsIter->second.back(); // last appended: coefficient for this variable
double fTwo = lcl_GetValue( mxDoc, aCellsIter->first );
+
+ if ( mbNonLinearTest )
+ {
+ bool bLinear ( sal_True );
+ bLinear = rtl::math::approxEqual( fTwo, fInitial + 2.0 * fCoeff ) ||
+ rtl::math::approxEqual( fInitial, fTwo - 2.0 * fCoeff );
+ // second comparison is needed in case fTwo is zero
+ if ( !bLinear )
+ maStatus = lcl_GetResourceString( RID_ERROR_NONLINEAR );
+ }
}
lcl_SetValue( mxDoc, *aVarIter, 0.0 ); // set back to zero for examining next variable
diff --git a/sccomp/source/solver/solver.hrc b/sccomp/source/solver/solver.hrc
index 9b75f45..0405651 100644
--- a/sccomp/source/solver/solver.hrc
+++ b/sccomp/source/solver/solver.hrc
@@ -31,11 +31,12 @@
#define RID_PROPERTY_TIMEOUT (SOLVER_RESOURCE_START + 3)
#define RID_PROPERTY_EPSILONLEVEL (SOLVER_RESOURCE_START + 4)
#define RID_PROPERTY_LIMITBBDEPTH (SOLVER_RESOURCE_START + 5)
-#define RID_ERROR_NONLINEAR (SOLVER_RESOURCE_START + 6)
-#define RID_ERROR_EPSILONLEVEL (SOLVER_RESOURCE_START + 7)
-#define RID_ERROR_INFEASIBLE (SOLVER_RESOURCE_START + 8)
-#define RID_ERROR_UNBOUNDED (SOLVER_RESOURCE_START + 9)
-#define RID_ERROR_TIMEOUT (SOLVER_RESOURCE_START + 10)
+#define RID_PROPERTY_NONLINEARTEST (SOLVER_RESOURCE_START + 6)
+#define RID_ERROR_NONLINEAR (SOLVER_RESOURCE_START + 7)
+#define RID_ERROR_EPSILONLEVEL (SOLVER_RESOURCE_START + 8)
+#define RID_ERROR_INFEASIBLE (SOLVER_RESOURCE_START + 9)
+#define RID_ERROR_UNBOUNDED (SOLVER_RESOURCE_START + 10)
+#define RID_ERROR_TIMEOUT (SOLVER_RESOURCE_START + 11)
#endif
diff --git a/sccomp/source/solver/solver.hxx b/sccomp/source/solver/solver.hxx
index 0a07ffe..5e161f2 100644
--- a/sccomp/source/solver/solver.hxx
+++ b/sccomp/source/solver/solver.hxx
@@ -56,6 +56,8 @@ class SolverComponent : public comphelper::OMutexAndBroadcastHelper,
sal_Int32 mnTimeout;
sal_Int32 mnEpsilonLevel;
sal_Bool mbLimitBBDepth;
+ sal_Bool
+ mbNonLinearTest;
// results
sal_Bool mbSuccess;
double mfResultValue;
diff --git a/sccomp/source/solver/solver.src b/sccomp/source/solver/solver.src
index b50b5f5..3ecb37a 100644
--- a/sccomp/source/solver/solver.src
+++ b/sccomp/source/solver/solver.src
@@ -48,10 +48,13 @@ String RID_PROPERTY_LIMITBBDEPTH
{
Text [ en-US ] = "Limit branch-and-bound depth";
};
-
+String RID_PROPERTY_NONLINEARTEST
+{
+ Text [ en-US ] = "Run strict linearity checks";
+};
String RID_ERROR_NONLINEAR
{
- Text [ en-US ] = "The model is not linear.";
+ Text [ en-US ] = "The model seems nonlinear (see options).";
};
String RID_ERROR_EPSILONLEVEL
{
More information about the Libreoffice-commits
mailing list