mirror of
https://github.com/python/cpython.git
synced 2025-08-01 07:33:08 +00:00
Fix up struct docstrings, add struct.pack_to function for symmetry
This commit is contained in:
parent
90bd0a554e
commit
1fcdc232db
3 changed files with 42 additions and 8 deletions
|
@ -62,6 +62,18 @@ def pack(fmt, *args):
|
||||||
o = _compile(fmt)
|
o = _compile(fmt)
|
||||||
return o.pack(*args)
|
return o.pack(*args)
|
||||||
|
|
||||||
|
def pack_to(fmt, buf, offset, *args):
|
||||||
|
"""
|
||||||
|
Pack the values v2, v2, ... according to fmt, write
|
||||||
|
the packed bytes into the writable buffer buf starting at offset.
|
||||||
|
See struct.__doc__ for more on format strings.
|
||||||
|
"""
|
||||||
|
try:
|
||||||
|
o = _cache[fmt]
|
||||||
|
except KeyError:
|
||||||
|
o = _compile(fmt)
|
||||||
|
return o.pack_to(buf, offset, *args)
|
||||||
|
|
||||||
def unpack(fmt, s):
|
def unpack(fmt, s):
|
||||||
"""
|
"""
|
||||||
Unpack the string, containing packed C structure data, according
|
Unpack the string, containing packed C structure data, according
|
||||||
|
|
|
@ -509,6 +509,28 @@ class PackBufferTestCase(unittest.TestCase):
|
||||||
self.assertRaises(struct.error, s.pack_to, small_buf, 0, test_string)
|
self.assertRaises(struct.error, s.pack_to, small_buf, 0, test_string)
|
||||||
self.assertRaises(struct.error, s.pack_to, small_buf, 2, test_string)
|
self.assertRaises(struct.error, s.pack_to, small_buf, 2, test_string)
|
||||||
|
|
||||||
|
def test_pack_to_fn( self ):
|
||||||
|
test_string = 'Reykjavik rocks, eow!'
|
||||||
|
writable_buf = array.array('c', ' '*100)
|
||||||
|
fmt = '21s'
|
||||||
|
pack_to = lambda *args: struct.pack_to(fmt, *args)
|
||||||
|
|
||||||
|
# Test without offset
|
||||||
|
pack_to(writable_buf, 0, test_string)
|
||||||
|
from_buf = writable_buf.tostring()[:len(test_string)]
|
||||||
|
self.assertEquals(from_buf, test_string)
|
||||||
|
|
||||||
|
# Test with offset.
|
||||||
|
pack_to(writable_buf, 10, test_string)
|
||||||
|
from_buf = writable_buf.tostring()[:len(test_string)+10]
|
||||||
|
self.assertEquals(from_buf, (test_string[:10] + test_string))
|
||||||
|
|
||||||
|
# Go beyond boundaries.
|
||||||
|
small_buf = array.array('c', ' '*10)
|
||||||
|
self.assertRaises(struct.error, pack_to, small_buf, 0, test_string)
|
||||||
|
self.assertRaises(struct.error, pack_to, small_buf, 2, test_string)
|
||||||
|
|
||||||
|
|
||||||
def test_main():
|
def test_main():
|
||||||
test.test_support.run_unittest(PackBufferTestCase)
|
test.test_support.run_unittest(PackBufferTestCase)
|
||||||
|
|
||||||
|
|
|
@ -1277,7 +1277,7 @@ fail:
|
||||||
|
|
||||||
|
|
||||||
PyDoc_STRVAR(s_unpack__doc__,
|
PyDoc_STRVAR(s_unpack__doc__,
|
||||||
"unpack(str) -> (v1, v2, ...)\n\
|
"S.unpack(str) -> (v1, v2, ...)\n\
|
||||||
\n\
|
\n\
|
||||||
Return tuple containing values unpacked according to this Struct's format.\n\
|
Return tuple containing values unpacked according to this Struct's format.\n\
|
||||||
Requires len(str) == self.size. See struct.__doc__ for more on format\n\
|
Requires len(str) == self.size. See struct.__doc__ for more on format\n\
|
||||||
|
@ -1299,7 +1299,7 @@ s_unpack(PyObject *self, PyObject *inputstr)
|
||||||
}
|
}
|
||||||
|
|
||||||
PyDoc_STRVAR(s_unpack_from__doc__,
|
PyDoc_STRVAR(s_unpack_from__doc__,
|
||||||
"unpack_from(buffer[, offset]) -> (v1, v2, ...)\n\
|
"S.unpack_from(buffer[, offset]) -> (v1, v2, ...)\n\
|
||||||
\n\
|
\n\
|
||||||
Return tuple containing values unpacked according to this Struct's format.\n\
|
Return tuple containing values unpacked according to this Struct's format.\n\
|
||||||
Unlike unpack, unpack_from can unpack values from any object supporting\n\
|
Unlike unpack, unpack_from can unpack values from any object supporting\n\
|
||||||
|
@ -1407,7 +1407,7 @@ s_pack_internal(PyStructObject *soself, PyObject *args, int offset, char* buf)
|
||||||
|
|
||||||
|
|
||||||
PyDoc_STRVAR(s_pack__doc__,
|
PyDoc_STRVAR(s_pack__doc__,
|
||||||
"pack(v1, v2, ...) -> string\n\
|
"S.pack(v1, v2, ...) -> string\n\
|
||||||
\n\
|
\n\
|
||||||
Return a string containing values v1, v2, ... packed according to this\n\
|
Return a string containing values v1, v2, ... packed according to this\n\
|
||||||
Struct's format. See struct.__doc__ for more on format strings.");
|
Struct's format. See struct.__doc__ for more on format strings.");
|
||||||
|
@ -1445,11 +1445,11 @@ s_pack(PyObject *self, PyObject *args)
|
||||||
}
|
}
|
||||||
|
|
||||||
PyDoc_STRVAR(s_pack_to__doc__,
|
PyDoc_STRVAR(s_pack_to__doc__,
|
||||||
"pack_to(buffer, offset, v1, v2, ...)\n\
|
"S.pack_to(buffer, offset, v1, v2, ...)\n\
|
||||||
\n\
|
\n\
|
||||||
Pack the values v2, v2, ... according to this Struct's format, write \n\
|
Pack the values v2, v2, ... according to this Struct's format, write \n\
|
||||||
the packed bytes into the given buffer at the given offset. Note that \n\
|
the packed bytes into the writable buffer buf starting at offset. Note\n\
|
||||||
the offset is not an optional argument. See struct.__doc__ for \n\
|
that the offset is not an optional argument. See struct.__doc__ for \n\
|
||||||
more on format strings.");
|
more on format strings.");
|
||||||
|
|
||||||
static PyObject *
|
static PyObject *
|
||||||
|
@ -1530,8 +1530,8 @@ PyDoc_STRVAR(s__doc__, "Compiled struct object");
|
||||||
#define OFF(x) offsetof(PyStructObject, x)
|
#define OFF(x) offsetof(PyStructObject, x)
|
||||||
|
|
||||||
static PyGetSetDef s_getsetlist[] = {
|
static PyGetSetDef s_getsetlist[] = {
|
||||||
{"format", (getter)s_get_format, (setter)NULL, "buffer's capacity", NULL},
|
{"format", (getter)s_get_format, (setter)NULL, "struct format string", NULL},
|
||||||
{"size", (getter)s_get_size, (setter)NULL, "buffer's position", NULL},
|
{"size", (getter)s_get_size, (setter)NULL, "struct size in bytes", NULL},
|
||||||
{NULL} /* sentinel */
|
{NULL} /* sentinel */
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue