Annotation of embedaddon/libiconv/srclib/streq.h, revision 1.1

1.1     ! misho       1: /* Optimized string comparison.
        !             2:    Copyright (C) 2001-2002, 2007 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:    Lesser 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:   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(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 */

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>