summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVictor Stinner <victor.stinner@gmail.com>2012-06-12 20:11:44 (GMT)
committerVictor Stinner <victor.stinner@gmail.com>2012-06-12 20:11:44 (GMT)
commitbda4b8802c9693cd1c6f97cc09e34c4f63b030ef (patch)
tree11f93eb6d6dbfc683d52c53bbba5fae881bb0e49
parentd9738242f82109e01561131efecb2e20da93d743 (diff)
downloadcpython-bda4b8802c9693cd1c6f97cc09e34c4f63b030ef.zip
cpython-bda4b8802c9693cd1c6f97cc09e34c4f63b030ef.tar.gz
cpython-bda4b8802c9693cd1c6f97cc09e34c4f63b030ef.tar.bz2
time.get_clock_info() uses a namespace instead of structseq
-rw-r--r--Doc/library/time.rst36
-rw-r--r--Modules/timemodule.c57
2 files changed, 31 insertions, 62 deletions
diff --git a/Doc/library/time.rst b/Doc/library/time.rst
index a8c70b3..ba6b176 100644
--- a/Doc/library/time.rst
+++ b/Doc/library/time.rst
@@ -160,30 +160,6 @@ The module defines the following functions and data items:
.. versionadded:: 3.3
-.. class:: clock_info
-
- Clock information object returned by :func:`get_clock_info`.
-
- .. attribute:: implementation
-
- The name of the underlying C function used to get the clock value.
-
- .. attribute:: monotonic
-
- ``True`` if the clock cannot go backward, ``False`` otherwise.
-
- .. attribute:: adjusted
-
- ``True`` if the clock can be adjusted (e.g. by a NTP daemon), ``False``
- otherwise.
-
- .. attribute:: resolution
-
- The resolution of the clock in seconds (:class:`float`).
-
- .. versionadded:: 3.3
-
-
.. function:: clock_settime(clk_id, time)
Set the time of the specified clock *clk_id*.
@@ -267,7 +243,7 @@ The module defines the following functions and data items:
.. function:: get_clock_info(name)
- Get information on the specified clock as a :class:`clock_info` object.
+ Get information on the specified clock as a namespace object.
Supported clock names and the corresponding functions to read their value
are:
@@ -277,6 +253,16 @@ The module defines the following functions and data items:
* ``'process_time'``: :func:`time.process_time`
* ``'time'``: :func:`time.time`
+ The result has the following attributes:
+
+ - *adjusted*: ``True`` if the clock can be adjusted (e.g. by a NTP daemon),
+ ``False`` otherwise
+ - *implementation*: The name of the underlying C function used to get
+ the clock value
+ - *monotonic*: ``True`` if the clock cannot go backward,
+ ``False`` otherwise
+ - *resolution*: The resolution of the clock in seconds (:class:`float`)
+
.. versionadded:: 3.3
diff --git a/Modules/timemodule.c b/Modules/timemodule.c
index a80cb4b..d844bc3 100644
--- a/Modules/timemodule.c
+++ b/Modules/timemodule.c
@@ -1124,35 +1124,12 @@ PyDoc_STRVAR(process_time_doc,
Process time for profiling: sum of the kernel and user-space CPU time.");
-static PyTypeObject ClockInfoType;
-
-PyDoc_STRVAR(ClockInfo_docstring,
- "Clock information");
-
-static PyStructSequence_Field ClockInfo_fields[] = {
- {"implementation", "name of the underlying C function "
- "used to get the clock value"},
- {"monotonic", "True if the clock cannot go backward, False otherwise"},
- {"adjusted", "True if the clock can be adjusted "
- "(e.g. by a NTP daemon), False otherwise"},
- {"resolution", "resolution of the clock in seconds"},
- {NULL, NULL}
-};
-
-static PyStructSequence_Desc ClockInfo_desc = {
- "time.clock_info",
- ClockInfo_docstring,
- ClockInfo_fields,
- 4,
-};
-
static PyObject *
time_get_clock_info(PyObject *self, PyObject *args)
{
char *name;
- PyObject *obj;
_Py_clock_info_t info;
- PyObject *result;
+ PyObject *obj = NULL, *dict, *ns;
if (!PyArg_ParseTuple(args, "s:get_clock_info", &name))
return NULL;
@@ -1191,39 +1168,50 @@ time_get_clock_info(PyObject *self, PyObject *args)
return NULL;
Py_DECREF(obj);
- result = PyStructSequence_New(&ClockInfoType);
- if (result == NULL)
+ dict = PyDict_New();
+ if (dict == NULL)
return NULL;
assert(info.implementation != NULL);
obj = PyUnicode_FromString(info.implementation);
if (obj == NULL)
goto error;
- PyStructSequence_SET_ITEM(result, 0, obj);
+ if (PyDict_SetItemString(dict, "implementation", obj) == -1)
+ goto error;
+ Py_CLEAR(obj);
assert(info.monotonic != -1);
obj = PyBool_FromLong(info.monotonic);
if (obj == NULL)
goto error;
- PyStructSequence_SET_ITEM(result, 1, obj);
+ if (PyDict_SetItemString(dict, "monotonic", obj) == -1)
+ goto error;
+ Py_CLEAR(obj);
assert(info.adjusted != -1);
obj = PyBool_FromLong(info.adjusted);
if (obj == NULL)
goto error;
- PyStructSequence_SET_ITEM(result, 2, obj);
+ if (PyDict_SetItemString(dict, "adjusted", obj) == -1)
+ goto error;
+ Py_CLEAR(obj);
assert(info.resolution > 0.0);
assert(info.resolution <= 1.0);
obj = PyFloat_FromDouble(info.resolution);
if (obj == NULL)
goto error;
- PyStructSequence_SET_ITEM(result, 3, obj);
+ if (PyDict_SetItemString(dict, "resolution", obj) == -1)
+ goto error;
+ Py_CLEAR(obj);
- return result;
+ ns = _PyNamespace_New(dict);
+ Py_DECREF(dict);
+ return ns;
error:
- Py_DECREF(result);
+ Py_DECREF(dict);
+ Py_XDECREF(obj);
return NULL;
}
@@ -1451,11 +1439,6 @@ PyInit_time(void)
PyStructSequence_InitType(&StructTimeType,
&struct_time_type_desc);
- /* initialize ClockInfoType */
- PyStructSequence_InitType(&ClockInfoType, &ClockInfo_desc);
- Py_INCREF(&ClockInfoType);
- PyModule_AddObject(m, "clock_info", (PyObject*)&ClockInfoType);
-
#ifdef MS_WINDOWS
winver.dwOSVersionInfoSize = sizeof(winver);
if (!GetVersionEx((OSVERSIONINFO*)&winver)) {