NeoMutt  2025-09-05-55-g97fc89
Teaching an old dog new tricks
DOXYGEN
Loading...
Searching...
No Matches
eqi.h File Reference

Case-insensitive fixed-chunk comparisons. More...

#include <stdbool.h>
#include <stdint.h>
#include <string.h>
+ Include dependency graph for eqi.h:
+ This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Functions

static uint64_t make_lowercase_mask (uint64_t x, int bytenum)
 Create a mask to lowercase alphabetic characters.
 
static bool eqi1 (const char *a, const char b[1])
 Compare two 1-byte strings, ignoring case - See: Case-insensitive fixed-chunk comparisons.
 
static bool eqi2 (const char *a, const char b[2])
 Compare two 2-byte strings, ignoring case - See: Case-insensitive fixed-chunk comparisons.
 
static bool eqi4 (const char *a, const char b[4])
 Compare two 4-byte strings, ignoring case - See: Case-insensitive fixed-chunk comparisons.
 
static bool eqi8 (const char *a, const char b[8])
 Compare two 8-byte strings, ignoring case - See: Case-insensitive fixed-chunk comparisons.
 
static bool eqi5 (const char *a, const char b[5])
 eqi5 - Compare two 5-byte strings, ignoring case - See: Case-insensitive fixed-chunk comparisons
 
static bool eqi6 (const char *a, const char b[6])
 eqi6 - Compare two 6-byte strings, ignoring case - See: Case-insensitive fixed-chunk comparisons
 
static bool eqi9 (const char *a, const char b[9])
 eqi9 - Compare two 9-byte strings, ignoring case - See: Case-insensitive fixed-chunk comparisons
 
static bool eqi10 (const char *a, const char b[10])
 eqi10 - Compare two 10-byte strings, ignoring case - See: Case-insensitive fixed-chunk comparisons
 
static bool eqi11 (const char *a, const char b[11])
 eqi11 - Compare two 11-byte strings, ignoring case - See: Case-insensitive fixed-chunk comparisons
 
static bool eqi12 (const char *a, const char b[12])
 eqi12 - Compare two 12-byte strings, ignoring case - See: Case-insensitive fixed-chunk comparisons
 
static bool eqi13 (const char *a, const char b[13])
 eqi13 - Compare two 13-byte strings, ignoring case - See: Case-insensitive fixed-chunk comparisons
 
static bool eqi14 (const char *a, const char b[14])
 eqi14 - Compare two 14-byte strings, ignoring case - See: Case-insensitive fixed-chunk comparisons
 
static bool eqi15 (const char *a, const char b[15])
 eqi15 - Compare two 15-byte strings, ignoring case - See: Case-insensitive fixed-chunk comparisons
 
static bool eqi16 (const char *a, const char b[16])
 eqi16 - Compare two 16-byte strings, ignoring case - See: Case-insensitive fixed-chunk comparisons
 
static bool eqi17 (const char *a, const char b[17])
 eqi17 - Compare two 17-byte strings, ignoring case - See: Case-insensitive fixed-chunk comparisons
 

Detailed Description

Case-insensitive fixed-chunk comparisons.

Authors
  • Steinar H Gunderson

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/.

Definition in file eqi.h.

Function Documentation

◆ make_lowercase_mask()

static uint64_t make_lowercase_mask ( uint64_t x,
int bytenum )
inlinestatic

Create a mask to lowercase alphabetic characters.

Parameters
xCharacter to test
bytenumWhich byte position to set
Return values
numBitmask

Utility for the functions below

If the character is alphabetic, then the position determines where to shift the 0x20 mask.

  • Position 0: 0x00000020
  • Position 1: 0x00002000
  • Position 2: 0x00200000
  • Position 3: 0x20000000

Definition at line 65 of file eqi.h.

66{
67 const char ch = x >> (bytenum * 8);
68 const uint64_t mask = ((ch >= 'a') && (ch <= 'z')) ? 0x20 : 0;
69 return mask << (bytenum * 8);
70}
+ Here is the caller graph for this function:

