Lines Matching full:info
124 if (cache->info[hash].name == 0)
126 else if (!strcmp (name, cache->info[hash].name))
140 if (cache->info[i].name)
337 /** \brief Parse a list of ranges of type info->type. */
338 static GLboolean parseRanges (driOptionInfo *info, const XML_Char *string) {
366 if (!parseValue (&ranges[i].start, info->type, range) ||
367 !parseValue (&ranges[i].end, info->type, sep+1))
369 if (info->type == DRI_INT &&
372 if (info->type == DRI_FLOAT &&
376 if (!parseValue (&ranges[i].start, info->type, range))
392 info->nRanges = nRanges;
393 info->ranges = ranges;
397 /** \brief Check if a value is in one of info->ranges. */
398 static GLboolean checkValue (const driOptionValue *v, const driOptionInfo *info) {
400 assert (info->type != DRI_BOOL); /* should be caught by the parser */
401 if (info->nRanges == 0)
403 switch (info->type) {
406 for (i = 0; i < info->nRanges; ++i)
407 if (v->_int >= info->ranges[i].start._int &&
408 v->_int <= info->ranges[i].end._int)
412 for (i = 0; i < info->nRanges; ++i)
413 if (v->_float >= info->ranges[i].start._float &&
414 v->_float <= info->ranges[i].end._float)
524 if (!parseValue (&v, data->cache->info[opt].type, value))
526 if (!checkValue (&v, &data->cache->info[opt]))
566 if (cache->info[opt].name)
570 XSTRDUP (cache->info[opt].name, attrVal[OA_NAME]);
573 cache->info[opt].type = DRI_BOOL;
575 cache->info[opt].type = DRI_ENUM;
577 cache->info[opt].type = DRI_INT;
579 cache->info[opt].type = DRI_FLOAT;
583 defaultVal = getenv (cache->info[opt].name);
588 cache->info[opt].name);
591 if (!parseValue (&cache->values[opt], cache->info[opt].type, defaultVal))
592 XML_FATAL ("illegal default value for %s: %s.", cache->info[opt].name, defaultVal);
595 if (cache->info[opt].type == DRI_BOOL)
597 if (!parseRanges (&cache->info[opt], attrVal[OA_VALID]))
599 if (!checkValue (&cache->values[opt], &cache->info[opt]))
602 } else if (cache->info[opt].type == DRI_ENUM) {
605 cache->info[opt].nRanges = 0;
606 cache->info[opt].ranges = NULL;
688 void driParseOptionInfo (driOptionCache *info,
704 info->tableSize = log2size;
705 info->info = CALLOC (size * sizeof (driOptionInfo));
706 info->values = CALLOC (size * sizeof (driOptionValue));
707 if (info->info == NULL || info->values == NULL) {
718 userData.cache = info;
735 realNoptions = countOptions (info);
814 if (cache->info[opt].name == NULL)
816 else if (getenv (cache->info[opt].name))
819 cache->info[opt].name);
820 else if (!parseValue (&cache->values[opt], cache->info[opt].type, value))
894 /** \brief Initialize an option cache based on info */
895 static void initOptionCache (driOptionCache *cache, const driOptionCache *info) {
896 cache->info = info->info;
897 cache->tableSize = info->tableSize;
898 cache->values = MALLOC ((1<<info->tableSize) * sizeof (driOptionValue));
903 memcpy (cache->values, info->values,
904 (1<<info->tableSize) * sizeof (driOptionValue));
946 void driParseConfigFiles (driOptionCache *cache, const driOptionCache *info,
953 initOptionCache (cache, info);
996 void driDestroyOptionInfo (driOptionCache *info) {
997 driDestroyOptionCache (info);
998 if (info->info) {
999 GLuint i, size = 1 << info->tableSize;
1001 if (info->info[i].name) {
1002 FREE (info->info[i].name);
1003 if (info->info[i].ranges)
1004 FREE (info->info[i].ranges);
1007 FREE (info->info);
1019 return cache->info[i].name != NULL && cache->info[i].type == type;
1025 assert (cache->info[i].name != NULL);
1026 assert (cache->info[i].type == DRI_BOOL);
1033 assert (cache->info[i].name != NULL);
1034 assert (cache->info[i].type == DRI_INT || cache->info[i].type == DRI_ENUM);
1041 assert (cache->info[i].name != NULL);
1042 assert (cache->info[i].type == DRI_FLOAT);