Mercurial > cpython-lru_cache-weakref
annotate Modules/stropmodule.c @ 3720:b341def4eef8 legacy-trunk
Ignore latex intermediate products.
| author | Guido van Rossum <guido@python.org> |
|---|---|
| date | Wed, 26 Jun 1996 19:30:01 +0000 |
| parents | b8980735d03b |
| children | 2f27501db3c3 |
| rev | line source |
|---|---|
|
1012
806689b93558
Re-implement some operations from string.py in C, for speed.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1 /*********************************************************** |
|
2061
172ba04a5191
Added 1995 to copyright message.
Guido van Rossum <guido@python.org>
parents:
1888
diff
changeset
|
2 Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, |
|
172ba04a5191
Added 1995 to copyright message.
Guido van Rossum <guido@python.org>
parents:
1888
diff
changeset
|
3 The Netherlands. |
|
1012
806689b93558
Re-implement some operations from string.py in C, for speed.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
4 |
|
806689b93558
Re-implement some operations from string.py in C, for speed.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
5 All Rights Reserved |
|
806689b93558
Re-implement some operations from string.py in C, for speed.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
6 |
|
806689b93558
Re-implement some operations from string.py in C, for speed.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
7 Permission to use, copy, modify, and distribute this software and its |
|
806689b93558
Re-implement some operations from string.py in C, for speed.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
8 documentation for any purpose and without fee is hereby granted, |
|
806689b93558
Re-implement some operations from string.py in C, for speed.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
9 provided that the above copyright notice appear in all copies and that |
|
806689b93558
Re-implement some operations from string.py in C, for speed.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
10 both that copyright notice and this permission notice appear in |
|
806689b93558
Re-implement some operations from string.py in C, for speed.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
11 supporting documentation, and that the names of Stichting Mathematisch |
|
806689b93558
Re-implement some operations from string.py in C, for speed.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
12 Centrum or CWI not be used in advertising or publicity pertaining to |
|
806689b93558
Re-implement some operations from string.py in C, for speed.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
13 distribution of the software without specific, written prior permission. |
|
806689b93558
Re-implement some operations from string.py in C, for speed.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
14 |
|
806689b93558
Re-implement some operations from string.py in C, for speed.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
15 STICHTING MATHEMATISCH CENTRUM DISCLAIMS ALL WARRANTIES WITH REGARD TO |
|
806689b93558
Re-implement some operations from string.py in C, for speed.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
16 THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND |
|
806689b93558
Re-implement some operations from string.py in C, for speed.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
17 FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH CENTRUM BE LIABLE |
|
806689b93558
Re-implement some operations from string.py in C, for speed.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
18 FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES |
|
806689b93558
Re-implement some operations from string.py in C, for speed.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
19 WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN |
|
806689b93558
Re-implement some operations from string.py in C, for speed.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
20 ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT |
|
806689b93558
Re-implement some operations from string.py in C, for speed.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
21 OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. |
|
806689b93558
Re-implement some operations from string.py in C, for speed.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
22 |
|
806689b93558
Re-implement some operations from string.py in C, for speed.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
23 ******************************************************************/ |
|
806689b93558
Re-implement some operations from string.py in C, for speed.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
24 |
|
806689b93558
Re-implement some operations from string.py in C, for speed.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
25 /* strop module */ |
|
806689b93558
Re-implement some operations from string.py in C, for speed.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
26 |
|
806689b93558
Re-implement some operations from string.py in C, for speed.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
27 #include "allobjects.h" |
|
806689b93558
Re-implement some operations from string.py in C, for speed.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
28 #include "modsupport.h" |
|
806689b93558
Re-implement some operations from string.py in C, for speed.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
29 |
|
1321
a80677798f84
stropmodule.c: use C isspace(c) to test for whitespace; add
Guido van Rossum <guido@python.org>
parents:
1257
diff
changeset
|
30 #include <ctype.h> |
|
1322
f3c907efe5d7
* config.c: different default PYTHONPATH for MS-DOS
Guido van Rossum <guido@python.org>
parents:
1321
diff
changeset
|
31 /* XXX This file assumes that the <ctype.h> is*() functions |
|
f3c907efe5d7
* config.c: different default PYTHONPATH for MS-DOS
Guido van Rossum <guido@python.org>
parents:
1321
diff
changeset
|
32 XXX are defined for all 8-bit characters! */ |
|
1321
a80677798f84
stropmodule.c: use C isspace(c) to test for whitespace; add
Guido van Rossum <guido@python.org>
parents:
1257
diff
changeset
|
33 |
|
1746
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1394
diff
changeset
|
34 #include <errno.h> |
|
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1394
diff
changeset
|
35 |
|
1012
806689b93558
Re-implement some operations from string.py in C, for speed.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
36 |
|
806689b93558
Re-implement some operations from string.py in C, for speed.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
37 static object * |
|
2707
1306e761a623
unified join(fields), split(fields)
Guido van Rossum <guido@python.org>
parents:
2335
diff
changeset
|
38 split_whitespace(s, len) |
|
1306e761a623
unified join(fields), split(fields)
Guido van Rossum <guido@python.org>
parents:
2335
diff
changeset
|
39 char *s; |
|
1306e761a623
unified join(fields), split(fields)
Guido van Rossum <guido@python.org>
parents:
2335
diff
changeset
|
40 int len; |
|
1012
806689b93558
Re-implement some operations from string.py in C, for speed.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
41 { |
|
2707
1306e761a623
unified join(fields), split(fields)
Guido van Rossum <guido@python.org>
parents:
2335
diff
changeset
|
42 int i, j, err; |
|
1012
806689b93558
Re-implement some operations from string.py in C, for speed.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
43 object *list, *item; |
|
806689b93558
Re-implement some operations from string.py in C, for speed.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
44 |
|
806689b93558
Re-implement some operations from string.py in C, for speed.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
45 list = newlistobject(0); |
|
806689b93558
Re-implement some operations from string.py in C, for speed.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
46 if (list == NULL) |
|
806689b93558
Re-implement some operations from string.py in C, for speed.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
47 return NULL; |
|
806689b93558
Re-implement some operations from string.py in C, for speed.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
48 |
|
806689b93558
Re-implement some operations from string.py in C, for speed.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
49 i = 0; |
|
806689b93558
Re-implement some operations from string.py in C, for speed.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
50 while (i < len) { |
| 2310 | 51 while (i < len && isspace(Py_CHARMASK(s[i]))) { |
|
1012
806689b93558
Re-implement some operations from string.py in C, for speed.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
52 i = i+1; |
|
806689b93558
Re-implement some operations from string.py in C, for speed.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
53 } |
|
806689b93558
Re-implement some operations from string.py in C, for speed.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
54 j = i; |
|
2335
e11e6b358531
fix stupid bug in strip and split
Guido van Rossum <guido@python.org>
parents:
2310
diff
changeset
|
55 while (i < len && !isspace(Py_CHARMASK(s[i]))) { |
|
1012
806689b93558
Re-implement some operations from string.py in C, for speed.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
56 i = i+1; |
|
806689b93558
Re-implement some operations from string.py in C, for speed.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
57 } |
|
806689b93558
Re-implement some operations from string.py in C, for speed.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
58 if (j < i) { |
|
806689b93558
Re-implement some operations from string.py in C, for speed.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
59 item = newsizedstringobject(s+j, (int)(i-j)); |
|
1394
98f51f61cb4b
Fix memory leaks in join & joinfields
Guido van Rossum <guido@python.org>
parents:
1367
diff
changeset
|
60 if (item == NULL) { |
|
98f51f61cb4b
Fix memory leaks in join & joinfields
Guido van Rossum <guido@python.org>
parents:
1367
diff
changeset
|
61 DECREF(list); |
|
98f51f61cb4b
Fix memory leaks in join & joinfields
Guido van Rossum <guido@python.org>
parents:
1367
diff
changeset
|
62 return NULL; |
|
98f51f61cb4b
Fix memory leaks in join & joinfields
Guido van Rossum <guido@python.org>
parents:
1367
diff
changeset
|
63 } |
|
98f51f61cb4b
Fix memory leaks in join & joinfields
Guido van Rossum <guido@python.org>
parents:
1367
diff
changeset
|
64 err = addlistitem(list, item); |
|
98f51f61cb4b
Fix memory leaks in join & joinfields
Guido van Rossum <guido@python.org>
parents:
1367
diff
changeset
|
65 DECREF(item); |
|
98f51f61cb4b
Fix memory leaks in join & joinfields
Guido van Rossum <guido@python.org>
parents:
1367
diff
changeset
|
66 if (err < 0) { |
|
1012
806689b93558
Re-implement some operations from string.py in C, for speed.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
67 DECREF(list); |
|
806689b93558
Re-implement some operations from string.py in C, for speed.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
68 return NULL; |
|
806689b93558
Re-implement some operations from string.py in C, for speed.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
69 } |
|
806689b93558
Re-implement some operations from string.py in C, for speed.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
70 } |
|
806689b93558
Re-implement some operations from string.py in C, for speed.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
71 } |
|
806689b93558
Re-implement some operations from string.py in C, for speed.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
72 |
|
806689b93558
Re-implement some operations from string.py in C, for speed.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
73 return list; |
|
806689b93558
Re-implement some operations from string.py in C, for speed.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
74 } |
|
806689b93558
Re-implement some operations from string.py in C, for speed.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
75 |
|
806689b93558
Re-implement some operations from string.py in C, for speed.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
76 |
|
806689b93558
Re-implement some operations from string.py in C, for speed.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
77 static object * |
|
806689b93558
Re-implement some operations from string.py in C, for speed.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
78 strop_splitfields(self, args) |
|
806689b93558
Re-implement some operations from string.py in C, for speed.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
79 object *self; /* Not used */ |
|
806689b93558
Re-implement some operations from string.py in C, for speed.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
80 object *args; |
|
806689b93558
Re-implement some operations from string.py in C, for speed.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
81 { |
|
1394
98f51f61cb4b
Fix memory leaks in join & joinfields
Guido van Rossum <guido@python.org>
parents:
1367
diff
changeset
|
82 int len, n, i, j, err; |
|
1012
806689b93558
Re-implement some operations from string.py in C, for speed.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
83 char *s, *sub; |
|
806689b93558
Re-implement some operations from string.py in C, for speed.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
84 object *list, *item; |
|
806689b93558
Re-implement some operations from string.py in C, for speed.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
85 |
|
2707
1306e761a623
unified join(fields), split(fields)
Guido van Rossum <guido@python.org>
parents:
2335
diff
changeset
|
86 sub = NULL; |
|
1306e761a623
unified join(fields), split(fields)
Guido van Rossum <guido@python.org>
parents:
2335
diff
changeset
|
87 n = 0; |
|
1306e761a623
unified join(fields), split(fields)
Guido van Rossum <guido@python.org>
parents:
2335
diff
changeset
|
88 if (!newgetargs(args, "s#|z#", &s, &len, &sub, &n)) |
|
1012
806689b93558
Re-implement some operations from string.py in C, for speed.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
89 return NULL; |
|
2707
1306e761a623
unified join(fields), split(fields)
Guido van Rossum <guido@python.org>
parents:
2335
diff
changeset
|
90 if (sub == NULL) |
|
1306e761a623
unified join(fields), split(fields)
Guido van Rossum <guido@python.org>
parents:
2335
diff
changeset
|
91 return split_whitespace(s, len); |
|
1012
806689b93558
Re-implement some operations from string.py in C, for speed.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
92 if (n == 0) { |
|
806689b93558
Re-implement some operations from string.py in C, for speed.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
93 err_setstr(ValueError, "empty separator"); |
|
806689b93558
Re-implement some operations from string.py in C, for speed.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
94 return NULL; |
|
806689b93558
Re-implement some operations from string.py in C, for speed.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
95 } |
|
806689b93558
Re-implement some operations from string.py in C, for speed.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
96 |
|
806689b93558
Re-implement some operations from string.py in C, for speed.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
97 list = newlistobject(0); |
|
806689b93558
Re-implement some operations from string.py in C, for speed.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
98 if (list == NULL) |
|
806689b93558
Re-implement some operations from string.py in C, for speed.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
99 return NULL; |
|
806689b93558
Re-implement some operations from string.py in C, for speed.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
100 |
|
806689b93558
Re-implement some operations from string.py in C, for speed.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
101 i = j = 0; |
|
806689b93558
Re-implement some operations from string.py in C, for speed.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
102 while (i+n <= len) { |
|
806689b93558
Re-implement some operations from string.py in C, for speed.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
103 if (s[i] == sub[0] && (n == 1 || strncmp(s+i, sub, n) == 0)) { |
|
806689b93558
Re-implement some operations from string.py in C, for speed.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
104 item = newsizedstringobject(s+j, (int)(i-j)); |
|
1394
98f51f61cb4b
Fix memory leaks in join & joinfields
Guido van Rossum <guido@python.org>
parents:
1367
diff
changeset
|
105 if (item == NULL) |
|
98f51f61cb4b
Fix memory leaks in join & joinfields
Guido van Rossum <guido@python.org>
parents:
1367
diff
changeset
|
106 goto fail; |
|
98f51f61cb4b
Fix memory leaks in join & joinfields
Guido van Rossum <guido@python.org>
parents:
1367
diff
changeset
|
107 err = addlistitem(list, item); |
|
98f51f61cb4b
Fix memory leaks in join & joinfields
Guido van Rossum <guido@python.org>
parents:
1367
diff
changeset
|
108 DECREF(item); |
|
98f51f61cb4b
Fix memory leaks in join & joinfields
Guido van Rossum <guido@python.org>
parents:
1367
diff
changeset
|
109 if (err < 0) |
|
98f51f61cb4b
Fix memory leaks in join & joinfields
Guido van Rossum <guido@python.org>
parents:
1367
diff
changeset
|
110 goto fail; |
|
1012
806689b93558
Re-implement some operations from string.py in C, for speed.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
111 i = j = i + n; |
|
806689b93558
Re-implement some operations from string.py in C, for speed.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
112 } |
|
806689b93558
Re-implement some operations from string.py in C, for speed.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
113 else |
|
806689b93558
Re-implement some operations from string.py in C, for speed.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
114 i++; |
|
806689b93558
Re-implement some operations from string.py in C, for speed.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
115 } |
|
806689b93558
Re-implement some operations from string.py in C, for speed.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
116 item = newsizedstringobject(s+j, (int)(len-j)); |
|
1394
98f51f61cb4b
Fix memory leaks in join & joinfields
Guido van Rossum <guido@python.org>
parents:
1367
diff
changeset
|
117 if (item == NULL) |
|
98f51f61cb4b
Fix memory leaks in join & joinfields
Guido van Rossum <guido@python.org>
parents:
1367
diff
changeset
|
118 goto fail; |
|
98f51f61cb4b
Fix memory leaks in join & joinfields
Guido van Rossum <guido@python.org>
parents:
1367
diff
changeset
|
119 err = addlistitem(list, item); |
|
98f51f61cb4b
Fix memory leaks in join & joinfields
Guido van Rossum <guido@python.org>
parents:
1367
diff
changeset
|
120 DECREF(item); |
|
98f51f61cb4b
Fix memory leaks in join & joinfields
Guido van Rossum <guido@python.org>
parents:
1367
diff
changeset
|
121 if (err < 0) |
|
98f51f61cb4b
Fix memory leaks in join & joinfields
Guido van Rossum <guido@python.org>
parents:
1367
diff
changeset
|
122 goto fail; |
|
1012
806689b93558
Re-implement some operations from string.py in C, for speed.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
123 |
|
806689b93558
Re-implement some operations from string.py in C, for speed.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
124 return list; |
|
1394
98f51f61cb4b
Fix memory leaks in join & joinfields
Guido van Rossum <guido@python.org>
parents:
1367
diff
changeset
|
125 |
|
98f51f61cb4b
Fix memory leaks in join & joinfields
Guido van Rossum <guido@python.org>
parents:
1367
diff
changeset
|
126 fail: |
|
98f51f61cb4b
Fix memory leaks in join & joinfields
Guido van Rossum <guido@python.org>
parents:
1367
diff
changeset
|
127 DECREF(list); |
|
98f51f61cb4b
Fix memory leaks in join & joinfields
Guido van Rossum <guido@python.org>
parents:
1367
diff
changeset
|
128 return NULL; |
|
1012
806689b93558
Re-implement some operations from string.py in C, for speed.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
129 } |
|
806689b93558
Re-implement some operations from string.py in C, for speed.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
130 |
|
806689b93558
Re-implement some operations from string.py in C, for speed.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
131 |
|
806689b93558
Re-implement some operations from string.py in C, for speed.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
132 static object * |
|
1094
d2af6bdcb6d0
* config.c: Added audioop to lists.
Guido van Rossum <guido@python.org>
parents:
1048
diff
changeset
|
133 strop_joinfields(self, args) |
|
d2af6bdcb6d0
* config.c: Added audioop to lists.
Guido van Rossum <guido@python.org>
parents:
1048
diff
changeset
|
134 object *self; /* Not used */ |
|
d2af6bdcb6d0
* config.c: Added audioop to lists.
Guido van Rossum <guido@python.org>
parents:
1048
diff
changeset
|
135 object *args; |
|
d2af6bdcb6d0
* config.c: Added audioop to lists.
Guido van Rossum <guido@python.org>
parents:
1048
diff
changeset
|
136 { |
|
d2af6bdcb6d0
* config.c: Added audioop to lists.
Guido van Rossum <guido@python.org>
parents:
1048
diff
changeset
|
137 object *seq, *item, *res; |
|
d2af6bdcb6d0
* config.c: Added audioop to lists.
Guido van Rossum <guido@python.org>
parents:
1048
diff
changeset
|
138 object * (*getitem) FPROTO((object *, int)); |
|
d2af6bdcb6d0
* config.c: Added audioop to lists.
Guido van Rossum <guido@python.org>
parents:
1048
diff
changeset
|
139 char *sep, *p; |
|
d2af6bdcb6d0
* config.c: Added audioop to lists.
Guido van Rossum <guido@python.org>
parents:
1048
diff
changeset
|
140 int seplen, seqlen, reslen, itemlen, i; |
|
d2af6bdcb6d0
* config.c: Added audioop to lists.
Guido van Rossum <guido@python.org>
parents:
1048
diff
changeset
|
141 |
|
2707
1306e761a623
unified join(fields), split(fields)
Guido van Rossum <guido@python.org>
parents:
2335
diff
changeset
|
142 sep = NULL; |
|
1306e761a623
unified join(fields), split(fields)
Guido van Rossum <guido@python.org>
parents:
2335
diff
changeset
|
143 seplen = 0; |
|
1306e761a623
unified join(fields), split(fields)
Guido van Rossum <guido@python.org>
parents:
2335
diff
changeset
|
144 if (!newgetargs(args, "O|s#", &seq, &sep, &seplen)) |
|
1094
d2af6bdcb6d0
* config.c: Added audioop to lists.
Guido van Rossum <guido@python.org>
parents:
1048
diff
changeset
|
145 return NULL; |
|
2707
1306e761a623
unified join(fields), split(fields)
Guido van Rossum <guido@python.org>
parents:
2335
diff
changeset
|
146 if (sep == NULL) { |
|
1306e761a623
unified join(fields), split(fields)
Guido van Rossum <guido@python.org>
parents:
2335
diff
changeset
|
147 sep = " "; |
|
1306e761a623
unified join(fields), split(fields)
Guido van Rossum <guido@python.org>
parents:
2335
diff
changeset
|
148 seplen = 1; |
|
1306e761a623
unified join(fields), split(fields)
Guido van Rossum <guido@python.org>
parents:
2335
diff
changeset
|
149 } |
|
1094
d2af6bdcb6d0
* config.c: Added audioop to lists.
Guido van Rossum <guido@python.org>
parents:
1048
diff
changeset
|
150 if (is_listobject(seq)) { |
|
d2af6bdcb6d0
* config.c: Added audioop to lists.
Guido van Rossum <guido@python.org>
parents:
1048
diff
changeset
|
151 getitem = getlistitem; |
|
d2af6bdcb6d0
* config.c: Added audioop to lists.
Guido van Rossum <guido@python.org>
parents:
1048
diff
changeset
|
152 seqlen = getlistsize(seq); |
|
d2af6bdcb6d0
* config.c: Added audioop to lists.
Guido van Rossum <guido@python.org>
parents:
1048
diff
changeset
|
153 } |
|
d2af6bdcb6d0
* config.c: Added audioop to lists.
Guido van Rossum <guido@python.org>
parents:
1048
diff
changeset
|
154 else if (is_tupleobject(seq)) { |
|
d2af6bdcb6d0
* config.c: Added audioop to lists.
Guido van Rossum <guido@python.org>
parents:
1048
diff
changeset
|
155 getitem = gettupleitem; |
|
d2af6bdcb6d0
* config.c: Added audioop to lists.
Guido van Rossum <guido@python.org>
parents:
1048
diff
changeset
|
156 seqlen = gettuplesize(seq); |
|
d2af6bdcb6d0
* config.c: Added audioop to lists.
Guido van Rossum <guido@python.org>
parents:
1048
diff
changeset
|
157 } |
|
d2af6bdcb6d0
* config.c: Added audioop to lists.
Guido van Rossum <guido@python.org>
parents:
1048
diff
changeset
|
158 else { |
|
d2af6bdcb6d0
* config.c: Added audioop to lists.
Guido van Rossum <guido@python.org>
parents:
1048
diff
changeset
|
159 err_setstr(TypeError, "first argument must be list/tuple"); |
|
d2af6bdcb6d0
* config.c: Added audioop to lists.
Guido van Rossum <guido@python.org>
parents:
1048
diff
changeset
|
160 return NULL; |
|
d2af6bdcb6d0
* config.c: Added audioop to lists.
Guido van Rossum <guido@python.org>
parents:
1048
diff
changeset
|
161 } |
|
d2af6bdcb6d0
* config.c: Added audioop to lists.
Guido van Rossum <guido@python.org>
parents:
1048
diff
changeset
|
162 reslen = 0; |
|
d2af6bdcb6d0
* config.c: Added audioop to lists.
Guido van Rossum <guido@python.org>
parents:
1048
diff
changeset
|
163 for (i = 0; i < seqlen; i++) { |
|
d2af6bdcb6d0
* config.c: Added audioop to lists.
Guido van Rossum <guido@python.org>
parents:
1048
diff
changeset
|
164 item = getitem(seq, i); |
|
d2af6bdcb6d0
* config.c: Added audioop to lists.
Guido van Rossum <guido@python.org>
parents:
1048
diff
changeset
|
165 if (!is_stringobject(item)) { |
|
d2af6bdcb6d0
* config.c: Added audioop to lists.
Guido van Rossum <guido@python.org>
parents:
1048
diff
changeset
|
166 err_setstr(TypeError, |
|
d2af6bdcb6d0
* config.c: Added audioop to lists.
Guido van Rossum <guido@python.org>
parents:
1048
diff
changeset
|
167 "first argument must be list/tuple of strings"); |
|
d2af6bdcb6d0
* config.c: Added audioop to lists.
Guido van Rossum <guido@python.org>
parents:
1048
diff
changeset
|
168 return NULL; |
|
d2af6bdcb6d0
* config.c: Added audioop to lists.
Guido van Rossum <guido@python.org>
parents:
1048
diff
changeset
|
169 } |
|
d2af6bdcb6d0
* config.c: Added audioop to lists.
Guido van Rossum <guido@python.org>
parents:
1048
diff
changeset
|
170 if (i > 0) |
|
d2af6bdcb6d0
* config.c: Added audioop to lists.
Guido van Rossum <guido@python.org>
parents:
1048
diff
changeset
|
171 reslen = reslen + seplen; |
|
d2af6bdcb6d0
* config.c: Added audioop to lists.
Guido van Rossum <guido@python.org>
parents:
1048
diff
changeset
|
172 reslen = reslen + getstringsize(item); |
|
d2af6bdcb6d0
* config.c: Added audioop to lists.
Guido van Rossum <guido@python.org>
parents:
1048
diff
changeset
|
173 } |
|
d2af6bdcb6d0
* config.c: Added audioop to lists.
Guido van Rossum <guido@python.org>
parents:
1048
diff
changeset
|
174 if (seqlen == 1) { |
|
d2af6bdcb6d0
* config.c: Added audioop to lists.
Guido van Rossum <guido@python.org>
parents:
1048
diff
changeset
|
175 /* Optimization if there's only one item */ |
|
d2af6bdcb6d0
* config.c: Added audioop to lists.
Guido van Rossum <guido@python.org>
parents:
1048
diff
changeset
|
176 item = getitem(seq, 0); |
|
d2af6bdcb6d0
* config.c: Added audioop to lists.
Guido van Rossum <guido@python.org>
parents:
1048
diff
changeset
|
177 INCREF(item); |
|
d2af6bdcb6d0
* config.c: Added audioop to lists.
Guido van Rossum <guido@python.org>
parents:
1048
diff
changeset
|
178 return item; |
|
d2af6bdcb6d0
* config.c: Added audioop to lists.
Guido van Rossum <guido@python.org>
parents:
1048
diff
changeset
|
179 } |
|
d2af6bdcb6d0
* config.c: Added audioop to lists.
Guido van Rossum <guido@python.org>
parents:
1048
diff
changeset
|
180 res = newsizedstringobject((char *)NULL, reslen); |
|
d2af6bdcb6d0
* config.c: Added audioop to lists.
Guido van Rossum <guido@python.org>
parents:
1048
diff
changeset
|
181 if (res == NULL) |
|
d2af6bdcb6d0
* config.c: Added audioop to lists.
Guido van Rossum <guido@python.org>
parents:
1048
diff
changeset
|
182 return NULL; |
|
d2af6bdcb6d0
* config.c: Added audioop to lists.
Guido van Rossum <guido@python.org>
parents:
1048
diff
changeset
|
183 p = getstringvalue(res); |
|
d2af6bdcb6d0
* config.c: Added audioop to lists.
Guido van Rossum <guido@python.org>
parents:
1048
diff
changeset
|
184 for (i = 0; i < seqlen; i++) { |
|
d2af6bdcb6d0
* config.c: Added audioop to lists.
Guido van Rossum <guido@python.org>
parents:
1048
diff
changeset
|
185 item = getitem(seq, i); |
|
d2af6bdcb6d0
* config.c: Added audioop to lists.
Guido van Rossum <guido@python.org>
parents:
1048
diff
changeset
|
186 if (i > 0) { |
|
d2af6bdcb6d0
* config.c: Added audioop to lists.
Guido van Rossum <guido@python.org>
parents:
1048
diff
changeset
|
187 memcpy(p, sep, seplen); |
|
d2af6bdcb6d0
* config.c: Added audioop to lists.
Guido van Rossum <guido@python.org>
parents:
1048
diff
changeset
|
188 p += seplen; |
|
d2af6bdcb6d0
* config.c: Added audioop to lists.
Guido van Rossum <guido@python.org>
parents:
1048
diff
changeset
|
189 } |
|
d2af6bdcb6d0
* config.c: Added audioop to lists.
Guido van Rossum <guido@python.org>
parents:
1048
diff
changeset
|
190 itemlen = getstringsize(item); |
|
d2af6bdcb6d0
* config.c: Added audioop to lists.
Guido van Rossum <guido@python.org>
parents:
1048
diff
changeset
|
191 memcpy(p, getstringvalue(item), itemlen); |
|
d2af6bdcb6d0
* config.c: Added audioop to lists.
Guido van Rossum <guido@python.org>
parents:
1048
diff
changeset
|
192 p += itemlen; |
|
d2af6bdcb6d0
* config.c: Added audioop to lists.
Guido van Rossum <guido@python.org>
parents:
1048
diff
changeset
|
193 } |
|
d2af6bdcb6d0
* config.c: Added audioop to lists.
Guido van Rossum <guido@python.org>
parents:
1048
diff
changeset
|
194 if (p != getstringvalue(res) + reslen) { |
|
d2af6bdcb6d0
* config.c: Added audioop to lists.
Guido van Rossum <guido@python.org>
parents:
1048
diff
changeset
|
195 err_setstr(SystemError, "strop.joinfields: assertion failed"); |
|
d2af6bdcb6d0
* config.c: Added audioop to lists.
Guido van Rossum <guido@python.org>
parents:
1048
diff
changeset
|
196 return NULL; |
|
d2af6bdcb6d0
* config.c: Added audioop to lists.
Guido van Rossum <guido@python.org>
parents:
1048
diff
changeset
|
197 } |
|
d2af6bdcb6d0
* config.c: Added audioop to lists.
Guido van Rossum <guido@python.org>
parents:
1048
diff
changeset
|
198 return res; |
|
d2af6bdcb6d0
* config.c: Added audioop to lists.
Guido van Rossum <guido@python.org>
parents:
1048
diff
changeset
|
199 } |
|
d2af6bdcb6d0
* config.c: Added audioop to lists.
Guido van Rossum <guido@python.org>
parents:
1048
diff
changeset
|
200 |
|
d2af6bdcb6d0
* config.c: Added audioop to lists.
Guido van Rossum <guido@python.org>
parents:
1048
diff
changeset
|
201 |
|
d2af6bdcb6d0
* config.c: Added audioop to lists.
Guido van Rossum <guido@python.org>
parents:
1048
diff
changeset
|
202 static object * |
|
1787
cb84dd51c2aa
* Modules/stropmodule.c: implement find/rfind instead of
Guido van Rossum <guido@python.org>
parents:
1760
diff
changeset
|
203 strop_find(self, args) |
|
1012
806689b93558
Re-implement some operations from string.py in C, for speed.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
204 object *self; /* Not used */ |
|
806689b93558
Re-implement some operations from string.py in C, for speed.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
205 object *args; |
|
806689b93558
Re-implement some operations from string.py in C, for speed.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
206 { |
|
806689b93558
Re-implement some operations from string.py in C, for speed.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
207 char *s, *sub; |
|
806689b93558
Re-implement some operations from string.py in C, for speed.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
208 int len, n, i; |
|
806689b93558
Re-implement some operations from string.py in C, for speed.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
209 |
|
806689b93558
Re-implement some operations from string.py in C, for speed.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
210 if (getargs(args, "(s#s#i)", &s, &len, &sub, &n, &i)) { |
|
1367
ee4a2f893254
Added rindex(). index() and rindex() interpret negative start index
Guido van Rossum <guido@python.org>
parents:
1356
diff
changeset
|
211 if (i < 0) |
|
ee4a2f893254
Added rindex(). index() and rindex() interpret negative start index
Guido van Rossum <guido@python.org>
parents:
1356
diff
changeset
|
212 i += len; |
|
1888
be956b1efb97
* various modules: #include "Python.h" and remove most remporary
Guido van Rossum <guido@python.org>
parents:
1787
diff
changeset
|
213 if (i < 0) |
|
be956b1efb97
* various modules: #include "Python.h" and remove most remporary
Guido van Rossum <guido@python.org>
parents:
1787
diff
changeset
|
214 i = 0; |
|
1012
806689b93558
Re-implement some operations from string.py in C, for speed.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
215 } |
|
806689b93558
Re-implement some operations from string.py in C, for speed.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
216 else { |
|
806689b93558
Re-implement some operations from string.py in C, for speed.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
217 err_clear(); |
|
806689b93558
Re-implement some operations from string.py in C, for speed.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
218 if (!getargs(args, "(s#s#)", &s, &len, &sub, &n)) |
|
806689b93558
Re-implement some operations from string.py in C, for speed.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
219 return NULL; |
|
806689b93558
Re-implement some operations from string.py in C, for speed.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
220 i = 0; |
|
806689b93558
Re-implement some operations from string.py in C, for speed.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
221 } |
|
806689b93558
Re-implement some operations from string.py in C, for speed.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
222 |
|
806689b93558
Re-implement some operations from string.py in C, for speed.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
223 if (n == 0) |
|
806689b93558
Re-implement some operations from string.py in C, for speed.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
224 return newintobject((long)i); |
|
806689b93558
Re-implement some operations from string.py in C, for speed.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
225 |
|
806689b93558
Re-implement some operations from string.py in C, for speed.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
226 len -= n; |
|
1367
ee4a2f893254
Added rindex(). index() and rindex() interpret negative start index
Guido van Rossum <guido@python.org>
parents:
1356
diff
changeset
|
227 for (; i <= len; ++i) |
|
ee4a2f893254
Added rindex(). index() and rindex() interpret negative start index
Guido van Rossum <guido@python.org>
parents:
1356
diff
changeset
|
228 if (s[i] == sub[0] && |
|
ee4a2f893254
Added rindex(). index() and rindex() interpret negative start index
Guido van Rossum <guido@python.org>
parents:
1356
diff
changeset
|
229 (n == 1 || strncmp(&s[i+1], &sub[1], n-1) == 0)) |
|
ee4a2f893254
Added rindex(). index() and rindex() interpret negative start index
Guido van Rossum <guido@python.org>
parents:
1356
diff
changeset
|
230 return newintobject((long)i); |
|
ee4a2f893254
Added rindex(). index() and rindex() interpret negative start index
Guido van Rossum <guido@python.org>
parents:
1356
diff
changeset
|
231 |
|
1787
cb84dd51c2aa
* Modules/stropmodule.c: implement find/rfind instead of
Guido van Rossum <guido@python.org>
parents:
1760
diff
changeset
|
232 return newintobject(-1L); |
|
1367
ee4a2f893254
Added rindex(). index() and rindex() interpret negative start index
Guido van Rossum <guido@python.org>
parents:
1356
diff
changeset
|
233 } |
|
ee4a2f893254
Added rindex(). index() and rindex() interpret negative start index
Guido van Rossum <guido@python.org>
parents:
1356
diff
changeset
|
234 |
|
ee4a2f893254
Added rindex(). index() and rindex() interpret negative start index
Guido van Rossum <guido@python.org>
parents:
1356
diff
changeset
|
235 |
|
ee4a2f893254
Added rindex(). index() and rindex() interpret negative start index
Guido van Rossum <guido@python.org>
parents:
1356
diff
changeset
|
236 static object * |
|
1787
cb84dd51c2aa
* Modules/stropmodule.c: implement find/rfind instead of
Guido van Rossum <guido@python.org>
parents:
1760
diff
changeset
|
237 strop_rfind(self, args) |
|
1367
ee4a2f893254
Added rindex(). index() and rindex() interpret negative start index
Guido van Rossum <guido@python.org>
parents:
1356
diff
changeset
|
238 object *self; /* Not used */ |
|
ee4a2f893254
Added rindex(). index() and rindex() interpret negative start index
Guido van Rossum <guido@python.org>
parents:
1356
diff
changeset
|
239 object *args; |
|
ee4a2f893254
Added rindex(). index() and rindex() interpret negative start index
Guido van Rossum <guido@python.org>
parents:
1356
diff
changeset
|
240 { |
|
ee4a2f893254
Added rindex(). index() and rindex() interpret negative start index
Guido van Rossum <guido@python.org>
parents:
1356
diff
changeset
|
241 char *s, *sub; |
|
1746
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1394
diff
changeset
|
242 int len, n, i, j; |
|
1367
ee4a2f893254
Added rindex(). index() and rindex() interpret negative start index
Guido van Rossum <guido@python.org>
parents:
1356
diff
changeset
|
243 |
|
ee4a2f893254
Added rindex(). index() and rindex() interpret negative start index
Guido van Rossum <guido@python.org>
parents:
1356
diff
changeset
|
244 if (getargs(args, "(s#s#i)", &s, &len, &sub, &n, &i)) { |
|
ee4a2f893254
Added rindex(). index() and rindex() interpret negative start index
Guido van Rossum <guido@python.org>
parents:
1356
diff
changeset
|
245 if (i < 0) |
|
ee4a2f893254
Added rindex(). index() and rindex() interpret negative start index
Guido van Rossum <guido@python.org>
parents:
1356
diff
changeset
|
246 i += len; |
|
1888
be956b1efb97
* various modules: #include "Python.h" and remove most remporary
Guido van Rossum <guido@python.org>
parents:
1787
diff
changeset
|
247 if (i < 0) |
|
be956b1efb97
* various modules: #include "Python.h" and remove most remporary
Guido van Rossum <guido@python.org>
parents:
1787
diff
changeset
|
248 i = 0; |
|
1012
806689b93558
Re-implement some operations from string.py in C, for speed.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
249 } |
|
1367
ee4a2f893254
Added rindex(). index() and rindex() interpret negative start index
Guido van Rossum <guido@python.org>
parents:
1356
diff
changeset
|
250 else { |
|
ee4a2f893254
Added rindex(). index() and rindex() interpret negative start index
Guido van Rossum <guido@python.org>
parents:
1356
diff
changeset
|
251 err_clear(); |
|
ee4a2f893254
Added rindex(). index() and rindex() interpret negative start index
Guido van Rossum <guido@python.org>
parents:
1356
diff
changeset
|
252 if (!getargs(args, "(s#s#)", &s, &len, &sub, &n)) |
|
ee4a2f893254
Added rindex(). index() and rindex() interpret negative start index
Guido van Rossum <guido@python.org>
parents:
1356
diff
changeset
|
253 return NULL; |
|
1746
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1394
diff
changeset
|
254 i = 0; |
|
1367
ee4a2f893254
Added rindex(). index() and rindex() interpret negative start index
Guido van Rossum <guido@python.org>
parents:
1356
diff
changeset
|
255 } |
|
ee4a2f893254
Added rindex(). index() and rindex() interpret negative start index
Guido van Rossum <guido@python.org>
parents:
1356
diff
changeset
|
256 |
|
ee4a2f893254
Added rindex(). index() and rindex() interpret negative start index
Guido van Rossum <guido@python.org>
parents:
1356
diff
changeset
|
257 if (n == 0) |
|
1760
48e6b319f3e4
* Modules/{Setup.in,Makefile.pre.in}: renamed some modules to
Guido van Rossum <guido@python.org>
parents:
1746
diff
changeset
|
258 return newintobject((long)len); |
|
1367
ee4a2f893254
Added rindex(). index() and rindex() interpret negative start index
Guido van Rossum <guido@python.org>
parents:
1356
diff
changeset
|
259 |
|
1746
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1394
diff
changeset
|
260 for (j = len-n; j >= i; --j) |
|
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1394
diff
changeset
|
261 if (s[j] == sub[0] && |
|
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1394
diff
changeset
|
262 (n == 1 || strncmp(&s[j+1], &sub[1], n-1) == 0)) |
|
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1394
diff
changeset
|
263 return newintobject((long)j); |
|
1012
806689b93558
Re-implement some operations from string.py in C, for speed.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
264 |
|
1787
cb84dd51c2aa
* Modules/stropmodule.c: implement find/rfind instead of
Guido van Rossum <guido@python.org>
parents:
1760
diff
changeset
|
265 return newintobject(-1L); |
|
1012
806689b93558
Re-implement some operations from string.py in C, for speed.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
266 } |
|
806689b93558
Re-implement some operations from string.py in C, for speed.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
267 |
|
806689b93558
Re-implement some operations from string.py in C, for speed.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
268 |
|
806689b93558
Re-implement some operations from string.py in C, for speed.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
269 static object * |
|
806689b93558
Re-implement some operations from string.py in C, for speed.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
270 strop_strip(self, args) |
|
806689b93558
Re-implement some operations from string.py in C, for speed.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
271 object *self; /* Not used */ |
|
806689b93558
Re-implement some operations from string.py in C, for speed.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
272 object *args; |
|
806689b93558
Re-implement some operations from string.py in C, for speed.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
273 { |
|
806689b93558
Re-implement some operations from string.py in C, for speed.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
274 char *s; |
|
806689b93558
Re-implement some operations from string.py in C, for speed.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
275 int len, i, j; |
|
806689b93558
Re-implement some operations from string.py in C, for speed.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
276 |
|
806689b93558
Re-implement some operations from string.py in C, for speed.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
277 if (!getargs(args, "s#", &s, &len)) |
|
806689b93558
Re-implement some operations from string.py in C, for speed.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
278 return NULL; |
|
806689b93558
Re-implement some operations from string.py in C, for speed.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
279 |
|
806689b93558
Re-implement some operations from string.py in C, for speed.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
280 i = 0; |
| 2310 | 281 while (i < len && isspace(Py_CHARMASK(s[i]))) { |
|
1012
806689b93558
Re-implement some operations from string.py in C, for speed.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
282 i++; |
|
806689b93558
Re-implement some operations from string.py in C, for speed.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
283 } |
|
806689b93558
Re-implement some operations from string.py in C, for speed.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
284 |
|
806689b93558
Re-implement some operations from string.py in C, for speed.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
285 j = len; |
|
806689b93558
Re-implement some operations from string.py in C, for speed.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
286 do { |
|
806689b93558
Re-implement some operations from string.py in C, for speed.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
287 j--; |
|
2335
e11e6b358531
fix stupid bug in strip and split
Guido van Rossum <guido@python.org>
parents:
2310
diff
changeset
|
288 } while (j >= i && isspace(Py_CHARMASK(s[j]))); |
|
1012
806689b93558
Re-implement some operations from string.py in C, for speed.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
289 j++; |
|
806689b93558
Re-implement some operations from string.py in C, for speed.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
290 |
|
806689b93558
Re-implement some operations from string.py in C, for speed.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
291 if (i == 0 && j == len) { |
|
806689b93558
Re-implement some operations from string.py in C, for speed.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
292 INCREF(args); |
|
806689b93558
Re-implement some operations from string.py in C, for speed.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
293 return args; |
|
806689b93558
Re-implement some operations from string.py in C, for speed.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
294 } |
|
806689b93558
Re-implement some operations from string.py in C, for speed.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
295 else |
|
806689b93558
Re-implement some operations from string.py in C, for speed.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
296 return newsizedstringobject(s+i, j-i); |
|
806689b93558
Re-implement some operations from string.py in C, for speed.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
297 } |
|
806689b93558
Re-implement some operations from string.py in C, for speed.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
298 |
|
806689b93558
Re-implement some operations from string.py in C, for speed.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
299 |
|
1048
c1ebfde341a3
Makefile uses $> more often; cgen supports filename argument; added
Guido van Rossum <guido@python.org>
parents:
1012
diff
changeset
|
300 static object * |
|
c1ebfde341a3
Makefile uses $> more often; cgen supports filename argument; added
Guido van Rossum <guido@python.org>
parents:
1012
diff
changeset
|
301 strop_lower(self, args) |
|
c1ebfde341a3
Makefile uses $> more often; cgen supports filename argument; added
Guido van Rossum <guido@python.org>
parents:
1012
diff
changeset
|
302 object *self; /* Not used */ |
|
c1ebfde341a3
Makefile uses $> more often; cgen supports filename argument; added
Guido van Rossum <guido@python.org>
parents:
1012
diff
changeset
|
303 object *args; |
|
c1ebfde341a3
Makefile uses $> more often; cgen supports filename argument; added
Guido van Rossum <guido@python.org>
parents:
1012
diff
changeset
|
304 { |
|
1356
043da19302ef
Several optimizations and speed improvements.
Sjoerd Mullender <sjoerd@acm.org>
parents:
1337
diff
changeset
|
305 char *s, *s_new; |
|
1048
c1ebfde341a3
Makefile uses $> more often; cgen supports filename argument; added
Guido van Rossum <guido@python.org>
parents:
1012
diff
changeset
|
306 int i, n; |
|
c1ebfde341a3
Makefile uses $> more often; cgen supports filename argument; added
Guido van Rossum <guido@python.org>
parents:
1012
diff
changeset
|
307 object *new; |
|
c1ebfde341a3
Makefile uses $> more often; cgen supports filename argument; added
Guido van Rossum <guido@python.org>
parents:
1012
diff
changeset
|
308 int changed; |
|
c1ebfde341a3
Makefile uses $> more often; cgen supports filename argument; added
Guido van Rossum <guido@python.org>
parents:
1012
diff
changeset
|
309 |
|
c1ebfde341a3
Makefile uses $> more often; cgen supports filename argument; added
Guido van Rossum <guido@python.org>
parents:
1012
diff
changeset
|
310 if (!getargs(args, "s#", &s, &n)) |
|
c1ebfde341a3
Makefile uses $> more often; cgen supports filename argument; added
Guido van Rossum <guido@python.org>
parents:
1012
diff
changeset
|
311 return NULL; |
|
1356
043da19302ef
Several optimizations and speed improvements.
Sjoerd Mullender <sjoerd@acm.org>
parents:
1337
diff
changeset
|
312 new = newsizedstringobject(NULL, n); |
|
1048
c1ebfde341a3
Makefile uses $> more often; cgen supports filename argument; added
Guido van Rossum <guido@python.org>
parents:
1012
diff
changeset
|
313 if (new == NULL) |
|
c1ebfde341a3
Makefile uses $> more often; cgen supports filename argument; added
Guido van Rossum <guido@python.org>
parents:
1012
diff
changeset
|
314 return NULL; |
|
1356
043da19302ef
Several optimizations and speed improvements.
Sjoerd Mullender <sjoerd@acm.org>
parents:
1337
diff
changeset
|
315 s_new = getstringvalue(new); |
|
1048
c1ebfde341a3
Makefile uses $> more often; cgen supports filename argument; added
Guido van Rossum <guido@python.org>
parents:
1012
diff
changeset
|
316 changed = 0; |
|
c1ebfde341a3
Makefile uses $> more often; cgen supports filename argument; added
Guido van Rossum <guido@python.org>
parents:
1012
diff
changeset
|
317 for (i = 0; i < n; i++) { |
| 2310 | 318 int c = Py_CHARMASK(*s++); |
|
1048
c1ebfde341a3
Makefile uses $> more often; cgen supports filename argument; added
Guido van Rossum <guido@python.org>
parents:
1012
diff
changeset
|
319 if (isupper(c)) { |
|
c1ebfde341a3
Makefile uses $> more often; cgen supports filename argument; added
Guido van Rossum <guido@python.org>
parents:
1012
diff
changeset
|
320 changed = 1; |
|
1356
043da19302ef
Several optimizations and speed improvements.
Sjoerd Mullender <sjoerd@acm.org>
parents:
1337
diff
changeset
|
321 *s_new = tolower(c); |
|
043da19302ef
Several optimizations and speed improvements.
Sjoerd Mullender <sjoerd@acm.org>
parents:
1337
diff
changeset
|
322 } else |
|
043da19302ef
Several optimizations and speed improvements.
Sjoerd Mullender <sjoerd@acm.org>
parents:
1337
diff
changeset
|
323 *s_new = c; |
|
043da19302ef
Several optimizations and speed improvements.
Sjoerd Mullender <sjoerd@acm.org>
parents:
1337
diff
changeset
|
324 s_new++; |
|
1048
c1ebfde341a3
Makefile uses $> more often; cgen supports filename argument; added
Guido van Rossum <guido@python.org>
parents:
1012
diff
changeset
|
325 } |
|
c1ebfde341a3
Makefile uses $> more often; cgen supports filename argument; added
Guido van Rossum <guido@python.org>
parents:
1012
diff
changeset
|
326 if (!changed) { |
|
c1ebfde341a3
Makefile uses $> more often; cgen supports filename argument; added
Guido van Rossum <guido@python.org>
parents:
1012
diff
changeset
|
327 DECREF(new); |
|
c1ebfde341a3
Makefile uses $> more often; cgen supports filename argument; added
Guido van Rossum <guido@python.org>
parents:
1012
diff
changeset
|
328 INCREF(args); |
|
c1ebfde341a3
Makefile uses $> more often; cgen supports filename argument; added
Guido van Rossum <guido@python.org>
parents:
1012
diff
changeset
|
329 return args; |
|
c1ebfde341a3
Makefile uses $> more often; cgen supports filename argument; added
Guido van Rossum <guido@python.org>
parents:
1012
diff
changeset
|
330 } |
|
c1ebfde341a3
Makefile uses $> more often; cgen supports filename argument; added
Guido van Rossum <guido@python.org>
parents:
1012
diff
changeset
|
331 return new; |
|
c1ebfde341a3
Makefile uses $> more often; cgen supports filename argument; added
Guido van Rossum <guido@python.org>
parents:
1012
diff
changeset
|
332 } |
|
c1ebfde341a3
Makefile uses $> more often; cgen supports filename argument; added
Guido van Rossum <guido@python.org>
parents:
1012
diff
changeset
|
333 |
|
c1ebfde341a3
Makefile uses $> more often; cgen supports filename argument; added
Guido van Rossum <guido@python.org>
parents:
1012
diff
changeset
|
334 |
|
c1ebfde341a3
Makefile uses $> more often; cgen supports filename argument; added
Guido van Rossum <guido@python.org>
parents:
1012
diff
changeset
|
335 static object * |
|
c1ebfde341a3
Makefile uses $> more often; cgen supports filename argument; added
Guido van Rossum <guido@python.org>
parents:
1012
diff
changeset
|
336 strop_upper(self, args) |
|
c1ebfde341a3
Makefile uses $> more often; cgen supports filename argument; added
Guido van Rossum <guido@python.org>
parents:
1012
diff
changeset
|
337 object *self; /* Not used */ |
|
c1ebfde341a3
Makefile uses $> more often; cgen supports filename argument; added
Guido van Rossum <guido@python.org>
parents:
1012
diff
changeset
|
338 object *args; |
|
c1ebfde341a3
Makefile uses $> more often; cgen supports filename argument; added
Guido van Rossum <guido@python.org>
parents:
1012
diff
changeset
|
339 { |
|
1356
043da19302ef
Several optimizations and speed improvements.
Sjoerd Mullender <sjoerd@acm.org>
parents:
1337
diff
changeset
|
340 char *s, *s_new; |
|
1048
c1ebfde341a3
Makefile uses $> more often; cgen supports filename argument; added
Guido van Rossum <guido@python.org>
parents:
1012
diff
changeset
|
341 int i, n; |
|
c1ebfde341a3
Makefile uses $> more often; cgen supports filename argument; added
Guido van Rossum <guido@python.org>
parents:
1012
diff
changeset
|
342 object *new; |
|
c1ebfde341a3
Makefile uses $> more often; cgen supports filename argument; added
Guido van Rossum <guido@python.org>
parents:
1012
diff
changeset
|
343 int changed; |
|
c1ebfde341a3
Makefile uses $> more often; cgen supports filename argument; added
Guido van Rossum <guido@python.org>
parents:
1012
diff
changeset
|
344 |
|
c1ebfde341a3
Makefile uses $> more often; cgen supports filename argument; added
Guido van Rossum <guido@python.org>
parents:
1012
diff
changeset
|
345 if (!getargs(args, "s#", &s, &n)) |
|
c1ebfde341a3
Makefile uses $> more often; cgen supports filename argument; added
Guido van Rossum <guido@python.org>
parents:
1012
diff
changeset
|
346 return NULL; |
|
1356
043da19302ef
Several optimizations and speed improvements.
Sjoerd Mullender <sjoerd@acm.org>
parents:
1337
diff
changeset
|
347 new = newsizedstringobject(NULL, n); |
|
1048
c1ebfde341a3
Makefile uses $> more often; cgen supports filename argument; added
Guido van Rossum <guido@python.org>
parents:
1012
diff
changeset
|
348 if (new == NULL) |
|
c1ebfde341a3
Makefile uses $> more often; cgen supports filename argument; added
Guido van Rossum <guido@python.org>
parents:
1012
diff
changeset
|
349 return NULL; |
|
1356
043da19302ef
Several optimizations and speed improvements.
Sjoerd Mullender <sjoerd@acm.org>
parents:
1337
diff
changeset
|
350 s_new = getstringvalue(new); |
|
1048
c1ebfde341a3
Makefile uses $> more often; cgen supports filename argument; added
Guido van Rossum <guido@python.org>
parents:
1012
diff
changeset
|
351 changed = 0; |
|
c1ebfde341a3
Makefile uses $> more often; cgen supports filename argument; added
Guido van Rossum <guido@python.org>
parents:
1012
diff
changeset
|
352 for (i = 0; i < n; i++) { |
| 2310 | 353 int c = Py_CHARMASK(*s++); |
|
1048
c1ebfde341a3
Makefile uses $> more often; cgen supports filename argument; added
Guido van Rossum <guido@python.org>
parents:
1012
diff
changeset
|
354 if (islower(c)) { |
|
c1ebfde341a3
Makefile uses $> more often; cgen supports filename argument; added
Guido van Rossum <guido@python.org>
parents:
1012
diff
changeset
|
355 changed = 1; |
|
1356
043da19302ef
Several optimizations and speed improvements.
Sjoerd Mullender <sjoerd@acm.org>
parents:
1337
diff
changeset
|
356 *s_new = toupper(c); |
|
043da19302ef
Several optimizations and speed improvements.
Sjoerd Mullender <sjoerd@acm.org>
parents:
1337
diff
changeset
|
357 } else |
|
043da19302ef
Several optimizations and speed improvements.
Sjoerd Mullender <sjoerd@acm.org>
parents:
1337
diff
changeset
|
358 *s_new = c; |
|
043da19302ef
Several optimizations and speed improvements.
Sjoerd Mullender <sjoerd@acm.org>
parents:
1337
diff
changeset
|
359 s_new++; |
|
1048
c1ebfde341a3
Makefile uses $> more often; cgen supports filename argument; added
Guido van Rossum <guido@python.org>
parents:
1012
diff
changeset
|
360 } |
|
c1ebfde341a3
Makefile uses $> more often; cgen supports filename argument; added
Guido van Rossum <guido@python.org>
parents:
1012
diff
changeset
|
361 if (!changed) { |
|
c1ebfde341a3
Makefile uses $> more often; cgen supports filename argument; added
Guido van Rossum <guido@python.org>
parents:
1012
diff
changeset
|
362 DECREF(new); |
|
c1ebfde341a3
Makefile uses $> more often; cgen supports filename argument; added
Guido van Rossum <guido@python.org>
parents:
1012
diff
changeset
|
363 INCREF(args); |
|
c1ebfde341a3
Makefile uses $> more often; cgen supports filename argument; added
Guido van Rossum <guido@python.org>
parents:
1012
diff
changeset
|
364 return args; |
|
c1ebfde341a3
Makefile uses $> more often; cgen supports filename argument; added
Guido van Rossum <guido@python.org>
parents:
1012
diff
changeset
|
365 } |
|
c1ebfde341a3
Makefile uses $> more often; cgen supports filename argument; added
Guido van Rossum <guido@python.org>
parents:
1012
diff
changeset
|
366 return new; |
|
c1ebfde341a3
Makefile uses $> more often; cgen supports filename argument; added
Guido van Rossum <guido@python.org>
parents:
1012
diff
changeset
|
367 } |
|
c1ebfde341a3
Makefile uses $> more often; cgen supports filename argument; added
Guido van Rossum <guido@python.org>
parents:
1012
diff
changeset
|
368 |
|
c1ebfde341a3
Makefile uses $> more often; cgen supports filename argument; added
Guido van Rossum <guido@python.org>
parents:
1012
diff
changeset
|
369 |
|
c1ebfde341a3
Makefile uses $> more often; cgen supports filename argument; added
Guido van Rossum <guido@python.org>
parents:
1012
diff
changeset
|
370 static object * |
| 3676 | 371 strop_capitalize(self, args) |
| 372 object *self; /* Not used */ | |
| 373 object *args; | |
| 374 { | |
| 375 char *s, *s_new; | |
| 376 int i, n; | |
| 377 object *new; | |
| 378 int changed; | |
| 379 | |
| 380 if (!getargs(args, "s#", &s, &n)) | |
| 381 return NULL; | |
| 382 new = newsizedstringobject(NULL, n); | |
| 383 if (new == NULL) | |
| 384 return NULL; | |
| 385 s_new = getstringvalue(new); | |
| 386 changed = 0; | |
|
3679
b8980735d03b
Test for zero-length argument in capitalize().
Guido van Rossum <guido@python.org>
parents:
3676
diff
changeset
|
387 if (0 < n) { |
| 3676 | 388 int c = Py_CHARMASK(*s++); |
| 389 if (islower(c)) { | |
| 390 changed = 1; | |
| 391 *s_new = toupper(c); | |
| 392 } else | |
| 393 *s_new = c; | |
| 394 s_new++; | |
| 395 } | |
| 396 for (i = 1; i < n; i++) { | |
| 397 int c = Py_CHARMASK(*s++); | |
| 398 if (isupper(c)) { | |
| 399 changed = 1; | |
| 400 *s_new = tolower(c); | |
| 401 } else | |
| 402 *s_new = c; | |
| 403 s_new++; | |
| 404 } | |
| 405 if (!changed) { | |
| 406 DECREF(new); | |
| 407 INCREF(args); | |
| 408 return args; | |
| 409 } | |
| 410 return new; | |
| 411 } | |
| 412 | |
| 413 | |
| 414 static object * | |
|
1048
c1ebfde341a3
Makefile uses $> more often; cgen supports filename argument; added
Guido van Rossum <guido@python.org>
parents:
1012
diff
changeset
|
415 strop_swapcase(self, args) |
|
c1ebfde341a3
Makefile uses $> more often; cgen supports filename argument; added
Guido van Rossum <guido@python.org>
parents:
1012
diff
changeset
|
416 object *self; /* Not used */ |
|
c1ebfde341a3
Makefile uses $> more often; cgen supports filename argument; added
Guido van Rossum <guido@python.org>
parents:
1012
diff
changeset
|
417 object *args; |
|
c1ebfde341a3
Makefile uses $> more often; cgen supports filename argument; added
Guido van Rossum <guido@python.org>
parents:
1012
diff
changeset
|
418 { |
|
1356
043da19302ef
Several optimizations and speed improvements.
Sjoerd Mullender <sjoerd@acm.org>
parents:
1337
diff
changeset
|
419 char *s, *s_new; |
|
1048
c1ebfde341a3
Makefile uses $> more often; cgen supports filename argument; added
Guido van Rossum <guido@python.org>
parents:
1012
diff
changeset
|
420 int i, n; |
|
c1ebfde341a3
Makefile uses $> more often; cgen supports filename argument; added
Guido van Rossum <guido@python.org>
parents:
1012
diff
changeset
|
421 object *new; |
|
c1ebfde341a3
Makefile uses $> more often; cgen supports filename argument; added
Guido van Rossum <guido@python.org>
parents:
1012
diff
changeset
|
422 int changed; |
|
c1ebfde341a3
Makefile uses $> more often; cgen supports filename argument; added
Guido van Rossum <guido@python.org>
parents:
1012
diff
changeset
|
423 |
|
c1ebfde341a3
Makefile uses $> more often; cgen supports filename argument; added
Guido van Rossum <guido@python.org>
parents:
1012
diff
changeset
|
424 if (!getargs(args, "s#", &s, &n)) |
|
c1ebfde341a3
Makefile uses $> more often; cgen supports filename argument; added
Guido van Rossum <guido@python.org>
parents:
1012
diff
changeset
|
425 return NULL; |
|
1356
043da19302ef
Several optimizations and speed improvements.
Sjoerd Mullender <sjoerd@acm.org>
parents:
1337
diff
changeset
|
426 new = newsizedstringobject(NULL, n); |
|
1048
c1ebfde341a3
Makefile uses $> more often; cgen supports filename argument; added
Guido van Rossum <guido@python.org>
parents:
1012
diff
changeset
|
427 if (new == NULL) |
|
c1ebfde341a3
Makefile uses $> more often; cgen supports filename argument; added
Guido van Rossum <guido@python.org>
parents:
1012
diff
changeset
|
428 return NULL; |
|
1356
043da19302ef
Several optimizations and speed improvements.
Sjoerd Mullender <sjoerd@acm.org>
parents:
1337
diff
changeset
|
429 s_new = getstringvalue(new); |
|
1048
c1ebfde341a3
Makefile uses $> more often; cgen supports filename argument; added
Guido van Rossum <guido@python.org>
parents:
1012
diff
changeset
|
430 changed = 0; |
|
c1ebfde341a3
Makefile uses $> more often; cgen supports filename argument; added
Guido van Rossum <guido@python.org>
parents:
1012
diff
changeset
|
431 for (i = 0; i < n; i++) { |
| 2310 | 432 int c = Py_CHARMASK(*s++); |
|
1048
c1ebfde341a3
Makefile uses $> more often; cgen supports filename argument; added
Guido van Rossum <guido@python.org>
parents:
1012
diff
changeset
|
433 if (islower(c)) { |
|
c1ebfde341a3
Makefile uses $> more often; cgen supports filename argument; added
Guido van Rossum <guido@python.org>
parents:
1012
diff
changeset
|
434 changed = 1; |
|
1356
043da19302ef
Several optimizations and speed improvements.
Sjoerd Mullender <sjoerd@acm.org>
parents:
1337
diff
changeset
|
435 *s_new = toupper(c); |
|
1048
c1ebfde341a3
Makefile uses $> more often; cgen supports filename argument; added
Guido van Rossum <guido@python.org>
parents:
1012
diff
changeset
|
436 } |
|
c1ebfde341a3
Makefile uses $> more often; cgen supports filename argument; added
Guido van Rossum <guido@python.org>
parents:
1012
diff
changeset
|
437 else if (isupper(c)) { |
|
c1ebfde341a3
Makefile uses $> more often; cgen supports filename argument; added
Guido van Rossum <guido@python.org>
parents:
1012
diff
changeset
|
438 changed = 1; |
|
1356
043da19302ef
Several optimizations and speed improvements.
Sjoerd Mullender <sjoerd@acm.org>
parents:
1337
diff
changeset
|
439 *s_new = tolower(c); |
|
1048
c1ebfde341a3
Makefile uses $> more often; cgen supports filename argument; added
Guido van Rossum <guido@python.org>
parents:
1012
diff
changeset
|
440 } |
|
1356
043da19302ef
Several optimizations and speed improvements.
Sjoerd Mullender <sjoerd@acm.org>
parents:
1337
diff
changeset
|
441 else |
|
043da19302ef
Several optimizations and speed improvements.
Sjoerd Mullender <sjoerd@acm.org>
parents:
1337
diff
changeset
|
442 *s_new = c; |
|
043da19302ef
Several optimizations and speed improvements.
Sjoerd Mullender <sjoerd@acm.org>
parents:
1337
diff
changeset
|
443 s_new++; |
|
1048
c1ebfde341a3
Makefile uses $> more often; cgen supports filename argument; added
Guido van Rossum <guido@python.org>
parents:
1012
diff
changeset
|
444 } |
|
c1ebfde341a3
Makefile uses $> more often; cgen supports filename argument; added
Guido van Rossum <guido@python.org>
parents:
1012
diff
changeset
|
445 if (!changed) { |
|
c1ebfde341a3
Makefile uses $> more often; cgen supports filename argument; added
Guido van Rossum <guido@python.org>
parents:
1012
diff
changeset
|
446 DECREF(new); |
|
c1ebfde341a3
Makefile uses $> more often; cgen supports filename argument; added
Guido van Rossum <guido@python.org>
parents:
1012
diff
changeset
|
447 INCREF(args); |
|
c1ebfde341a3
Makefile uses $> more often; cgen supports filename argument; added
Guido van Rossum <guido@python.org>
parents:
1012
diff
changeset
|
448 return args; |
|
c1ebfde341a3
Makefile uses $> more often; cgen supports filename argument; added
Guido van Rossum <guido@python.org>
parents:
1012
diff
changeset
|
449 } |
|
c1ebfde341a3
Makefile uses $> more often; cgen supports filename argument; added
Guido van Rossum <guido@python.org>
parents:
1012
diff
changeset
|
450 return new; |
|
c1ebfde341a3
Makefile uses $> more often; cgen supports filename argument; added
Guido van Rossum <guido@python.org>
parents:
1012
diff
changeset
|
451 } |
|
c1ebfde341a3
Makefile uses $> more often; cgen supports filename argument; added
Guido van Rossum <guido@python.org>
parents:
1012
diff
changeset
|
452 |
|
c1ebfde341a3
Makefile uses $> more often; cgen supports filename argument; added
Guido van Rossum <guido@python.org>
parents:
1012
diff
changeset
|
453 |
|
1746
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1394
diff
changeset
|
454 static object * |
|
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1394
diff
changeset
|
455 strop_atoi(self, args) |
|
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1394
diff
changeset
|
456 object *self; /* Not used */ |
|
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1394
diff
changeset
|
457 object *args; |
|
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1394
diff
changeset
|
458 { |
|
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1394
diff
changeset
|
459 extern long mystrtol PROTO((const char *, char **, int)); |
|
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1394
diff
changeset
|
460 extern unsigned long mystrtoul PROTO((const char *, char **, int)); |
|
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1394
diff
changeset
|
461 char *s, *end; |
|
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1394
diff
changeset
|
462 int base = 10; |
|
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1394
diff
changeset
|
463 long x; |
|
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1394
diff
changeset
|
464 |
|
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1394
diff
changeset
|
465 if (args != NULL && is_tupleobject(args)) { |
|
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1394
diff
changeset
|
466 if (!getargs(args, "(si)", &s, &base)) |
|
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1394
diff
changeset
|
467 return NULL; |
|
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1394
diff
changeset
|
468 if (base != 0 && base < 2 || base > 36) { |
|
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1394
diff
changeset
|
469 err_setstr(ValueError, "invalid base for atoi()"); |
|
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1394
diff
changeset
|
470 return NULL; |
|
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1394
diff
changeset
|
471 } |
|
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1394
diff
changeset
|
472 } |
|
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1394
diff
changeset
|
473 else if (!getargs(args, "s", &s)) |
|
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1394
diff
changeset
|
474 return NULL; |
|
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1394
diff
changeset
|
475 errno = 0; |
|
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1394
diff
changeset
|
476 if (base == 0 && s[0] == '0') |
|
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1394
diff
changeset
|
477 x = (long) mystrtoul(s, &end, base); |
|
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1394
diff
changeset
|
478 else |
|
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1394
diff
changeset
|
479 x = mystrtol(s, &end, base); |
|
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1394
diff
changeset
|
480 if (*end != '\0') { |
|
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1394
diff
changeset
|
481 err_setstr(ValueError, "invalid literal for atoi()"); |
|
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1394
diff
changeset
|
482 return NULL; |
|
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1394
diff
changeset
|
483 } |
|
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1394
diff
changeset
|
484 else if (errno != 0) { |
|
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1394
diff
changeset
|
485 err_setstr(OverflowError, "atoi() literal too large"); |
|
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1394
diff
changeset
|
486 return NULL; |
|
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1394
diff
changeset
|
487 } |
|
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1394
diff
changeset
|
488 return newintobject(x); |
|
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1394
diff
changeset
|
489 } |
|
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1394
diff
changeset
|
490 |
|
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1394
diff
changeset
|
491 |
|
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1394
diff
changeset
|
492 static object * |
|
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1394
diff
changeset
|
493 strop_atol(self, args) |
|
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1394
diff
changeset
|
494 object *self; /* Not used */ |
|
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1394
diff
changeset
|
495 object *args; |
|
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1394
diff
changeset
|
496 { |
|
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1394
diff
changeset
|
497 char *s, *end; |
|
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1394
diff
changeset
|
498 int base = 10; |
|
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1394
diff
changeset
|
499 object *x; |
|
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1394
diff
changeset
|
500 |
|
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1394
diff
changeset
|
501 if (args != NULL && is_tupleobject(args)) { |
|
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1394
diff
changeset
|
502 if (!getargs(args, "(si)", &s, &base)) |
|
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1394
diff
changeset
|
503 return NULL; |
|
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1394
diff
changeset
|
504 if (base != 0 && base < 2 || base > 36) { |
|
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1394
diff
changeset
|
505 err_setstr(ValueError, "invalid base for atol()"); |
|
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1394
diff
changeset
|
506 return NULL; |
|
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1394
diff
changeset
|
507 } |
|
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1394
diff
changeset
|
508 } |
|
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1394
diff
changeset
|
509 else if (!getargs(args, "s", &s)) |
|
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1394
diff
changeset
|
510 return NULL; |
|
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1394
diff
changeset
|
511 x = long_escan(s, &end, base); |
|
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1394
diff
changeset
|
512 if (x == NULL) |
|
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1394
diff
changeset
|
513 return NULL; |
|
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1394
diff
changeset
|
514 if (base == 0 && (*end == 'l' || *end == 'L')) |
|
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1394
diff
changeset
|
515 end++; |
|
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1394
diff
changeset
|
516 if (*end != '\0') { |
|
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1394
diff
changeset
|
517 err_setstr(ValueError, "invalid literal for atol()"); |
|
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1394
diff
changeset
|
518 DECREF(x); |
|
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1394
diff
changeset
|
519 return NULL; |
|
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1394
diff
changeset
|
520 } |
|
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1394
diff
changeset
|
521 return x; |
|
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1394
diff
changeset
|
522 } |
|
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1394
diff
changeset
|
523 |
|
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1394
diff
changeset
|
524 |
|
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1394
diff
changeset
|
525 static object * |
|
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1394
diff
changeset
|
526 strop_atof(self, args) |
|
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1394
diff
changeset
|
527 object *self; /* Not used */ |
|
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1394
diff
changeset
|
528 object *args; |
|
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1394
diff
changeset
|
529 { |
|
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1394
diff
changeset
|
530 extern double strtod PROTO((const char *, char **)); |
|
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1394
diff
changeset
|
531 char *s, *end; |
|
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1394
diff
changeset
|
532 double x; |
|
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1394
diff
changeset
|
533 |
|
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1394
diff
changeset
|
534 if (!getargs(args, "s", &s)) |
|
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1394
diff
changeset
|
535 return NULL; |
|
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1394
diff
changeset
|
536 errno = 0; |
|
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1394
diff
changeset
|
537 x = strtod(s, &end); |
|
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1394
diff
changeset
|
538 if (*end != '\0') { |
|
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1394
diff
changeset
|
539 err_setstr(ValueError, "invalid literal for atof()"); |
|
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1394
diff
changeset
|
540 return NULL; |
|
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1394
diff
changeset
|
541 } |
|
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1394
diff
changeset
|
542 else if (errno != 0) { |
|
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1394
diff
changeset
|
543 err_setstr(OverflowError, "atof() literal too large"); |
|
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1394
diff
changeset
|
544 return NULL; |
|
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1394
diff
changeset
|
545 } |
|
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1394
diff
changeset
|
546 return newfloatobject(x); |
|
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1394
diff
changeset
|
547 } |
|
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1394
diff
changeset
|
548 |
|
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1394
diff
changeset
|
549 |
|
3087
31684c5bb172
added strop.translate(s, table)
Guido van Rossum <guido@python.org>
parents:
2707
diff
changeset
|
550 static object * |
|
31684c5bb172
added strop.translate(s, table)
Guido van Rossum <guido@python.org>
parents:
2707
diff
changeset
|
551 strop_translate(self, args) |
|
31684c5bb172
added strop.translate(s, table)
Guido van Rossum <guido@python.org>
parents:
2707
diff
changeset
|
552 object *self; |
|
31684c5bb172
added strop.translate(s, table)
Guido van Rossum <guido@python.org>
parents:
2707
diff
changeset
|
553 object *args; |
|
31684c5bb172
added strop.translate(s, table)
Guido van Rossum <guido@python.org>
parents:
2707
diff
changeset
|
554 { |
|
31684c5bb172
added strop.translate(s, table)
Guido van Rossum <guido@python.org>
parents:
2707
diff
changeset
|
555 char *input, *table, *output; |
|
31684c5bb172
added strop.translate(s, table)
Guido van Rossum <guido@python.org>
parents:
2707
diff
changeset
|
556 int inlen, tablen; |
|
31684c5bb172
added strop.translate(s, table)
Guido van Rossum <guido@python.org>
parents:
2707
diff
changeset
|
557 object *result; |
|
31684c5bb172
added strop.translate(s, table)
Guido van Rossum <guido@python.org>
parents:
2707
diff
changeset
|
558 int i; |
|
31684c5bb172
added strop.translate(s, table)
Guido van Rossum <guido@python.org>
parents:
2707
diff
changeset
|
559 |
|
31684c5bb172
added strop.translate(s, table)
Guido van Rossum <guido@python.org>
parents:
2707
diff
changeset
|
560 if (!newgetargs(args, "s#s#", &input, &inlen, &table, &tablen)) |
|
31684c5bb172
added strop.translate(s, table)
Guido van Rossum <guido@python.org>
parents:
2707
diff
changeset
|
561 return NULL; |
|
31684c5bb172
added strop.translate(s, table)
Guido van Rossum <guido@python.org>
parents:
2707
diff
changeset
|
562 if (tablen != 256) { |
|
31684c5bb172
added strop.translate(s, table)
Guido van Rossum <guido@python.org>
parents:
2707
diff
changeset
|
563 err_setstr(ValueError, |
|
31684c5bb172
added strop.translate(s, table)
Guido van Rossum <guido@python.org>
parents:
2707
diff
changeset
|
564 "translation table must be 256 characters long"); |
|
31684c5bb172
added strop.translate(s, table)
Guido van Rossum <guido@python.org>
parents:
2707
diff
changeset
|
565 return NULL; |
|
31684c5bb172
added strop.translate(s, table)
Guido van Rossum <guido@python.org>
parents:
2707
diff
changeset
|
566 } |
|
31684c5bb172
added strop.translate(s, table)
Guido van Rossum <guido@python.org>
parents:
2707
diff
changeset
|
567 result = newsizedstringobject((char *)NULL, inlen); |
|
31684c5bb172
added strop.translate(s, table)
Guido van Rossum <guido@python.org>
parents:
2707
diff
changeset
|
568 if (result == NULL) |
|
31684c5bb172
added strop.translate(s, table)
Guido van Rossum <guido@python.org>
parents:
2707
diff
changeset
|
569 return NULL; |
|
31684c5bb172
added strop.translate(s, table)
Guido van Rossum <guido@python.org>
parents:
2707
diff
changeset
|
570 output = getstringvalue(result); |
|
31684c5bb172
added strop.translate(s, table)
Guido van Rossum <guido@python.org>
parents:
2707
diff
changeset
|
571 for (i = 0; i < inlen; i++) { |
|
31684c5bb172
added strop.translate(s, table)
Guido van Rossum <guido@python.org>
parents:
2707
diff
changeset
|
572 int c = Py_CHARMASK(*input++); |
|
31684c5bb172
added strop.translate(s, table)
Guido van Rossum <guido@python.org>
parents:
2707
diff
changeset
|
573 *output++ = table[c]; |
|
31684c5bb172
added strop.translate(s, table)
Guido van Rossum <guido@python.org>
parents:
2707
diff
changeset
|
574 } |
|
31684c5bb172
added strop.translate(s, table)
Guido van Rossum <guido@python.org>
parents:
2707
diff
changeset
|
575 return result; |
|
31684c5bb172
added strop.translate(s, table)
Guido van Rossum <guido@python.org>
parents:
2707
diff
changeset
|
576 } |
|
31684c5bb172
added strop.translate(s, table)
Guido van Rossum <guido@python.org>
parents:
2707
diff
changeset
|
577 |
|
31684c5bb172
added strop.translate(s, table)
Guido van Rossum <guido@python.org>
parents:
2707
diff
changeset
|
578 |
|
1012
806689b93558
Re-implement some operations from string.py in C, for speed.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
579 /* List of functions defined in the module */ |
|
806689b93558
Re-implement some operations from string.py in C, for speed.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
580 |
|
806689b93558
Re-implement some operations from string.py in C, for speed.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
581 static struct methodlist strop_methods[] = { |
|
1746
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1394
diff
changeset
|
582 {"atof", strop_atof}, |
|
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1394
diff
changeset
|
583 {"atoi", strop_atoi}, |
|
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1394
diff
changeset
|
584 {"atol", strop_atol}, |
| 3676 | 585 {"capitalize", strop_capitalize}, |
|
1787
cb84dd51c2aa
* Modules/stropmodule.c: implement find/rfind instead of
Guido van Rossum <guido@python.org>
parents:
1760
diff
changeset
|
586 {"find", strop_find}, |
|
2707
1306e761a623
unified join(fields), split(fields)
Guido van Rossum <guido@python.org>
parents:
2335
diff
changeset
|
587 {"join", strop_joinfields, 1}, |
|
1306e761a623
unified join(fields), split(fields)
Guido van Rossum <guido@python.org>
parents:
2335
diff
changeset
|
588 {"joinfields", strop_joinfields, 1}, |
|
1048
c1ebfde341a3
Makefile uses $> more often; cgen supports filename argument; added
Guido van Rossum <guido@python.org>
parents:
1012
diff
changeset
|
589 {"lower", strop_lower}, |
|
1787
cb84dd51c2aa
* Modules/stropmodule.c: implement find/rfind instead of
Guido van Rossum <guido@python.org>
parents:
1760
diff
changeset
|
590 {"rfind", strop_rfind}, |
|
2707
1306e761a623
unified join(fields), split(fields)
Guido van Rossum <guido@python.org>
parents:
2335
diff
changeset
|
591 {"split", strop_splitfields, 1}, |
|
1306e761a623
unified join(fields), split(fields)
Guido van Rossum <guido@python.org>
parents:
2335
diff
changeset
|
592 {"splitfields", strop_splitfields, 1}, |
|
1012
806689b93558
Re-implement some operations from string.py in C, for speed.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
593 {"strip", strop_strip}, |
|
1048
c1ebfde341a3
Makefile uses $> more often; cgen supports filename argument; added
Guido van Rossum <guido@python.org>
parents:
1012
diff
changeset
|
594 {"swapcase", strop_swapcase}, |
|
3087
31684c5bb172
added strop.translate(s, table)
Guido van Rossum <guido@python.org>
parents:
2707
diff
changeset
|
595 {"translate", strop_translate, 1}, |
|
1048
c1ebfde341a3
Makefile uses $> more often; cgen supports filename argument; added
Guido van Rossum <guido@python.org>
parents:
1012
diff
changeset
|
596 {"upper", strop_upper}, |
|
1012
806689b93558
Re-implement some operations from string.py in C, for speed.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
597 {NULL, NULL} /* sentinel */ |
|
806689b93558
Re-implement some operations from string.py in C, for speed.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
598 }; |
|
806689b93558
Re-implement some operations from string.py in C, for speed.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
599 |
|
806689b93558
Re-implement some operations from string.py in C, for speed.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
600 |
|
806689b93558
Re-implement some operations from string.py in C, for speed.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
601 void |
|
806689b93558
Re-implement some operations from string.py in C, for speed.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
602 initstrop() |
|
806689b93558
Re-implement some operations from string.py in C, for speed.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
603 { |
|
1321
a80677798f84
stropmodule.c: use C isspace(c) to test for whitespace; add
Guido van Rossum <guido@python.org>
parents:
1257
diff
changeset
|
604 object *m, *d, *s; |
|
a80677798f84
stropmodule.c: use C isspace(c) to test for whitespace; add
Guido van Rossum <guido@python.org>
parents:
1257
diff
changeset
|
605 char buf[256]; |
|
a80677798f84
stropmodule.c: use C isspace(c) to test for whitespace; add
Guido van Rossum <guido@python.org>
parents:
1257
diff
changeset
|
606 int c, n; |
|
a80677798f84
stropmodule.c: use C isspace(c) to test for whitespace; add
Guido van Rossum <guido@python.org>
parents:
1257
diff
changeset
|
607 m = initmodule("strop", strop_methods); |
|
a80677798f84
stropmodule.c: use C isspace(c) to test for whitespace; add
Guido van Rossum <guido@python.org>
parents:
1257
diff
changeset
|
608 d = getmoduledict(m); |
|
1322
f3c907efe5d7
* config.c: different default PYTHONPATH for MS-DOS
Guido van Rossum <guido@python.org>
parents:
1321
diff
changeset
|
609 |
|
f3c907efe5d7
* config.c: different default PYTHONPATH for MS-DOS
Guido van Rossum <guido@python.org>
parents:
1321
diff
changeset
|
610 /* Create 'whitespace' object */ |
|
1321
a80677798f84
stropmodule.c: use C isspace(c) to test for whitespace; add
Guido van Rossum <guido@python.org>
parents:
1257
diff
changeset
|
611 n = 0; |
| 2310 | 612 for (c = 0; c < 256; c++) { |
|
1321
a80677798f84
stropmodule.c: use C isspace(c) to test for whitespace; add
Guido van Rossum <guido@python.org>
parents:
1257
diff
changeset
|
613 if (isspace(c)) |
|
a80677798f84
stropmodule.c: use C isspace(c) to test for whitespace; add
Guido van Rossum <guido@python.org>
parents:
1257
diff
changeset
|
614 buf[n++] = c; |
|
a80677798f84
stropmodule.c: use C isspace(c) to test for whitespace; add
Guido van Rossum <guido@python.org>
parents:
1257
diff
changeset
|
615 } |
|
1337
f8f64cbd9fb5
Bug fix: check whether call succeeded *after* the call.
Sjoerd Mullender <sjoerd@acm.org>
parents:
1322
diff
changeset
|
616 s = newsizedstringobject(buf, n); |
|
1322
f3c907efe5d7
* config.c: different default PYTHONPATH for MS-DOS
Guido van Rossum <guido@python.org>
parents:
1321
diff
changeset
|
617 if (s) { |
|
f3c907efe5d7
* config.c: different default PYTHONPATH for MS-DOS
Guido van Rossum <guido@python.org>
parents:
1321
diff
changeset
|
618 dictinsert(d, "whitespace", s); |
|
f3c907efe5d7
* config.c: different default PYTHONPATH for MS-DOS
Guido van Rossum <guido@python.org>
parents:
1321
diff
changeset
|
619 DECREF(s); |
|
f3c907efe5d7
* config.c: different default PYTHONPATH for MS-DOS
Guido van Rossum <guido@python.org>
parents:
1321
diff
changeset
|
620 } |
|
f3c907efe5d7
* config.c: different default PYTHONPATH for MS-DOS
Guido van Rossum <guido@python.org>
parents:
1321
diff
changeset
|
621 /* Create 'lowercase' object */ |
|
f3c907efe5d7
* config.c: different default PYTHONPATH for MS-DOS
Guido van Rossum <guido@python.org>
parents:
1321
diff
changeset
|
622 n = 0; |
| 2310 | 623 for (c = 0; c < 256; c++) { |
|
1322
f3c907efe5d7
* config.c: different default PYTHONPATH for MS-DOS
Guido van Rossum <guido@python.org>
parents:
1321
diff
changeset
|
624 if (islower(c)) |
|
f3c907efe5d7
* config.c: different default PYTHONPATH for MS-DOS
Guido van Rossum <guido@python.org>
parents:
1321
diff
changeset
|
625 buf[n++] = c; |
|
f3c907efe5d7
* config.c: different default PYTHONPATH for MS-DOS
Guido van Rossum <guido@python.org>
parents:
1321
diff
changeset
|
626 } |
|
1321
a80677798f84
stropmodule.c: use C isspace(c) to test for whitespace; add
Guido van Rossum <guido@python.org>
parents:
1257
diff
changeset
|
627 s = newsizedstringobject(buf, n); |
|
1322
f3c907efe5d7
* config.c: different default PYTHONPATH for MS-DOS
Guido van Rossum <guido@python.org>
parents:
1321
diff
changeset
|
628 if (s) { |
|
f3c907efe5d7
* config.c: different default PYTHONPATH for MS-DOS
Guido van Rossum <guido@python.org>
parents:
1321
diff
changeset
|
629 dictinsert(d, "lowercase", s); |
|
f3c907efe5d7
* config.c: different default PYTHONPATH for MS-DOS
Guido van Rossum <guido@python.org>
parents:
1321
diff
changeset
|
630 DECREF(s); |
|
f3c907efe5d7
* config.c: different default PYTHONPATH for MS-DOS
Guido van Rossum <guido@python.org>
parents:
1321
diff
changeset
|
631 } |
|
f3c907efe5d7
* config.c: different default PYTHONPATH for MS-DOS
Guido van Rossum <guido@python.org>
parents:
1321
diff
changeset
|
632 |
|
f3c907efe5d7
* config.c: different default PYTHONPATH for MS-DOS
Guido van Rossum <guido@python.org>
parents:
1321
diff
changeset
|
633 /* Create 'uppercase' object */ |
|
f3c907efe5d7
* config.c: different default PYTHONPATH for MS-DOS
Guido van Rossum <guido@python.org>
parents:
1321
diff
changeset
|
634 n = 0; |
| 2310 | 635 for (c = 0; c < 256; c++) { |
|
1322
f3c907efe5d7
* config.c: different default PYTHONPATH for MS-DOS
Guido van Rossum <guido@python.org>
parents:
1321
diff
changeset
|
636 if (isupper(c)) |
|
f3c907efe5d7
* config.c: different default PYTHONPATH for MS-DOS
Guido van Rossum <guido@python.org>
parents:
1321
diff
changeset
|
637 buf[n++] = c; |
|
f3c907efe5d7
* config.c: different default PYTHONPATH for MS-DOS
Guido van Rossum <guido@python.org>
parents:
1321
diff
changeset
|
638 } |
|
f3c907efe5d7
* config.c: different default PYTHONPATH for MS-DOS
Guido van Rossum <guido@python.org>
parents:
1321
diff
changeset
|
639 s = newsizedstringobject(buf, n); |
|
f3c907efe5d7
* config.c: different default PYTHONPATH for MS-DOS
Guido van Rossum <guido@python.org>
parents:
1321
diff
changeset
|
640 if (s) { |
|
f3c907efe5d7
* config.c: different default PYTHONPATH for MS-DOS
Guido van Rossum <guido@python.org>
parents:
1321
diff
changeset
|
641 dictinsert(d, "uppercase", s); |
|
f3c907efe5d7
* config.c: different default PYTHONPATH for MS-DOS
Guido van Rossum <guido@python.org>
parents:
1321
diff
changeset
|
642 DECREF(s); |
|
f3c907efe5d7
* config.c: different default PYTHONPATH for MS-DOS
Guido van Rossum <guido@python.org>
parents:
1321
diff
changeset
|
643 } |
|
f3c907efe5d7
* config.c: different default PYTHONPATH for MS-DOS
Guido van Rossum <guido@python.org>
parents:
1321
diff
changeset
|
644 |
|
f3c907efe5d7
* config.c: different default PYTHONPATH for MS-DOS
Guido van Rossum <guido@python.org>
parents:
1321
diff
changeset
|
645 if (err_occurred()) |
|
f3c907efe5d7
* config.c: different default PYTHONPATH for MS-DOS
Guido van Rossum <guido@python.org>
parents:
1321
diff
changeset
|
646 fatal("can't initialize module strop"); |
|
1012
806689b93558
Re-implement some operations from string.py in C, for speed.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
647 } |