◆ eqi1()

static bool eqi1 ( const char * a,
const char b[1] )
inlinestatic

Compare two 1-byte strings, ignoring case - See: Case-insensitive fixed-chunk comparisons.

Parameters
aFirst string
bSecond string, must be lower case
Return values
trueStrings match

Definition at line 78 of file eqi.h.

79{
80 uint8_t b8 = b[0];
81 return (*a | make_lowercase_mask(b8, 0)) == (unsigned char) b[0];
82}
static uint64_t make_lowercase_mask(uint64_t x, int bytenum)
Create a mask to lowercase alphabetic characters.
Definition eqi.h:65
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ eqi2()

static bool eqi2 ( const char * a,
const char b[2] )
inlinestatic

Compare two 2-byte strings, ignoring case - See: Case-insensitive fixed-chunk comparisons.

Parameters
aFirst string
bSecond string, must be lower case
Return values
trueStrings match

Definition at line 90 of file eqi.h.

91{
92 uint16_t a16, b16;
93 memcpy(&a16, a, sizeof(a16));
94 memcpy(&b16, b, sizeof(b16));
95 const uint16_t lowercase_mask = make_lowercase_mask(b16, 0) |
96 make_lowercase_mask(b16, 1);
97 return (a16 | lowercase_mask) == b16;
98}
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ eqi4()

static bool eqi4 ( const char * a,
const char b[4] )
inlinestatic

Compare two 4-byte strings, ignoring case - See: Case-insensitive fixed-chunk comparisons.

Parameters
aFirst string
bSecond string, must be lower case
Return values
trueStrings match

Definition at line 106 of file eqi.h.

107{
108 uint32_t a32, b32;
109 memcpy(&a32, a, sizeof(a32));
110 memcpy(&b32, b, sizeof(b32));
111 const uint32_t lowercase_mask = make_lowercase_mask(b32, 0) |
112 make_lowercase_mask(b32, 1) |
113 make_lowercase_mask(b32, 2) |
114 make_lowercase_mask(b32, 3);
115 return (a32 | lowercase_mask) == b32;
116}
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ eqi8()

static bool eqi8 ( const char * a,
const char b[8] )
inlinestatic

Compare two 8-byte strings, ignoring case - See: Case-insensitive fixed-chunk comparisons.

Parameters
aFirst string
bSecond string, must be lower case
Return values
trueStrings match

Definition at line 124 of file eqi.h.

125{
126 uint64_t a64, b64;
127 memcpy(&a64, a, sizeof(a64));
128 memcpy(&b64, b, sizeof(b64));
129 const uint64_t lowercase_mask = make_lowercase_mask(b64, 0) |
130 make_lowercase_mask(b64, 1) |
131 make_lowercase_mask(b64, 2) |
132 make_lowercase_mask(b64, 3) |
133 make_lowercase_mask(b64, 4) |
134 make_lowercase_mask(b64, 5) |
135 make_lowercase_mask(b64, 6) |
136 make_lowercase_mask(b64, 7);
137 return (a64 | lowercase_mask) == b64;
138}
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ eqi5()

static bool eqi5 ( const char * a,
const char b[5] )
inlinestatic

eqi5 - Compare two 5-byte strings, ignoring case - See: Case-insensitive fixed-chunk comparisons

Definition at line 145 of file eqi.h.

146{
147 return eqi4(a, b) && eqi1(a + 1, b + 1);
148}
static bool eqi4(const char *a, const char b[4])
Compare two 4-byte strings, ignoring case - See: Case-insensitive fixed-chunk comparisons.
Definition eqi.h:106
static bool eqi1(const char *a, const char b[1])
Compare two 1-byte strings, ignoring case - See: Case-insensitive fixed-chunk comparisons.
Definition eqi.h:78
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ eqi6()

static bool eqi6 ( const char * a,
const char b[6] )
inlinestatic

