You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@xalan.apache.org by db...@locus.apache.org on 2000/05/05 17:09:47 UTC
cvs commit: xml-xalan/c/src/XPath XPath.cpp
dbertoni 00/05/05 08:09:47
Modified: c/src/XPath XPath.cpp
Log:
Integrated new DoubleSupport functionality.
Revision Changes Path
1.16 +6 -40 xml-xalan/c/src/XPath/XPath.cpp
Index: XPath.cpp
===================================================================
RCS file: /home/cvs/xml-xalan/c/src/XPath/XPath.cpp,v
retrieving revision 1.15
retrieving revision 1.16
diff -u -r1.15 -r1.16
--- XPath.cpp 2000/05/03 21:21:16 1.15
+++ XPath.cpp 2000/05/05 15:09:46 1.16
@@ -876,7 +876,7 @@
XObject* const expr2 = executeMore(context, expr2Pos, executionContext);
assert(expr2 != 0);
- return executionContext.getXObjectFactory().createNumber(expr1->num() + expr2->num());
+ return executionContext.getXObjectFactory().createNumber(DoubleSupport::add(expr1->num(), expr2->num()));
}
@@ -897,7 +897,7 @@
XObject* const expr2 = executeMore(context, expr2Pos, executionContext);
assert(expr2 != 0);
- return executionContext.getXObjectFactory().createNumber(expr1->num() - expr2->num());
+ return executionContext.getXObjectFactory().createNumber(DoubleSupport::subtract(expr1->num(), expr2->num()));
}
@@ -918,7 +918,7 @@
XObject* const expr2 = executeMore(context, expr2Pos, executionContext);
assert(expr2 != 0);
- return executionContext.getXObjectFactory().createNumber(expr1->num() * expr2->num());
+ return executionContext.getXObjectFactory().createNumber(DoubleSupport::multiply(expr1->num(), expr2->num()));
}
@@ -939,40 +939,7 @@
XObject* const expr2 = executeMore(context, expr2Pos, executionContext);
assert(expr2 != 0);
- const double expr1Value = expr1->num();
-
- const double expr2Value = expr2->num();
-
- double theResult = 0.0;
-
- if (expr2Value != 0)
- {
- // The simple case...
- theResult = expr1Value / expr2Value;
- }
- else
- {
- // Special cases, since we don't want to actually do the division...
- if (expr1Value == 0)
- {
- // This is NaN...
- theResult = DoubleSupport::getNaN();
- }
- else if (expr1Value > 0.0)
- {
- // This is positive infinity...
- theResult = DoubleSupport::getPositiveInfinity();
- }
- else
- {
- assert(expr1Value < 0.0);
-
- // This is positive infinity...
- theResult = DoubleSupport::getNegativeInfinity();
- }
- }
-
- return executionContext.getXObjectFactory().createNumber(theResult);
+ return executionContext.getXObjectFactory().createNumber(DoubleSupport::divide(expr1->num(), expr2->num()));
}
@@ -993,8 +960,7 @@
XObject* const expr2 = executeMore(context, expr2Pos, executionContext);
assert(expr2 != 0);
- return executionContext.getXObjectFactory().createNumber(static_cast<int>(expr1->num()) %
- static_cast<int>(expr2->num()));
+ return executionContext.getXObjectFactory().createNumber(DoubleSupport::modulus(expr1->num(), expr2->num()));
}
@@ -1022,7 +988,7 @@
XObject* const expr1 = executeMore(context, opPos + 2, executionContext);
assert(expr1 != 0);
- return executionContext.getXObjectFactory().createNumber(-expr1->num());
+ return executionContext.getXObjectFactory().createNumber(DoubleSupport::negative(expr1->num()));
}