LCOV - code coverage report
Current view: top level - Objects - bytes_methods.c (source / functions) Hit Total Coverage
Test: CPython lcov report Lines: 0 148 0.0 %
Date: 2017-04-19 Functions: 0 12 0.0 %

          Line data    Source code
       1             : #include "Python.h"
       2             : #include "bytes_methods.h"
       3             : 
       4             : PyDoc_STRVAR_shared(_Py_isspace__doc__,
       5             : "B.isspace() -> bool\n\
       6             : \n\
       7             : Return True if all characters in B are whitespace\n\
       8             : and there is at least one character in B, False otherwise.");
       9             : 
      10             : PyObject*
      11           0 : _Py_bytes_isspace(const char *cptr, Py_ssize_t len)
      12             : {
      13           0 :     register const unsigned char *p
      14             :         = (unsigned char *) cptr;
      15             :     register const unsigned char *e;
      16             : 
      17             :     /* Shortcut for single character strings */
      18           0 :     if (len == 1 && Py_ISSPACE(*p))
      19           0 :         Py_RETURN_TRUE;
      20             : 
      21             :     /* Special case for empty strings */
      22           0 :     if (len == 0)
      23           0 :         Py_RETURN_FALSE;
      24             : 
      25           0 :     e = p + len;
      26           0 :     for (; p < e; p++) {
      27           0 :         if (!Py_ISSPACE(*p))
      28           0 :             Py_RETURN_FALSE;
      29             :     }
      30           0 :     Py_RETURN_TRUE;
      31             : }
      32             : 
      33             : 
      34             : PyDoc_STRVAR_shared(_Py_isalpha__doc__,
      35             : "B.isalpha() -> bool\n\
      36             : \n\
      37             : Return True if all characters in B are alphabetic\n\
      38             : and there is at least one character in B, False otherwise.");
      39             : 
      40             : PyObject*
      41           0 : _Py_bytes_isalpha(const char *cptr, Py_ssize_t len)
      42             : {
      43           0 :     register const unsigned char *p
      44             :         = (unsigned char *) cptr;
      45             :     register const unsigned char *e;
      46             : 
      47             :     /* Shortcut for single character strings */
      48           0 :     if (len == 1 && Py_ISALPHA(*p))
      49           0 :         Py_RETURN_TRUE;
      50             : 
      51             :     /* Special case for empty strings */
      52           0 :     if (len == 0)
      53           0 :         Py_RETURN_FALSE;
      54             : 
      55           0 :     e = p + len;
      56           0 :     for (; p < e; p++) {
      57           0 :         if (!Py_ISALPHA(*p))
      58           0 :             Py_RETURN_FALSE;
      59             :     }
      60           0 :     Py_RETURN_TRUE;
      61             : }
      62             : 
      63             : 
      64             : PyDoc_STRVAR_shared(_Py_isalnum__doc__,
      65             : "B.isalnum() -> bool\n\
      66             : \n\
      67             : Return True if all characters in B are alphanumeric\n\
      68             : and there is at least one character in B, False otherwise.");
      69             : 
      70             : PyObject*
      71           0 : _Py_bytes_isalnum(const char *cptr, Py_ssize_t len)
      72             : {
      73           0 :     register const unsigned char *p
      74             :         = (unsigned char *) cptr;
      75             :     register const unsigned char *e;
      76             : 
      77             :     /* Shortcut for single character strings */
      78           0 :     if (len == 1 && Py_ISALNUM(*p))
      79           0 :         Py_RETURN_TRUE;
      80             : 
      81             :     /* Special case for empty strings */
      82           0 :     if (len == 0)
      83           0 :         Py_RETURN_FALSE;
      84             : 
      85           0 :     e = p + len;
      86           0 :     for (; p < e; p++) {
      87           0 :         if (!Py_ISALNUM(*p))
      88           0 :             Py_RETURN_FALSE;
      89             :     }
      90           0 :     Py_RETURN_TRUE;
      91             : }
      92             : 
      93             : 
      94             : PyDoc_STRVAR_shared(_Py_isdigit__doc__,
      95             : "B.isdigit() -> bool\n\
      96             : \n\
      97             : Return True if all characters in B are digits\n\
      98             : and there is at least one character in B, False otherwise.");
      99             : 
     100             : PyObject*
     101           0 : _Py_bytes_isdigit(const char *cptr, Py_ssize_t len)
     102             : {
     103           0 :     register const unsigned char *p
     104             :         = (unsigned char *) cptr;
     105             :     register const unsigned char *e;
     106             : 
     107             :     /* Shortcut for single character strings */
     108           0 :     if (len == 1 && Py_ISDIGIT(*p))
     109           0 :         Py_RETURN_TRUE;
     110             : 
     111             :     /* Special case for empty strings */
     112           0 :     if (len == 0)
     113           0 :         Py_RETURN_FALSE;
     114             : 
     115           0 :     e = p + len;
     116           0 :     for (; p < e; p++) {
     117           0 :         if (!Py_ISDIGIT(*p))
     118           0 :             Py_RETURN_FALSE;
     119             :     }
     120           0 :     Py_RETURN_TRUE;
     121             : }
     122             : 
     123             : 
     124             : PyDoc_STRVAR_shared(_Py_islower__doc__,
     125             : "B.islower() -> bool\n\
     126             : \n\
     127             : Return True if all cased characters in B are lowercase and there is\n\
     128             : at least one cased character in B, False otherwise.");
     129             : 
     130             : PyObject*
     131           0 : _Py_bytes_islower(const char *cptr, Py_ssize_t len)
     132             : {
     133           0 :     register const unsigned char *p
     134             :         = (unsigned char *) cptr;
     135             :     register const unsigned char *e;
     136             :     int cased;
     137             : 
     138             :     /* Shortcut for single character strings */
     139           0 :     if (len == 1)
     140           0 :         return PyBool_FromLong(Py_ISLOWER(*p));
     141             : 
     142             :     /* Special case for empty strings */
     143           0 :     if (len == 0)
     144           0 :         Py_RETURN_FALSE;
     145             : 
     146           0 :     e = p + len;
     147           0 :     cased = 0;
     148           0 :     for (; p < e; p++) {
     149           0 :         if (Py_ISUPPER(*p))
     150           0 :             Py_RETURN_FALSE;
     151           0 :         else if (!cased && Py_ISLOWER(*p))
     152           0 :             cased = 1;
     153             :     }
     154           0 :     return PyBool_FromLong(cased);
     155             : }
     156             : 
     157             : 
     158             : PyDoc_STRVAR_shared(_Py_isupper__doc__,
     159             : "B.isupper() -> bool\n\
     160             : \n\
     161             : Return True if all cased characters in B are uppercase and there is\n\
     162             : at least one cased character in B, False otherwise.");
     163             : 
     164             : PyObject*
     165           0 : _Py_bytes_isupper(const char *cptr, Py_ssize_t len)
     166             : {
     167           0 :     register const unsigned char *p
     168             :         = (unsigned char *) cptr;
     169             :     register const unsigned char *e;
     170             :     int cased;
     171             : 
     172             :     /* Shortcut for single character strings */
     173           0 :     if (len == 1)
     174           0 :         return PyBool_FromLong(Py_ISUPPER(*p));
     175             : 
     176             :     /* Special case for empty strings */
     177           0 :     if (len == 0)
     178           0 :         Py_RETURN_FALSE;
     179             : 
     180           0 :     e = p + len;
     181           0 :     cased = 0;
     182           0 :     for (; p < e; p++) {
     183           0 :         if (Py_ISLOWER(*p))
     184           0 :             Py_RETURN_FALSE;
     185           0 :         else if (!cased && Py_ISUPPER(*p))
     186           0 :             cased = 1;
     187             :     }
     188           0 :     return PyBool_FromLong(cased);
     189             : }
     190             : 
     191             : 
     192             : PyDoc_STRVAR_shared(_Py_istitle__doc__,
     193             : "B.istitle() -> bool\n\
     194             : \n\
     195             : Return True if B is a titlecased string and there is at least one\n\
     196             : character in B, i.e. uppercase characters may only follow uncased\n\
     197             : characters and lowercase characters only cased ones. Return False\n\
     198             : otherwise.");
     199             : 
     200             : PyObject*
     201           0 : _Py_bytes_istitle(const char *cptr, Py_ssize_t len)
     202             : {
     203           0 :     register const unsigned char *p
     204             :         = (unsigned char *) cptr;
     205             :     register const unsigned char *e;
     206             :     int cased, previous_is_cased;
     207             : 
     208             :     /* Shortcut for single character strings */
     209           0 :     if (len == 1)
     210           0 :         return PyBool_FromLong(Py_ISUPPER(*p));
     211             : 
     212             :     /* Special case for empty strings */
     213           0 :     if (len == 0)
     214           0 :         Py_RETURN_FALSE;
     215             : 
     216           0 :     e = p + len;
     217           0 :     cased = 0;
     218           0 :     previous_is_cased = 0;
     219           0 :     for (; p < e; p++) {
     220           0 :         register const unsigned char ch = *p;
     221             : 
     222           0 :         if (Py_ISUPPER(ch)) {
     223           0 :             if (previous_is_cased)
     224           0 :                 Py_RETURN_FALSE;
     225           0 :             previous_is_cased = 1;
     226           0 :             cased = 1;
     227             :         }
     228           0 :         else if (Py_ISLOWER(ch)) {
     229           0 :             if (!previous_is_cased)
     230           0 :                 Py_RETURN_FALSE;
     231           0 :             previous_is_cased = 1;
     232           0 :             cased = 1;
     233             :         }
     234             :         else
     235           0 :             previous_is_cased = 0;
     236             :     }
     237           0 :     return PyBool_FromLong(cased);
     238             : }
     239             : 
     240             : 
     241             : PyDoc_STRVAR_shared(_Py_lower__doc__,
     242             : "B.lower() -> copy of B\n\
     243             : \n\
     244             : Return a copy of B with all ASCII characters converted to lowercase.");
     245             : 
     246             : void
     247           0 : _Py_bytes_lower(char *result, const char *cptr, Py_ssize_t len)
     248             : {
     249             :         Py_ssize_t i;
     250             : 
     251             :         /*
     252             :         newobj = PyString_FromStringAndSize(NULL, len);
     253             :         if (!newobj)
     254             :                 return NULL;
     255             : 
     256             :         s = PyString_AS_STRING(newobj);
     257             :         */
     258             : 
     259           0 :         Py_MEMCPY(result, cptr, len);
     260             : 
     261           0 :         for (i = 0; i < len; i++) {
     262           0 :                 int c = Py_CHARMASK(result[i]);
     263           0 :                 if (Py_ISUPPER(c))
     264           0 :                         result[i] = Py_TOLOWER(c);
     265             :         }
     266           0 : }
     267             : 
     268             : 
     269             : PyDoc_STRVAR_shared(_Py_upper__doc__,
     270             : "B.upper() -> copy of B\n\
     271             : \n\
     272             : Return a copy of B with all ASCII characters converted to uppercase.");
     273             : 
     274             : void
     275           0 : _Py_bytes_upper(char *result, const char *cptr, Py_ssize_t len)
     276             : {
     277             :         Py_ssize_t i;
     278             : 
     279             :         /*
     280             :         newobj = PyString_FromStringAndSize(NULL, len);
     281             :         if (!newobj)
     282             :                 return NULL;
     283             : 
     284             :         s = PyString_AS_STRING(newobj);
     285             :         */
     286             : 
     287           0 :         Py_MEMCPY(result, cptr, len);
     288             : 
     289           0 :         for (i = 0; i < len; i++) {
     290           0 :                 int c = Py_CHARMASK(result[i]);
     291           0 :                 if (Py_ISLOWER(c))
     292           0 :                         result[i] = Py_TOUPPER(c);
     293             :         }
     294           0 : }
     295             : 
     296             : 
     297             : PyDoc_STRVAR_shared(_Py_title__doc__,
     298             : "B.title() -> copy of B\n\
     299             : \n\
     300             : Return a titlecased version of B, i.e. ASCII words start with uppercase\n\
     301             : characters, all remaining cased characters have lowercase.");
     302             : 
     303             : void
     304           0 : _Py_bytes_title(char *result, char *s, Py_ssize_t len)
     305             : {
     306             :         Py_ssize_t i;
     307           0 :         int previous_is_cased = 0;
     308             : 
     309             :         /*
     310             :         newobj = PyString_FromStringAndSize(NULL, len);
     311             :         if (newobj == NULL)
     312             :                 return NULL;
     313             :         s_new = PyString_AsString(newobj);
     314             :         */
     315           0 :         for (i = 0; i < len; i++) {
     316           0 :                 int c = Py_CHARMASK(*s++);
     317           0 :                 if (Py_ISLOWER(c)) {
     318           0 :                         if (!previous_is_cased)
     319           0 :                             c = Py_TOUPPER(c);
     320           0 :                         previous_is_cased = 1;
     321           0 :                 } else if (Py_ISUPPER(c)) {
     322           0 :                         if (previous_is_cased)
     323           0 :                             c = Py_TOLOWER(c);
     324           0 :                         previous_is_cased = 1;
     325             :                 } else
     326           0 :                         previous_is_cased = 0;
     327           0 :                 *result++ = c;
     328             :         }
     329           0 : }
     330             : 
     331             : 
     332             : PyDoc_STRVAR_shared(_Py_capitalize__doc__,
     333             : "B.capitalize() -> copy of B\n\
     334             : \n\
     335             : Return a copy of B with only its first character capitalized (ASCII)\n\
     336             : and the rest lower-cased.");
     337             : 
     338             : void
     339           0 : _Py_bytes_capitalize(char *result, char *s, Py_ssize_t len)
     340             : {
     341             :         Py_ssize_t i;
     342             : 
     343             :         /*
     344             :         newobj = PyString_FromStringAndSize(NULL, len);
     345             :         if (newobj == NULL)
     346             :                 return NULL;
     347             :         s_new = PyString_AsString(newobj);
     348             :         */
     349           0 :         if (0 < len) {
     350           0 :                 int c = Py_CHARMASK(*s++);
     351           0 :                 if (Py_ISLOWER(c))
     352           0 :                         *result = Py_TOUPPER(c);
     353             :                 else
     354           0 :                         *result = c;
     355           0 :                 result++;
     356             :         }
     357           0 :         for (i = 1; i < len; i++) {
     358           0 :                 int c = Py_CHARMASK(*s++);
     359           0 :                 if (Py_ISUPPER(c))
     360           0 :                         *result = Py_TOLOWER(c);
     361             :                 else
     362           0 :                         *result = c;
     363           0 :                 result++;
     364             :         }
     365           0 : }
     366             : 
     367             : 
     368             : PyDoc_STRVAR_shared(_Py_swapcase__doc__,
     369             : "B.swapcase() -> copy of B\n\
     370             : \n\
     371             : Return a copy of B with uppercase ASCII characters converted\n\
     372             : to lowercase ASCII and vice versa.");
     373             : 
     374             : void
     375           0 : _Py_bytes_swapcase(char *result, char *s, Py_ssize_t len)
     376             : {
     377             :         Py_ssize_t i;
     378             : 
     379             :         /*
     380             :         newobj = PyString_FromStringAndSize(NULL, len);
     381             :         if (newobj == NULL)
     382             :                 return NULL;
     383             :         s_new = PyString_AsString(newobj);
     384             :         */
     385           0 :         for (i = 0; i < len; i++) {
     386           0 :                 int c = Py_CHARMASK(*s++);
     387           0 :                 if (Py_ISLOWER(c)) {
     388           0 :                         *result = Py_TOUPPER(c);
     389             :                 }
     390           0 :                 else if (Py_ISUPPER(c)) {
     391           0 :                         *result = Py_TOLOWER(c);
     392             :                 }
     393             :                 else
     394           0 :                         *result = c;
     395           0 :                 result++;
     396             :         }
     397           0 : }
     398             : 

Generated by: LCOV version 1.10