@@ -31,21 +31,18 @@ typedef struct {
3131 long start ;
3232 long step ;
3333 long len ;
34- int reps ;
3534} rangeobject ;
3635
3736
3837object *
39- newrangeobject (start , len , step , reps )
38+ newrangeobject (start , len , step )
4039 long start , len , step ;
41- int reps ;
4240{
4341 rangeobject * obj = (rangeobject * ) newobject (& Rangetype );
4442
4543 obj -> start = start ;
4644 obj -> len = len ;
4745 obj -> step = step ;
48- obj -> reps = reps ;
4946
5047 return (object * ) obj ;
5148}
@@ -62,77 +59,31 @@ range_item(r, i)
6259 rangeobject * r ;
6360 int i ;
6461{
65- if (i < 0 || i >= r -> len * r -> reps ) {
62+ if (i < 0 || i >= r -> len ) {
6663 err_setstr (IndexError , "range object index out of range" );
6764 return NULL ;
6865 }
6966
70- return newintobject (r -> start + ( i % r -> len ) * r -> step );
67+ return newintobject (r -> start + i * r -> step );
7168}
7269
7370static int
7471range_length (r )
7572 rangeobject * r ;
7673{
77- return r -> len * r -> reps ;
74+ return r -> len ;
7875}
7976
8077static object *
8178range_repr (r )
8279 rangeobject * r ;
8380{
8481 char buf [80 ];
85- if (r -> reps != 1 )
86- sprintf (buf , "(xrange(%ld, %ld, %ld) * %d)" ,
87- r -> start ,
88- r -> start + r -> len * r -> step ,
89- r -> step ,
90- r -> reps );
91- else
92- sprintf (buf , "xrange(%ld, %ld, %ld)" ,
93- r -> start ,
94- r -> start + r -> len * r -> step ,
95- r -> step );
82+ sprintf (buf , "xrange(%ld, %ld, %ld)" ,
83+ r -> start , r -> start + r -> len * r -> step , r -> step );
9684 return newstringobject (buf );
9785}
9886
99- object *
100- range_concat (r , obj )
101- rangeobject * r ;
102- object * obj ;
103- {
104- if (is_rangeobject (obj )) {
105- rangeobject * s = (rangeobject * )obj ;
106- if (r -> start == s -> start && r -> len == s -> len &&
107- r -> step == s -> step )
108- return newrangeobject (r -> start , r -> len , r -> step ,
109- r -> reps + s -> reps );
110- }
111- err_setstr (TypeError , "cannot concatenate different range objects" );
112- return NULL ;
113- }
114-
115- object *
116- range_repeat (r , n )
117- rangeobject * r ;
118- int n ;
119- {
120- if (n < 0 )
121- return (object * ) newrangeobject (0 , 0 , 1 , 1 );
122-
123- else if (n == 1 ) {
124- INCREF (r );
125- return (object * ) r ;
126- }
127-
128- else
129- return (object * ) newrangeobject (
130- r -> start ,
131- r -> len ,
132- r -> step ,
133- r -> reps * n );
134- }
135-
13687static int
13788range_compare (r1 , r2 )
13889 rangeobject * r1 , * r2 ;
@@ -145,36 +96,33 @@ range_compare(r1, r2)
14596
14697 else if (r1 -> len != r2 -> len )
14798 return r1 -> len - r2 -> len ;
99+ }
148100
149- else
150- return r1 -> reps - r2 -> reps ;
101+ static object *
102+ range_concat (r , s )
103+ rangeobject * r ;
104+ object * s ;
105+ {
106+ err_setstr (TypeError , "concat not supported by xrange object" );
107+ return NULL ;
151108}
152109
153110static object *
154- range_slice (r , low , high )
111+ range_repeat (r , n )
155112 rangeobject * r ;
156- int low , high ;
113+ int n ;
157114{
158- if (r -> reps != 1 ) {
159- err_setstr (TypeError , "cannot slice a replicated range" );
160- return NULL ;
161- }
162- if (low < 0 )
163- low = 0 ;
164- else if (low > r -> len )
165- low = r -> len ;
166- if (high < 0 )
167- high = 0 ;
168- if (high < low )
169- high = low ;
170- else if (high > r -> len )
171- high = r -> len ;
172-
173- return (object * ) newrangeobject (
174- low * r -> step + r -> start ,
175- high - low ,
176- r -> step ,
177- 1 );
115+ err_setstr (TypeError , "repeat not supported by xrange object" );
116+ return NULL ;
117+ }
118+
119+ static object *
120+ range_slice (r , i , j )
121+ rangeobject * r ;
122+ int i , j ;
123+ {
124+ err_setstr (TypeError , "slice not supported by xrange object" );
125+ return NULL ;
178126}
179127
180128static sequence_methods range_as_sequence = {
@@ -190,7 +138,7 @@ static sequence_methods range_as_sequence = {
190138typeobject Rangetype = {
191139 OB_HEAD_INIT (& Typetype )
192140 0 , /* Number of items for varobject */
193- "range " , /* Name of this type */
141+ "xrange " , /* Name of this type */
194142 sizeof (rangeobject ), /* Basic object size */
195143 0 , /* Item size for varobject */
196144 range_dealloc , /*tp_dealloc*/
0 commit comments