You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@xerces.apache.org by sa...@apache.org on 2003/12/11 16:03:08 UTC
cvs commit: xml-xerces/java/src/org/apache/xerces/impl/dv/xs DurationDV.java
sandygao 2003/12/11 07:03:08
Modified: java/src/org/apache/xerces/impl/dv/xs DurationDV.java
Log:
Fixing a potential threading problem in schema duration data type.
Revision Changes Path
1.7 +20 -22 xml-xerces/java/src/org/apache/xerces/impl/dv/xs/DurationDV.java
Index: DurationDV.java
===================================================================
RCS file: /home/cvs/xml-xerces/java/src/org/apache/xerces/impl/dv/xs/DurationDV.java,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -r1.6 -r1.7
--- DurationDV.java 18 Nov 2002 23:10:10 -0000 1.6
+++ DurationDV.java 11 Dec 2003 15:03:08 -0000 1.7
@@ -81,8 +81,6 @@
{1903, 3, 1, 0, 0, 0, 0, 'Z'},
{1903, 7, 1, 0, 0, 0, 0, 'Z'}};
- private int[][] fDuration = null;
-
public Object getActualValue(String content, ValidationContext context) throws InvalidDatatypeValueException{
try{
return new DateTimeData(parse(content), this);
@@ -234,35 +232,35 @@
if ( resultA == 0 ) {
return 0;
}
- if ( fDuration == null ) {
- fDuration = new int[2][TOTAL_SIZE];
- }
+
+ int[][] fDuration = new int[2][TOTAL_SIZE];
+
//long comparison algorithm is required
- int[] tempA = addDuration (date1, 0, fDuration[0]);
- int[] tempB = addDuration (date2, 0, fDuration[1]);
+ int[] tempA = addDuration (date1, DATETIMES[0], fDuration[0]);
+ int[] tempB = addDuration (date2, DATETIMES[0], fDuration[1]);
resultA = compareOrder(tempA, tempB);
if ( resultA == INDETERMINATE ) {
return INDETERMINATE;
}
- tempA = addDuration(date1, 1, fDuration[0]);
- tempB = addDuration(date2, 1, fDuration[1]);
+ tempA = addDuration(date1, DATETIMES[1], fDuration[0]);
+ tempB = addDuration(date2, DATETIMES[1], fDuration[1]);
resultB = compareOrder(tempA, tempB);
resultA = compareResults(resultA, resultB, strict);
if (resultA == INDETERMINATE) {
return INDETERMINATE;
}
- tempA = addDuration(date1, 2, fDuration[0]);
- tempB = addDuration(date2, 2, fDuration[1]);
+ tempA = addDuration(date1, DATETIMES[2], fDuration[0]);
+ tempB = addDuration(date2, DATETIMES[2], fDuration[1]);
resultB = compareOrder(tempA, tempB);
resultA = compareResults(resultA, resultB, strict);
if (resultA == INDETERMINATE) {
return INDETERMINATE;
}
- tempA = addDuration(date1, 3, fDuration[0]);
- tempB = addDuration(date2, 3, fDuration[1]);
+ tempA = addDuration(date1, DATETIMES[3], fDuration[0]);
+ tempB = addDuration(date2, DATETIMES[3], fDuration[1]);
resultB = compareOrder(tempA, tempB);
resultA = compareResults(resultA, resultB, strict);
@@ -288,7 +286,7 @@
return resultA;
}
- private int[] addDuration(int[] date, int index, int[] duration) {
+ private int[] addDuration(int[] date, int[] addto, int[] duration) {
//REVISIT: some code could be shared between normalize() and this method,
// however is it worth moving it? The structures are different...
@@ -296,30 +294,30 @@
resetDateObj(duration);
//add months (may be modified additionaly below)
- int temp = DATETIMES[index][M] + date[M];
+ int temp = addto[M] + date[M];
duration[M] = modulo (temp, 1, 13);
int carry = fQuotient (temp, 1, 13);
//add years (may be modified additionaly below)
- duration[CY]=DATETIMES[index][CY] + date[CY] + carry;
-
+ duration[CY]=addto[CY] + date[CY] + carry;
+
//add seconds
- temp = DATETIMES[index][s] + date[s];
+ temp = addto[s] + date[s];
carry = fQuotient (temp, 60);
duration[s] = mod(temp, 60, carry);
//add minutes
- temp = DATETIMES[index][m] +date[m] + carry;
+ temp = addto[m] +date[m] + carry;
carry = fQuotient (temp, 60);
duration[m]= mod(temp, 60, carry);
//add hours
- temp = DATETIMES[index][h] + date[h] + carry;
+ temp = addto[h] + date[h] + carry;
carry = fQuotient(temp, 24);
duration[h] = mod(temp, 24, carry);
- duration[D]=DATETIMES[index][D] + date[D] + carry;
+ duration[D]=addto[D] + date[D] + carry;
while ( true ) {
---------------------------------------------------------------------
To unsubscribe, e-mail: xerces-cvs-unsubscribe@xml.apache.org
For additional commands, e-mail: xerces-cvs-help@xml.apache.org