symbian-qemu-0.9.1-12/python-2.6.1/Objects/bytes_methods.c
changeset 1 2fb8b9db1c86
equal deleted inserted replaced
0:ffa851df0825 1:2fb8b9db1c86
       
     1 #include "Python.h"
       
     2 #include "bytes_methods.h"
       
     3 
       
     4 /* Our own locale-independent ctype.h-like macros */
       
     5 
       
     6 const unsigned int _Py_ctype_table[256] = {
       
     7     0, /* 0x0 '\x00' */
       
     8     0, /* 0x1 '\x01' */
       
     9     0, /* 0x2 '\x02' */
       
    10     0, /* 0x3 '\x03' */
       
    11     0, /* 0x4 '\x04' */
       
    12     0, /* 0x5 '\x05' */
       
    13     0, /* 0x6 '\x06' */
       
    14     0, /* 0x7 '\x07' */
       
    15     0, /* 0x8 '\x08' */
       
    16     FLAG_SPACE, /* 0x9 '\t' */
       
    17     FLAG_SPACE, /* 0xa '\n' */
       
    18     FLAG_SPACE, /* 0xb '\v' */
       
    19     FLAG_SPACE, /* 0xc '\f' */
       
    20     FLAG_SPACE, /* 0xd '\r' */
       
    21     0, /* 0xe '\x0e' */
       
    22     0, /* 0xf '\x0f' */
       
    23     0, /* 0x10 '\x10' */
       
    24     0, /* 0x11 '\x11' */
       
    25     0, /* 0x12 '\x12' */
       
    26     0, /* 0x13 '\x13' */
       
    27     0, /* 0x14 '\x14' */
       
    28     0, /* 0x15 '\x15' */
       
    29     0, /* 0x16 '\x16' */
       
    30     0, /* 0x17 '\x17' */
       
    31     0, /* 0x18 '\x18' */
       
    32     0, /* 0x19 '\x19' */
       
    33     0, /* 0x1a '\x1a' */
       
    34     0, /* 0x1b '\x1b' */
       
    35     0, /* 0x1c '\x1c' */
       
    36     0, /* 0x1d '\x1d' */
       
    37     0, /* 0x1e '\x1e' */
       
    38     0, /* 0x1f '\x1f' */
       
    39     FLAG_SPACE, /* 0x20 ' ' */
       
    40     0, /* 0x21 '!' */
       
    41     0, /* 0x22 '"' */
       
    42     0, /* 0x23 '#' */
       
    43     0, /* 0x24 '$' */
       
    44     0, /* 0x25 '%' */
       
    45     0, /* 0x26 '&' */
       
    46     0, /* 0x27 "'" */
       
    47     0, /* 0x28 '(' */
       
    48     0, /* 0x29 ')' */
       
    49     0, /* 0x2a '*' */
       
    50     0, /* 0x2b '+' */
       
    51     0, /* 0x2c ',' */
       
    52     0, /* 0x2d '-' */
       
    53     0, /* 0x2e '.' */
       
    54     0, /* 0x2f '/' */
       
    55     FLAG_DIGIT|FLAG_XDIGIT, /* 0x30 '0' */
       
    56     FLAG_DIGIT|FLAG_XDIGIT, /* 0x31 '1' */
       
    57     FLAG_DIGIT|FLAG_XDIGIT, /* 0x32 '2' */
       
    58     FLAG_DIGIT|FLAG_XDIGIT, /* 0x33 '3' */
       
    59     FLAG_DIGIT|FLAG_XDIGIT, /* 0x34 '4' */
       
    60     FLAG_DIGIT|FLAG_XDIGIT, /* 0x35 '5' */
       
    61     FLAG_DIGIT|FLAG_XDIGIT, /* 0x36 '6' */
       
    62     FLAG_DIGIT|FLAG_XDIGIT, /* 0x37 '7' */
       
    63     FLAG_DIGIT|FLAG_XDIGIT, /* 0x38 '8' */
       
    64     FLAG_DIGIT|FLAG_XDIGIT, /* 0x39 '9' */
       
    65     0, /* 0x3a ':' */
       
    66     0, /* 0x3b ';' */
       
    67     0, /* 0x3c '<' */
       
    68     0, /* 0x3d '=' */
       
    69     0, /* 0x3e '>' */
       
    70     0, /* 0x3f '?' */
       
    71     0, /* 0x40 '@' */
       
    72     FLAG_UPPER|FLAG_XDIGIT, /* 0x41 'A' */
       
    73     FLAG_UPPER|FLAG_XDIGIT, /* 0x42 'B' */
       
    74     FLAG_UPPER|FLAG_XDIGIT, /* 0x43 'C' */
       
    75     FLAG_UPPER|FLAG_XDIGIT, /* 0x44 'D' */
       
    76     FLAG_UPPER|FLAG_XDIGIT, /* 0x45 'E' */
       
    77     FLAG_UPPER|FLAG_XDIGIT, /* 0x46 'F' */
       
    78     FLAG_UPPER, /* 0x47 'G' */
       
    79     FLAG_UPPER, /* 0x48 'H' */
       
    80     FLAG_UPPER, /* 0x49 'I' */
       
    81     FLAG_UPPER, /* 0x4a 'J' */
       
    82     FLAG_UPPER, /* 0x4b 'K' */
       
    83     FLAG_UPPER, /* 0x4c 'L' */
       
    84     FLAG_UPPER, /* 0x4d 'M' */
       
    85     FLAG_UPPER, /* 0x4e 'N' */
       
    86     FLAG_UPPER, /* 0x4f 'O' */
       
    87     FLAG_UPPER, /* 0x50 'P' */
       
    88     FLAG_UPPER, /* 0x51 'Q' */
       
    89     FLAG_UPPER, /* 0x52 'R' */
       
    90     FLAG_UPPER, /* 0x53 'S' */
       
    91     FLAG_UPPER, /* 0x54 'T' */
       
    92     FLAG_UPPER, /* 0x55 'U' */
       
    93     FLAG_UPPER, /* 0x56 'V' */
       
    94     FLAG_UPPER, /* 0x57 'W' */
       
    95     FLAG_UPPER, /* 0x58 'X' */
       
    96     FLAG_UPPER, /* 0x59 'Y' */
       
    97     FLAG_UPPER, /* 0x5a 'Z' */
       
    98     0, /* 0x5b '[' */
       
    99     0, /* 0x5c '\\' */
       
   100     0, /* 0x5d ']' */
       
   101     0, /* 0x5e '^' */
       
   102     0, /* 0x5f '_' */
       
   103     0, /* 0x60 '`' */
       
   104     FLAG_LOWER|FLAG_XDIGIT, /* 0x61 'a' */
       
   105     FLAG_LOWER|FLAG_XDIGIT, /* 0x62 'b' */
       
   106     FLAG_LOWER|FLAG_XDIGIT, /* 0x63 'c' */
       
   107     FLAG_LOWER|FLAG_XDIGIT, /* 0x64 'd' */
       
   108     FLAG_LOWER|FLAG_XDIGIT, /* 0x65 'e' */
       
   109     FLAG_LOWER|FLAG_XDIGIT, /* 0x66 'f' */
       
   110     FLAG_LOWER, /* 0x67 'g' */
       
   111     FLAG_LOWER, /* 0x68 'h' */
       
   112     FLAG_LOWER, /* 0x69 'i' */
       
   113     FLAG_LOWER, /* 0x6a 'j' */
       
   114     FLAG_LOWER, /* 0x6b 'k' */
       
   115     FLAG_LOWER, /* 0x6c 'l' */
       
   116     FLAG_LOWER, /* 0x6d 'm' */
       
   117     FLAG_LOWER, /* 0x6e 'n' */
       
   118     FLAG_LOWER, /* 0x6f 'o' */
       
   119     FLAG_LOWER, /* 0x70 'p' */
       
   120     FLAG_LOWER, /* 0x71 'q' */
       
   121     FLAG_LOWER, /* 0x72 'r' */
       
   122     FLAG_LOWER, /* 0x73 's' */
       
   123     FLAG_LOWER, /* 0x74 't' */
       
   124     FLAG_LOWER, /* 0x75 'u' */
       
   125     FLAG_LOWER, /* 0x76 'v' */
       
   126     FLAG_LOWER, /* 0x77 'w' */
       
   127     FLAG_LOWER, /* 0x78 'x' */
       
   128     FLAG_LOWER, /* 0x79 'y' */
       
   129     FLAG_LOWER, /* 0x7a 'z' */
       
   130     0, /* 0x7b '{' */
       
   131     0, /* 0x7c '|' */
       
   132     0, /* 0x7d '}' */
       
   133     0, /* 0x7e '~' */
       
   134     0, /* 0x7f '\x7f' */
       
   135     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
       
   136     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
       
   137     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
       
   138     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
       
   139     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
       
   140     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
       
   141     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
       
   142     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
       
   143 };
       
   144 
       
   145 
       
   146 const unsigned char _Py_ctype_tolower[256] = {
       
   147     0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
       
   148     0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
       
   149     0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
       
   150     0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f,
       
   151     0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27,
       
   152     0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f,
       
   153     0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37,
       
   154     0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f,
       
   155     0x40, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67,
       
   156     0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f,
       
   157     0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77,
       
   158     0x78, 0x79, 0x7a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f,
       
   159     0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67,
       
   160     0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f,
       
   161     0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77,
       
   162     0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f,
       
   163     0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
       
   164     0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f,
       
   165     0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97,
       
   166     0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f,
       
   167     0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7,
       
   168     0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf,
       
   169     0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7,
       
   170     0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf,
       
   171     0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7,
       
   172     0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf,
       
   173     0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7,
       
   174     0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf,
       
   175     0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7,
       
   176     0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef,
       
   177     0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7,
       
   178     0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff,
       
   179 };
       
   180 
       
   181 const unsigned char _Py_ctype_toupper[256] = {
       
   182     0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
       
   183     0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
       
   184     0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
       
   185     0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f,
       
   186     0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27,
       
   187     0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f,
       
   188     0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37,
       
   189     0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f,
       
   190     0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47,
       
   191     0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f,
       
   192     0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57,
       
   193     0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f,
       
   194     0x60, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47,
       
   195     0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f,
       
   196     0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57,
       
   197     0x58, 0x59, 0x5a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f,
       
   198     0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
       
   199     0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f,
       
   200     0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97,
       
   201     0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f,
       
   202     0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7,
       
   203     0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf,
       
   204     0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7,
       
   205     0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf,
       
   206     0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7,
       
   207     0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf,
       
   208     0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7,
       
   209     0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf,
       
   210     0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7,
       
   211     0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef,
       
   212     0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7,
       
   213     0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff,
       
   214 };
       
   215 
       
   216 
       
   217 PyDoc_STRVAR_shared(_Py_isspace__doc__,
       
   218 "B.isspace() -> bool\n\
       
   219 \n\
       
   220 Return True if all characters in B are whitespace\n\
       
   221 and there is at least one character in B, False otherwise.");
       
   222 
       
   223 PyObject*
       
   224 _Py_bytes_isspace(const char *cptr, Py_ssize_t len)
       
   225 {
       
   226     register const unsigned char *p
       
   227         = (unsigned char *) cptr;
       
   228     register const unsigned char *e;
       
   229 
       
   230     /* Shortcut for single character strings */
       
   231     if (len == 1 && ISSPACE(*p))
       
   232         Py_RETURN_TRUE;
       
   233 
       
   234     /* Special case for empty strings */
       
   235     if (len == 0)
       
   236         Py_RETURN_FALSE;
       
   237 
       
   238     e = p + len;
       
   239     for (; p < e; p++) {
       
   240 	if (!ISSPACE(*p))
       
   241             Py_RETURN_FALSE;
       
   242     }
       
   243     Py_RETURN_TRUE;
       
   244 }
       
   245 
       
   246 
       
   247 PyDoc_STRVAR_shared(_Py_isalpha__doc__,
       
   248 "B.isalpha() -> bool\n\
       
   249 \n\
       
   250 Return True if all characters in B are alphabetic\n\
       
   251 and there is at least one character in B, False otherwise.");
       
   252 
       
   253 PyObject*
       
   254 _Py_bytes_isalpha(const char *cptr, Py_ssize_t len)
       
   255 {
       
   256     register const unsigned char *p
       
   257         = (unsigned char *) cptr;
       
   258     register const unsigned char *e;
       
   259 
       
   260     /* Shortcut for single character strings */
       
   261     if (len == 1 && ISALPHA(*p))
       
   262 	Py_RETURN_TRUE;
       
   263 
       
   264     /* Special case for empty strings */
       
   265     if (len == 0)
       
   266 	Py_RETURN_FALSE;
       
   267 
       
   268     e = p + len;
       
   269     for (; p < e; p++) {
       
   270 	if (!ISALPHA(*p))
       
   271 	    Py_RETURN_FALSE;
       
   272     }
       
   273     Py_RETURN_TRUE;
       
   274 }
       
   275 
       
   276 
       
   277 PyDoc_STRVAR_shared(_Py_isalnum__doc__,
       
   278 "B.isalnum() -> bool\n\
       
   279 \n\
       
   280 Return True if all characters in B are alphanumeric\n\
       
   281 and there is at least one character in B, False otherwise.");
       
   282 
       
   283 PyObject*
       
   284 _Py_bytes_isalnum(const char *cptr, Py_ssize_t len)
       
   285 {
       
   286     register const unsigned char *p
       
   287         = (unsigned char *) cptr;
       
   288     register const unsigned char *e;
       
   289 
       
   290     /* Shortcut for single character strings */
       
   291     if (len == 1 && ISALNUM(*p))
       
   292 	Py_RETURN_TRUE;
       
   293 
       
   294     /* Special case for empty strings */
       
   295     if (len == 0)
       
   296 	Py_RETURN_FALSE;
       
   297 
       
   298     e = p + len;
       
   299     for (; p < e; p++) {
       
   300 	if (!ISALNUM(*p))
       
   301 	    Py_RETURN_FALSE;
       
   302     }
       
   303     Py_RETURN_TRUE;
       
   304 }
       
   305 
       
   306 
       
   307 PyDoc_STRVAR_shared(_Py_isdigit__doc__,
       
   308 "B.isdigit() -> bool\n\
       
   309 \n\
       
   310 Return True if all characters in B are digits\n\
       
   311 and there is at least one character in B, False otherwise.");
       
   312 
       
   313 PyObject*
       
   314 _Py_bytes_isdigit(const char *cptr, Py_ssize_t len)
       
   315 {
       
   316     register const unsigned char *p
       
   317         = (unsigned char *) cptr;
       
   318     register const unsigned char *e;
       
   319 
       
   320     /* Shortcut for single character strings */
       
   321     if (len == 1 && ISDIGIT(*p))
       
   322 	Py_RETURN_TRUE;
       
   323 
       
   324     /* Special case for empty strings */
       
   325     if (len == 0)
       
   326 	Py_RETURN_FALSE;
       
   327 
       
   328     e = p + len;
       
   329     for (; p < e; p++) {
       
   330 	if (!ISDIGIT(*p))
       
   331 	    Py_RETURN_FALSE;
       
   332     }
       
   333     Py_RETURN_TRUE;
       
   334 }
       
   335 
       
   336 
       
   337 PyDoc_STRVAR_shared(_Py_islower__doc__,
       
   338 "B.islower() -> bool\n\
       
   339 \n\
       
   340 Return True if all cased characters in B are lowercase and there is\n\
       
   341 at least one cased character in B, False otherwise.");
       
   342 
       
   343 PyObject*
       
   344 _Py_bytes_islower(const char *cptr, Py_ssize_t len)
       
   345 {
       
   346     register const unsigned char *p
       
   347         = (unsigned char *) cptr;
       
   348     register const unsigned char *e;
       
   349     int cased;
       
   350 
       
   351     /* Shortcut for single character strings */
       
   352     if (len == 1)
       
   353 	return PyBool_FromLong(ISLOWER(*p));
       
   354 
       
   355     /* Special case for empty strings */
       
   356     if (len == 0)
       
   357 	Py_RETURN_FALSE;
       
   358 
       
   359     e = p + len;
       
   360     cased = 0;
       
   361     for (; p < e; p++) {
       
   362 	if (ISUPPER(*p))
       
   363 	    Py_RETURN_FALSE;
       
   364 	else if (!cased && ISLOWER(*p))
       
   365 	    cased = 1;
       
   366     }
       
   367     return PyBool_FromLong(cased);
       
   368 }
       
   369 
       
   370 
       
   371 PyDoc_STRVAR_shared(_Py_isupper__doc__,
       
   372 "B.isupper() -> bool\n\
       
   373 \n\
       
   374 Return True if all cased characters in B are uppercase and there is\n\
       
   375 at least one cased character in B, False otherwise.");
       
   376 
       
   377 PyObject*
       
   378 _Py_bytes_isupper(const char *cptr, Py_ssize_t len)
       
   379 {
       
   380     register const unsigned char *p
       
   381         = (unsigned char *) cptr;
       
   382     register const unsigned char *e;
       
   383     int cased;
       
   384 
       
   385     /* Shortcut for single character strings */
       
   386     if (len == 1)
       
   387 	return PyBool_FromLong(ISUPPER(*p));
       
   388 
       
   389     /* Special case for empty strings */
       
   390     if (len == 0)
       
   391 	Py_RETURN_FALSE;
       
   392 
       
   393     e = p + len;
       
   394     cased = 0;
       
   395     for (; p < e; p++) {
       
   396 	if (ISLOWER(*p))
       
   397 	    Py_RETURN_FALSE;
       
   398 	else if (!cased && ISUPPER(*p))
       
   399 	    cased = 1;
       
   400     }
       
   401     return PyBool_FromLong(cased);
       
   402 }
       
   403 
       
   404 
       
   405 PyDoc_STRVAR_shared(_Py_istitle__doc__,
       
   406 "B.istitle() -> bool\n\
       
   407 \n\
       
   408 Return True if B is a titlecased string and there is at least one\n\
       
   409 character in B, i.e. uppercase characters may only follow uncased\n\
       
   410 characters and lowercase characters only cased ones. Return False\n\
       
   411 otherwise.");
       
   412 
       
   413 PyObject*
       
   414 _Py_bytes_istitle(const char *cptr, Py_ssize_t len)
       
   415 {
       
   416     register const unsigned char *p
       
   417         = (unsigned char *) cptr;
       
   418     register const unsigned char *e;
       
   419     int cased, previous_is_cased;
       
   420 
       
   421     /* Shortcut for single character strings */
       
   422     if (len == 1)
       
   423 	return PyBool_FromLong(ISUPPER(*p));
       
   424 
       
   425     /* Special case for empty strings */
       
   426     if (len == 0)
       
   427 	Py_RETURN_FALSE;
       
   428 
       
   429     e = p + len;
       
   430     cased = 0;
       
   431     previous_is_cased = 0;
       
   432     for (; p < e; p++) {
       
   433 	register const unsigned char ch = *p;
       
   434 
       
   435 	if (ISUPPER(ch)) {
       
   436 	    if (previous_is_cased)
       
   437 		Py_RETURN_FALSE;
       
   438 	    previous_is_cased = 1;
       
   439 	    cased = 1;
       
   440 	}
       
   441 	else if (ISLOWER(ch)) {
       
   442 	    if (!previous_is_cased)
       
   443 		Py_RETURN_FALSE;
       
   444 	    previous_is_cased = 1;
       
   445 	    cased = 1;
       
   446 	}
       
   447 	else
       
   448 	    previous_is_cased = 0;
       
   449     }
       
   450     return PyBool_FromLong(cased);
       
   451 }
       
   452 
       
   453 
       
   454 PyDoc_STRVAR_shared(_Py_lower__doc__,
       
   455 "B.lower() -> copy of B\n\
       
   456 \n\
       
   457 Return a copy of B with all ASCII characters converted to lowercase.");
       
   458 
       
   459 void
       
   460 _Py_bytes_lower(char *result, const char *cptr, Py_ssize_t len)
       
   461 {
       
   462 	Py_ssize_t i;
       
   463 
       
   464         /*
       
   465 	newobj = PyString_FromStringAndSize(NULL, len);
       
   466 	if (!newobj)
       
   467 		return NULL;
       
   468 
       
   469 	s = PyString_AS_STRING(newobj);
       
   470         */
       
   471 
       
   472 	Py_MEMCPY(result, cptr, len);
       
   473 
       
   474 	for (i = 0; i < len; i++) {
       
   475 		int c = Py_CHARMASK(result[i]);
       
   476 		if (ISUPPER(c))
       
   477 			result[i] = TOLOWER(c);
       
   478 	}
       
   479 }
       
   480 
       
   481 
       
   482 PyDoc_STRVAR_shared(_Py_upper__doc__,
       
   483 "B.upper() -> copy of B\n\
       
   484 \n\
       
   485 Return a copy of B with all ASCII characters converted to uppercase.");
       
   486 
       
   487 void
       
   488 _Py_bytes_upper(char *result, const char *cptr, Py_ssize_t len)
       
   489 {
       
   490 	Py_ssize_t i;
       
   491 
       
   492         /*
       
   493 	newobj = PyString_FromStringAndSize(NULL, len);
       
   494 	if (!newobj)
       
   495 		return NULL;
       
   496 
       
   497 	s = PyString_AS_STRING(newobj);
       
   498         */
       
   499 
       
   500 	Py_MEMCPY(result, cptr, len);
       
   501 
       
   502 	for (i = 0; i < len; i++) {
       
   503 		int c = Py_CHARMASK(result[i]);
       
   504 		if (ISLOWER(c))
       
   505 			result[i] = TOUPPER(c);
       
   506 	}
       
   507 }
       
   508 
       
   509 
       
   510 PyDoc_STRVAR_shared(_Py_title__doc__,
       
   511 "B.title() -> copy of B\n\
       
   512 \n\
       
   513 Return a titlecased version of B, i.e. ASCII words start with uppercase\n\
       
   514 characters, all remaining cased characters have lowercase.");
       
   515 
       
   516 void
       
   517 _Py_bytes_title(char *result, char *s, Py_ssize_t len)
       
   518 {
       
   519 	Py_ssize_t i;
       
   520 	int previous_is_cased = 0;
       
   521 
       
   522         /*
       
   523 	newobj = PyString_FromStringAndSize(NULL, len);
       
   524 	if (newobj == NULL)
       
   525 		return NULL;
       
   526 	s_new = PyString_AsString(newobj);
       
   527         */
       
   528 	for (i = 0; i < len; i++) {
       
   529 		int c = Py_CHARMASK(*s++);
       
   530 		if (ISLOWER(c)) {
       
   531 			if (!previous_is_cased)
       
   532 			    c = TOUPPER(c);
       
   533 			previous_is_cased = 1;
       
   534 		} else if (ISUPPER(c)) {
       
   535 			if (previous_is_cased)
       
   536 			    c = TOLOWER(c);
       
   537 			previous_is_cased = 1;
       
   538 		} else
       
   539 			previous_is_cased = 0;
       
   540 		*result++ = c;
       
   541 	}
       
   542 }
       
   543 
       
   544 
       
   545 PyDoc_STRVAR_shared(_Py_capitalize__doc__,
       
   546 "B.capitalize() -> copy of B\n\
       
   547 \n\
       
   548 Return a copy of B with only its first character capitalized (ASCII).");
       
   549 
       
   550 void
       
   551 _Py_bytes_capitalize(char *result, char *s, Py_ssize_t len)
       
   552 {
       
   553 	Py_ssize_t i;
       
   554 
       
   555         /*
       
   556 	newobj = PyString_FromStringAndSize(NULL, len);
       
   557 	if (newobj == NULL)
       
   558 		return NULL;
       
   559 	s_new = PyString_AsString(newobj);
       
   560         */
       
   561 	if (0 < len) {
       
   562 		int c = Py_CHARMASK(*s++);
       
   563 		if (ISLOWER(c))
       
   564 			*result = TOUPPER(c);
       
   565 		else
       
   566 			*result = c;
       
   567 		result++;
       
   568 	}
       
   569 	for (i = 1; i < len; i++) {
       
   570 		int c = Py_CHARMASK(*s++);
       
   571 		if (ISUPPER(c))
       
   572 			*result = TOLOWER(c);
       
   573 		else
       
   574 			*result = c;
       
   575 		result++;
       
   576 	}
       
   577 }
       
   578 
       
   579 
       
   580 PyDoc_STRVAR_shared(_Py_swapcase__doc__,
       
   581 "B.swapcase() -> copy of B\n\
       
   582 \n\
       
   583 Return a copy of B with uppercase ASCII characters converted\n\
       
   584 to lowercase ASCII and vice versa.");
       
   585 
       
   586 void
       
   587 _Py_bytes_swapcase(char *result, char *s, Py_ssize_t len)
       
   588 {
       
   589 	Py_ssize_t i;
       
   590 
       
   591         /*
       
   592 	newobj = PyString_FromStringAndSize(NULL, len);
       
   593 	if (newobj == NULL)
       
   594 		return NULL;
       
   595 	s_new = PyString_AsString(newobj);
       
   596         */
       
   597 	for (i = 0; i < len; i++) {
       
   598 		int c = Py_CHARMASK(*s++);
       
   599 		if (ISLOWER(c)) {
       
   600 			*result = TOUPPER(c);
       
   601 		}
       
   602 		else if (ISUPPER(c)) {
       
   603 			*result = TOLOWER(c);
       
   604 		}
       
   605 		else
       
   606 			*result = c;
       
   607 		result++;
       
   608 	}
       
   609 }
       
   610