]> granicus.if.org Git - python/commitdiff
Windows time_clock(): rewrite to get rid of horrid casting tricks.
authorTim Peters <tim.peters@gmail.com>
Wed, 13 Feb 2002 05:14:18 +0000 (05:14 +0000)
committerTim Peters <tim.peters@gmail.com>
Wed, 13 Feb 2002 05:14:18 +0000 (05:14 +0000)
Don't blame Mark!  The horrid casting tricks were my idea to begin with.
The rewrite works fine under VC6, and I *expect* will work fine under VC7.

Modules/timemodule.c

index b009ea17b9ba1e1175d106edfa863dd9df0a2ae3..6647ecc86909ff887a3d7037646dca6d12378ab8 100644 (file)
@@ -147,28 +147,26 @@ time_clock(PyObject *self, PyObject *args)
 static PyObject *
 time_clock(PyObject *self, PyObject *args)
 {
-       static LONG_LONG ctrStart;
+       static LARGE_INTEGER ctrStart;
        static double divisor = 0.0;
-       LONG_LONG now;
+       LARGE_INTEGER now;
        double diff;
 
-       assert(sizeof(LONG_LONG) == sizeof(LARGE_INTEGER));
        if (!PyArg_ParseTuple(args, ":clock"))
                return NULL;
 
        if (divisor == 0.0) {
-               LONG_LONG freq;
-               QueryPerformanceCounter((LARGE_INTEGER*)&ctrStart);
-               if (!QueryPerformanceFrequency((LARGE_INTEGER*)&freq) ||
-                   freq == 0) {
+               LARGE_INTEGER freq;
+               QueryPerformanceCounter(&ctrStart);
+               if (!QueryPerformanceFrequency(&freq) || freq.QuadPart == 0) {
                        /* Unlikely to happen - this works on all intel
                           machines at least!  Revert to clock() */
                        return PyFloat_FromDouble(clock());
                }
-               divisor = (double)freq;
+               divisor = (double)freq.QuadPart;
        }
-       QueryPerformanceCounter((LARGE_INTEGER*)&now);
-       diff = (double)(now - ctrStart);
+       QueryPerformanceCounter(&now);
+       diff = (double)(now.QuadPart - ctrStart.QuadPart);
        return PyFloat_FromDouble(diff / divisor);
 }
 
@@ -220,7 +218,7 @@ static PyStructSequence_Desc struct_time_type_desc = {
        struct_time_type_fields,
        9,
 };
-       
+
 static PyTypeObject StructTimeType;
 
 static PyObject *
@@ -229,7 +227,7 @@ tmtotuple(struct tm *p)
        PyObject *v = PyStructSequence_New(&StructTimeType);
        if (v == NULL)
                return NULL;
-       
+
 #define SET(i,val) PyStructSequence_SET_ITEM(v, i, PyInt_FromLong((long) val))
 
        SET(0, p->tm_year + 1900);