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()));
   }