/* { dg-do run } */
|
/* { dg-do run } */
|
/* { dg-options "-O1 -fno-inline" } */
|
/* { dg-options "-O1 -fno-inline" } */
|
extern void abort (void);
|
extern void abort (void);
|
|
|
static int something;
|
static int something;
|
|
|
static int * converterData[2]={
|
static int * converterData[2]={
|
&something, &something,
|
&something, &something,
|
};
|
};
|
|
|
static struct {
|
static struct {
|
const char *name;
|
const char *name;
|
int type;
|
int type;
|
} const cnvNameType[] = {
|
} const cnvNameType[] = {
|
{ "bocu1", 1 },
|
{ "bocu1", 1 },
|
{ "utf7", 1 },
|
{ "utf7", 1 },
|
{ "utf8", 1 }
|
{ "utf8", 1 }
|
};
|
};
|
|
|
|
|
const int * getAlgorithmicTypeFromName(const char *realName);
|
const int * getAlgorithmicTypeFromName(const char *realName);
|
const int *
|
const int *
|
getAlgorithmicTypeFromName(const char *realName)
|
getAlgorithmicTypeFromName(const char *realName)
|
{
|
{
|
unsigned mid, start, limit;
|
unsigned mid, start, limit;
|
unsigned lastMid;
|
unsigned lastMid;
|
int result;
|
int result;
|
start = 0;
|
start = 0;
|
limit = sizeof(cnvNameType)/sizeof(cnvNameType[0]);
|
limit = sizeof(cnvNameType)/sizeof(cnvNameType[0]);
|
mid = limit;
|
mid = limit;
|
lastMid = 0xffffffff;
|
lastMid = 0xffffffff;
|
|
|
for (;;) {
|
for (;;) {
|
mid = (start + limit) / 2;
|
mid = (start + limit) / 2;
|
if (lastMid == mid) { /* Have we moved? */
|
if (lastMid == mid) { /* Have we moved? */
|
break; /* We haven't moved, and it wasn't found. */
|
break; /* We haven't moved, and it wasn't found. */
|
}
|
}
|
lastMid = mid;
|
lastMid = mid;
|
result = __builtin_strcmp(realName, cnvNameType[mid].name);
|
result = __builtin_strcmp(realName, cnvNameType[mid].name);
|
|
|
if (result < 0) {
|
if (result < 0) {
|
limit = mid;
|
limit = mid;
|
} else if (result > 0) {
|
} else if (result > 0) {
|
start = mid;
|
start = mid;
|
} else {
|
} else {
|
return converterData[cnvNameType[mid].type];
|
return converterData[cnvNameType[mid].type];
|
}
|
}
|
}
|
}
|
|
|
return 0;
|
return 0;
|
}
|
}
|
|
|
int main (void)
|
int main (void)
|
{
|
{
|
if (!getAlgorithmicTypeFromName ("utf8"))
|
if (!getAlgorithmicTypeFromName ("utf8"))
|
abort ();
|
abort ();
|
return 0;
|
return 0;
|
}
|
}
|
|
|