LTP GCOV extension - code coverage report
Current view: directory - lib - streq.h
Test: libgnupdf.info
Date: 2011-08-25 Instrumented lines: 47
Code covered: 6.4 % Executed lines: 3

       1                 : /* Optimized string comparison.
       2                 :    Copyright (C) 2001-2002, 2007, 2009-2011 Free Software Foundation, Inc.
       3                 : 
       4                 :    This program is free software: you can redistribute it and/or modify it
       5                 :    under the terms of the GNU General Public License as published
       6                 :    by the Free Software Foundation; either version 3 of the License, or
       7                 :    (at your option) any later version.
       8                 : 
       9                 :    This program is distributed in the hope that it will be useful,
      10                 :    but WITHOUT ANY WARRANTY; without even the implied warranty of
      11                 :    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
      12                 :    General Public License for more details.
      13                 : 
      14                 :    You should have received a copy of the GNU General Public License
      15                 :    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
      16                 : 
      17                 : /* Written by Bruno Haible <bruno@clisp.org>.  */
      18                 : 
      19                 : #ifndef _GL_STREQ_H
      20                 : #define _GL_STREQ_H
      21                 : 
      22                 : #include <string.h>
      23                 : 
      24                 : /* STREQ allows to optimize string comparison with a small literal string.
      25                 :      STREQ (s, "EUC-KR", 'E', 'U', 'C', '-', 'K', 'R', 0, 0, 0)
      26                 :    is semantically equivalent to
      27                 :      strcmp (s, "EUC-KR") == 0
      28                 :    just faster.  */
      29                 : 
      30                 : /* Help GCC to generate good code for string comparisons with
      31                 :    immediate strings. */
      32                 : #if defined (__GNUC__) && defined (__OPTIMIZE__)
      33                 : 
      34                 : static inline int
      35                 : streq9 (const char *s1, const char *s2)
      36                 : {
      37               0 :   return strcmp (s1 + 9, s2 + 9) == 0;
      38                 : }
      39                 : 
      40                 : static inline int
      41                 : streq8 (const char *s1, const char *s2, char s28)
      42                 : {
      43               0 :   if (s1[8] == s28)
      44                 :     {
      45               0 :       if (s28 == 0)
      46               0 :         return 1;
      47                 :       else
      48               0 :         return streq9 (s1, s2);
      49                 :     }
      50                 :   else
      51               0 :     return 0;
      52                 : }
      53                 : 
      54                 : static inline int
      55                 : streq7 (const char *s1, const char *s2, char s27, char s28)
      56                 : {
      57               0 :   if (s1[7] == s27)
      58                 :     {
      59               0 :       if (s27 == 0)
      60               0 :         return 1;
      61                 :       else
      62               0 :         return streq8 (s1, s2, s28);
      63                 :     }
      64                 :   else
      65               0 :     return 0;
      66                 : }
      67                 : 
      68                 : static inline int
      69                 : streq6 (const char *s1, const char *s2, char s26, char s27, char s28)
      70                 : {
      71               0 :   if (s1[6] == s26)
      72                 :     {
      73               0 :       if (s26 == 0)
      74               0 :         return 1;
      75                 :       else
      76               0 :         return streq7 (s1, s2, s27, s28);
      77                 :     }
      78                 :   else
      79               0 :     return 0;
      80                 : }
      81                 : 
      82                 : static inline int
      83                 : streq5 (const char *s1, const char *s2, char s25, char s26, char s27, char s28)
      84                 : {
      85               0 :   if (s1[5] == s25)
      86                 :     {
      87               0 :       if (s25 == 0)
      88               0 :         return 1;
      89                 :       else
      90               0 :         return streq6 (s1, s2, s26, s27, s28);
      91                 :     }
      92                 :   else
      93               0 :     return 0;
      94                 : }
      95                 : 
      96                 : static inline int
      97                 : streq4 (const char *s1, const char *s2, char s24, char s25, char s26, char s27, char s28)
      98                 : {
      99               0 :   if (s1[4] == s24)
     100                 :     {
     101               0 :       if (s24 == 0)
     102               0 :         return 1;
     103                 :       else
     104               0 :         return streq5 (s1, s2, s25, s26, s27, s28);
     105                 :     }
     106                 :   else
     107               0 :     return 0;
     108                 : }
     109                 : 
     110                 : static inline int
     111                 : streq3 (const char *s1, const char *s2, char s23, char s24, char s25, char s26, char s27, char s28)
     112                 : {
     113               0 :   if (s1[3] == s23)
     114                 :     {
     115               0 :       if (s23 == 0)
     116               0 :         return 1;
     117                 :       else
     118               0 :         return streq4 (s1, s2, s24, s25, s26, s27, s28);
     119                 :     }
     120                 :   else
     121               0 :     return 0;
     122                 : }
     123                 : 
     124                 : static inline int
     125                 : streq2 (const char *s1, const char *s2, char s22, char s23, char s24, char s25, char s26, char s27, char s28)
     126                 : {
     127               0 :   if (s1[2] == s22)
     128                 :     {
     129               0 :       if (s22 == 0)
     130               0 :         return 1;
     131                 :       else
     132               0 :         return streq3 (s1, s2, s23, s24, s25, s26, s27, s28);
     133                 :     }
     134                 :   else
     135               0 :     return 0;
     136                 : }
     137                 : 
     138                 : static inline int
     139                 : streq1 (const char *s1, const char *s2, char s21, char s22, char s23, char s24, char s25, char s26, char s27, char s28)
     140                 : {
     141               0 :   if (s1[1] == s21)
     142                 :     {
     143               0 :       if (s21 == 0)
     144               0 :         return 1;
     145                 :       else
     146               0 :         return streq2 (s1, s2, s22, s23, s24, s25, s26, s27, s28);
     147                 :     }
     148                 :   else
     149               0 :     return 0;
     150                 : }
     151                 : 
     152                 : static inline int
     153                 : streq0 (const char *s1, const char *s2, char s20, char s21, char s22, char s23, char s24, char s25, char s26, char s27, char s28)
     154            1498 : {
     155            1498 :   if (s1[0] == s20)
     156                 :     {
     157               0 :       if (s20 == 0)
     158               0 :         return 1;
     159                 :       else
     160               0 :         return streq1 (s1, s2, s21, s22, s23, s24, s25, s26, s27, s28);
     161                 :     }
     162                 :   else
     163            1498 :     return 0;
     164                 : }
     165                 : 
     166                 : #define STREQ(s1,s2,s20,s21,s22,s23,s24,s25,s26,s27,s28) \
     167                 :   streq0 (s1, s2, s20, s21, s22, s23, s24, s25, s26, s27, s28)
     168                 : 
     169                 : #else
     170                 : 
     171                 : #define STREQ(s1,s2,s20,s21,s22,s23,s24,s25,s26,s27,s28) \
     172                 :   (strcmp (s1, s2) == 0)
     173                 : 
     174                 : #endif
     175                 : 
     176                 : #endif /* _GL_STREQ_H */

Generated by: LTP GCOV extension version 1.6