diff Objects/structseq.c @ 25806:0bbea4dcd9be legacy-trunk

Add PyStructSequence_UnnamedField. Add stat_float_times. Use integers in stat tuple, optionally floats in named fields.
author Martin v. Löwis <martin@v.loewis.de>
date Wed, 16 Oct 2002 18:27:39 +0000
parents 363c7fc174ac
children fdca87c4234e
line wrap: on
line diff
--- a/Objects/structseq.c	Wed Oct 16 17:51:38 2002 +0000
+++ b/Objects/structseq.c	Wed Oct 16 18:27:39 2002 +0000
@@ -8,6 +8,10 @@
 static char visible_length_key[] = "n_sequence_fields";
 static char real_length_key[] = "n_fields";
 
+/* Fields with this name have only a field index, not a field name. 
+   They are only allowed for indices < n_visible_fields. */
+char *PyStructSequence_UnnamedField = "unnamed field";
+
 #define VISIBLE_SIZE(op) ((op)->ob_size)
 #define VISIBLE_SIZE_TP(tp) PyInt_AsLong( \
                       PyDict_GetItemString((tp)->tp_dict, visible_length_key))
@@ -332,10 +336,12 @@
 {
 	PyObject *dict;
 	PyMemberDef* members;
-	int n_members, i;
+	int n_members, n_unnamed_members, i, k;
 
+	n_unnamed_members = 0;
 	for (i = 0; desc->fields[i].name != NULL; ++i)
-		;
+		if (desc->fields[0].name == PyStructSequence_UnnamedField)
+			n_unnamed_members++;
 	n_members = i;
 
 	memcpy(type, &_struct_sequence_template, sizeof(PyTypeObject));
@@ -345,17 +351,20 @@
 		sizeof(PyObject*)*(n_members-1);
 	type->tp_itemsize = 0;
 
-	members = PyMem_NEW(PyMemberDef, n_members+1);
+	members = PyMem_NEW(PyMemberDef, n_members-n_unnamed_members+1);
 	
-	for (i = 0; i < n_members; ++i) {
-		members[i].name = desc->fields[i].name;
-		members[i].type = T_OBJECT;
-		members[i].offset = offsetof(PyStructSequence, ob_item)
+	for (i = k = 0; i < n_members; ++i) {
+		if (desc->fields[i].name == PyStructSequence_UnnamedField)
+			continue;
+		members[k].name = desc->fields[i].name;
+		members[k].type = T_OBJECT;
+		members[k].offset = offsetof(PyStructSequence, ob_item)
 		  + i * sizeof(PyObject*);
-		members[i].flags = READONLY;
-		members[i].doc = desc->fields[i].doc;
+		members[k].flags = READONLY;
+		members[k].doc = desc->fields[i].doc;
+		k++;
 	}
-	members[n_members].name = NULL;
+	members[k].name = NULL;
 
 	type->tp_members = members;