eqi6 - Compare two 6-byte strings, ignoring case - See: Case-insensitive fixed-chunk comparisons

Definition at line 151 of file eqi.h.

152{
153 return eqi4(a, b) && eqi2(a + 4, b + 4);
154}
static bool eqi2(const char *a, const char b[2])
Compare two 2-byte strings, ignoring case - See: Case-insensitive fixed-chunk comparisons.
Definition eqi.h:90
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ eqi9()

static bool eqi9 ( const char * a,
const char b[9] )
inlinestatic

eqi9 - Compare two 9-byte strings, ignoring case - See: Case-insensitive fixed-chunk comparisons

Definition at line 159 of file eqi.h.

160{
161 return eqi8(a, b) && eqi1(a + 8, b + 8);
162}
static bool eqi8(const char *a, const char b[8])
Compare two 8-byte strings, ignoring case - See: Case-insensitive fixed-chunk comparisons.
Definition eqi.h:124
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ eqi10()

static bool eqi10 ( const char * a,
const char b[10] )
inlinestatic

eqi10 - Compare two 10-byte strings, ignoring case - See: Case-insensitive fixed-chunk comparisons

Definition at line 165 of file eqi.h.

166{
167 return eqi8(a, b) && eqi2(a + 8, b + 8);
168}
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ eqi11()

static bool eqi11 ( const char * a,
const char b[11] )
inlinestatic

eqi11 - Compare two 11-byte strings, ignoring case - See: Case-insensitive fixed-chunk comparisons

Definition at line 171 of file eqi.h.

172{
173 return eqi8(a, b) && eqi4(a + 7, b + 7);
174}
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ eqi12()

static bool eqi12 ( const char * a,
const char b[12] )
inlinestatic

eqi12 - Compare two 12-byte strings, ignoring case - See: Case-insensitive fixed-chunk comparisons

Definition at line 177 of file eqi.h.

178{
179 return eqi8(a, b) && eqi4(a + 8, b + 8);
180}
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ eqi13()

static bool eqi13 ( const char * a,
const char b[13] )
inlinestatic

eqi13 - Compare two 13-byte strings, ignoring case - See: Case-insensitive fixed-chunk comparisons

Definition at line 183 of file eqi.h.

184{
185 return eqi8(a, b) && eqi8(a + 5, b + 5);
186}
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ eqi14()

static bool eqi14 ( const char * a,
const char b[14] )
inlinestatic

eqi14 - Compare two 14-byte strings, ignoring case - See: Case-insensitive fixed-chunk comparisons

Definition at line 189 of file eqi.h.

190{
191 return eqi8(a, b) && eqi8(a + 6, b + 6);
192}
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ eqi15()

static bool eqi15 ( const char * a,
const char b[15] )
inlinestatic

eqi15 - Compare two 15-byte strings, ignoring case - See: Case-insensitive fixed-chunk comparisons

Definition at line 195 of file eqi.h.

196{
197 return eqi8(a, b) && eqi8(a + 7, b + 7);
198}
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ eqi16()

static bool eqi16 ( const char * a,
const char b[16] )
inlinestatic

eqi16 - Compare two 16-byte strings, ignoring case - See: Case-insensitive fixed-chunk comparisons

Definition at line 201 of file eqi.h.

202{
203 return eqi8(a, b) && eqi8(a + 8, b + 8);
204}
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ eqi17()

static bool eqi17 ( const char * a,
const char b[17] )
inlinestatic

eqi17 - Compare two 17-byte strings, ignoring case - See: Case-insensitive fixed-chunk comparisons

Definition at line 207 of file eqi.h.

208{
209 return eqi16(a, b) && eqi1(a + 16, b + 16);
210}
static bool eqi16(const char *a, const char b[16])
eqi16 - Compare two 16-byte strings, ignoring case - See: Case-insensitive fixed-chunk comparisons
Definition eqi.h:201
+ Here is the call graph for this function:
+ Here is the caller graph for this function: