"Fossies" - the Fresh Open Source Software Archive

Member "gcal-4.1/lib/streq.h" (22 Jan 2017, 3998 Bytes) of package /linux/misc/gcal-4.1.tar.gz:


As a special service "Fossies" has tried to format the requested source page into HTML format using (guessed) C and C++ source code syntax highlighting (style: standard) with prefixed line numbers and code folding option. Alternatively you can here view or download the uninterpreted source code file. For more information about "streq.h" see the Fossies "Dox" file reference documentation and the latest Fossies "Diffs" side-by-side code changes report: 4_vs_4.1.

    1 /* Optimized string comparison.
    2    Copyright (C) 2001-2002, 2007, 2009-2017 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_OPT allows to optimize string comparison with a small literal string.
   25      STREQ_OPT (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   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   if (s1[8] == s28)
   44     {
   45       if (s28 == 0)
   46         return 1;
   47       else
   48         return streq9 (s1, s2);
   49     }
   50   else
   51     return 0;
   52 }
   53 
   54 static inline int
   55 streq7 (const char *s1, const char *s2, char s27, char s28)
   56 {
   57   if (s1[7] == s27)
   58     {
   59       if (s27 == 0)
   60         return 1;
   61       else
   62         return streq8 (s1, s2, s28);
   63     }
   64   else
   65     return 0;
   66 }
   67 
   68 static inline int
   69 streq6 (const char *s1, const char *s2, char s26, char s27, char s28)
   70 {
   71   if (s1[6] == s26)
   72     {
   73       if (s26 == 0)
   74         return 1;
   75       else
   76         return streq7 (s1, s2, s27, s28);
   77     }
   78   else
   79     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   if (s1[5] == s25)
   86     {
   87       if (s25 == 0)
   88         return 1;
   89       else
   90         return streq6 (s1, s2, s26, s27, s28);
   91     }
   92   else
   93     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   if (s1[4] == s24)
  100     {
  101       if (s24 == 0)
  102         return 1;
  103       else
  104         return streq5 (s1, s2, s25, s26, s27, s28);
  105     }
  106   else
  107     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   if (s1[3] == s23)
  114     {
  115       if (s23 == 0)
  116         return 1;
  117       else
  118         return streq4 (s1, s2, s24, s25, s26, s27, s28);
  119     }
  120   else
  121     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   if (s1[2] == s22)
  128     {
  129       if (s22 == 0)
  130         return 1;
  131       else
  132         return streq3 (s1, s2, s23, s24, s25, s26, s27, s28);
  133     }
  134   else
  135     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   if (s1[1] == s21)
  142     {
  143       if (s21 == 0)
  144         return 1;
  145       else
  146         return streq2 (s1, s2, s22, s23, s24, s25, s26, s27, s28);
  147     }
  148   else
  149     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 {
  155   if (s1[0] == s20)
  156     {
  157       if (s20 == 0)
  158         return 1;
  159       else
  160         return streq1 (s1, s2, s21, s22, s23, s24, s25, s26, s27, s28);
  161     }
  162   else
  163     return 0;
  164 }
  165 
  166 #define STREQ_OPT(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_OPT(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 */