option_list

read_data_cfg

list *read_data_cfg(char *filename)
{
    FILE *file = fopen(filename, "r");
    if(file == 0) file_error(filename);
    char *line;
    int nu = 0;
    list *options = make_list();
    while((line=fgetl(file)) != 0){
        ++ nu;
        strip(line);
        switch(line[0]){
            case '\0':
            case '#':
            case ';':
                free(line);
                break;
            default:
                if(!read_option(line, options)){
                    fprintf(stderr, "Config file error line %d, could parse: %s\n", nu, line);
                    free(line);
                }
                break;
        }
    }
    fclose(file);
    return options;
}

ํ•จ์ˆ˜ ์ด๋ฆ„: read_data_cfg

์ž…๋ ฅ:

  • filename (char *): ์ฝ์„ ํŒŒ์ผ์˜ ์ด๋ฆ„

๋™์ž‘:

  • ์ง€์ •๋œ ํŒŒ์ผ์—์„œ ๋ฐ์ดํ„ฐ ๊ตฌ์„ฑ ํŒŒ์ผ์„ ์ฝ์–ด๋“ค์ด๊ณ  ๊ฐ ์„ค์ • ์˜ต์…˜์„ ๊ตฌ๋ฌธ ๋ถ„์„ํ•˜์—ฌ ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ๋กœ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

์„ค๋ช…:

  • ์ง€์ •๋œ ํŒŒ์ผ์„ ์—ด๊ณ  ํŒŒ์ผ์„ ์„ฑ๊ณต์ ์œผ๋กœ ์—ด์ง€ ๋ชปํ•œ ๊ฒฝ์šฐ ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.

  • ํŒŒ์ผ์—์„œ ํ•œ ์ค„์”ฉ ์ฝ์œผ๋ฉฐ ๊ฐ ์ค„์˜ ์ฒซ ๋ฌธ์ž๋ฅผ ํ™•์ธํ•˜์—ฌ ์˜ต์…˜์„ ๊ตฌ๋ฌธ ๋ถ„์„ํ•œ๋‹ค.

  • ์ฝ์€ ์˜ต์…˜์„ ์˜ต์…˜ ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ์— ์ถ”๊ฐ€ํ•˜๊ณ  ์ด๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

get_metadata

metadata get_metadata(char *file)
{
    metadata m = {0};
    list *options = read_data_cfg(file);

    char *name_list = option_find_str(options, "names", 0);
    if(!name_list) name_list = option_find_str(options, "labels", 0);
    if(!name_list) {
        fprintf(stderr, "No names or labels found\n");
    } else {
        m.names = get_labels(name_list);
    }
    m.classes = option_find_int(options, "classes", 2);
    free_list(options);
    return m;
}

ํ•จ์ˆ˜ ์ด๋ฆ„: get_metadata

์ž…๋ ฅ:

  • char *file (๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ํŒŒ์ผ ์ด๋ฆ„)

๋™์ž‘:

  • ์ง€์ •๋œ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ํŒŒ์ผ์„ ์ฝ๊ณ , ์ด๋ฆ„ ๋˜๋Š” ๋ ˆ์ด๋ธ” ๋ชฉ๋ก์„ ์ฐพ์•„์„œ ๊ฐ€์ ธ์™€์„œ metadata ๊ตฌ์กฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•จ.

์„ค๋ช…:

  • ํ•จ์ˆ˜๋Š” metadata ๊ตฌ์กฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋ฉฐ, ์ด ๊ตฌ์กฐ์ฒด๋Š” ํด๋ž˜์Šค ์ˆ˜์™€ ๋ ˆ์ด๋ธ” ์ด๋ฆ„์„ ์ €์žฅํ•จ.

  • ํ•จ์ˆ˜๋Š” ์ง€์ •๋œ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ํŒŒ์ผ์„ ์ฝ์–ด๋“ค์ด๊ณ , "names" ๋˜๋Š” "labels" ํ•„๋“œ์—์„œ ๋ ˆ์ด๋ธ” ์ด๋ฆ„์„ ์ฐพ์Œ.

  • ๋ ˆ์ด๋ธ” ์ด๋ฆ„์€ ์‰ผํ‘œ(,)๋กœ ๊ตฌ๋ถ„๋œ ๋ฌธ์ž์—ด๋กœ ๊ตฌ์„ฑ๋˜๋ฉฐ, get_labels() ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฆฌ์ŠคํŠธ๋กœ ๋ณ€ํ™˜ํ•จ.

  • ํ•จ์ˆ˜๋Š” "classes" ํ•„๋“œ์—์„œ ํด๋ž˜์Šค ์ˆ˜๋ฅผ ์ฐพ์Œ.

  • ํ•จ์ˆ˜๋Š” ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ํŒŒ์ผ์—์„œ ์ฝ์€ ๋ชจ๋“  ํ•„๋“œ๋ฅผ ํ•ด์ œํ•จ.

read_option

int read_option(char *s, list *options)
{
    size_t i;
    size_t len = strlen(s);
    char *val = 0;
    for(i = 0; i < len; ++i){
        if(s[i] == '='){
            s[i] = '\0';
            val = s+i+1;
            break;
        }
    }
    if(i == len-1) return 0;
    char *key = s;
    option_insert(options, key, val);
    return 1;
}

ํ•จ์ˆ˜ ์ด๋ฆ„: read_option

์ž…๋ ฅ:

  • char ํฌ์ธํ„ฐ s (์„ค์ • ํŒŒ์ผ์—์„œ ์ฝ์€ ํ•œ ์ค„์˜ ๋ฌธ์ž์—ด)

  • list ํฌ์ธํ„ฐ options (์„ค์ • ๊ฐ’์„ ์ €์žฅํ•˜๋Š” ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ)

๋™์ž‘:

  • ์ž…๋ ฅ์œผ๋กœ ๋ฐ›์€ ๋ฌธ์ž์—ด s๋ฅผ key-value ์Œ์œผ๋กœ ๋ถ„๋ฆฌํ•˜๊ณ , key์™€ value๋ฅผ options ๋ฆฌ์ŠคํŠธ์— ์ถ”๊ฐ€ํ•œ๋‹ค.

์„ค๋ช…:

  • s ๋ฌธ์ž์—ด์—์„œ '=' ๋ฌธ์ž๋ฅผ ์ฐพ์•„ ๊ทธ ์œ„์น˜๋ฅผ ๊ธฐ์ค€์œผ๋กœ key์™€ value๋ฅผ ๊ตฌ๋ถ„ํ•œ๋‹ค.

  • key์™€ value๋ฅผ options ๋ฆฌ์ŠคํŠธ์— ์ถ”๊ฐ€ํ•œ๋‹ค.

  • ์„ค์ • ํŒŒ์ผ์—์„œ ํ•œ ์ค„์„ ์ž˜๋ชป ์ฝ๊ฑฐ๋‚˜ '=' ๋ฌธ์ž๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ์—๋Š” 0์„ ๋ฐ˜ํ™˜ํ•˜์—ฌ ์˜ค๋ฅ˜๋ฅผ ๋‚˜ํƒ€๋‚ธ๋‹ค.

option_insert

void option_insert(list *l, char *key, char *val)
{
    kvp *p = malloc(sizeof(kvp));
    p->key = key;
    p->val = val;
    p->used = 0;
    list_insert(l, p);
}

ํ•จ์ˆ˜ ์ด๋ฆ„: option_insert

์ž…๋ ฅ:

  • l: option_insert๋ฅผ ์ˆ˜ํ–‰ํ•  list ๊ตฌ์กฐ์ฒด ํฌ์ธํ„ฐ

  • key: ์‚ฝ์ž…ํ•  key ๋ฌธ์ž์—ด ํฌ์ธํ„ฐ

  • val: ์‚ฝ์ž…ํ•  value ๋ฌธ์ž์—ด ํฌ์ธํ„ฐ

๋™์ž‘:

  • ์ฃผ์–ด์ง„ key์™€ val์„ ์ƒˆ๋กœ์šด kvp ๊ตฌ์กฐ์ฒด์— ์ €์žฅํ•˜๊ณ , used๋Š” 0์œผ๋กœ ์ดˆ๊ธฐํ™”ํ•œ ๋’ค, list l์— ์ƒˆ๋กœ์šด kvp ๊ตฌ์กฐ์ฒด๋ฅผ ์‚ฝ์ž…ํ•œ๋‹ค.

์„ค๋ช…:

  • option_insert ํ•จ์ˆ˜๋Š” key์™€ value๋ฅผ ๊ฐ–๋Š” ์ƒˆ๋กœ์šด kvp ๊ตฌ์กฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜์—ฌ, ์ž…๋ ฅ๋ฐ›์€ list l์— ์‚ฝ์ž…ํ•˜๋Š” ํ•จ์ˆ˜์ด๋‹ค.

  • kvp ๊ตฌ์กฐ์ฒด๋Š” key์™€ val, ๊ทธ๋ฆฌ๊ณ  ์ด kvp๊ฐ€ ์‚ฌ์šฉ๋˜์—ˆ๋Š”์ง€๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” used ํ•„๋“œ๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ๋‹ค.

  • option_insert ํ•จ์ˆ˜๋Š” ์ฃผ์–ด์ง„ key์™€ val๋กœ ์ƒˆ๋กœ์šด kvp ๊ตฌ์กฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ณ , used๋ฅผ 0์œผ๋กœ ์ดˆ๊ธฐํ™”ํ•œ ๋’ค, ์ด๋ฅผ list l์— ์‚ฝ์ž…ํ•œ๋‹ค.

option_unused

void option_unused(list *l)
{
    node *n = l->front;
    while(n){
        kvp *p = (kvp *)n->val;
        if(!p->used){
            fprintf(stderr, "Unused field: '%s = %s'\n", p->key, p->val);
        }
        n = n->next;
    }
}

ํ•จ์ˆ˜ ์ด๋ฆ„: option_unused

์ž…๋ ฅ:

  • list ํฌ์ธํ„ฐ l

๋™์ž‘:

  • l ๋ฆฌ์ŠคํŠธ์— ์žˆ๋Š” ๋ชจ๋“  kvp(key-value pair)๋“ค ์ค‘์— ์‚ฌ์šฉ๋˜์ง€ ์•Š์€ kvp๋“ค์„ ์ฐพ์•„์„œ stderr๋กœ ์ถœ๋ ฅํ•œ๋‹ค.

์„ค๋ช…:

  • ์ด ํ•จ์ˆ˜๋Š” list l์— ์žˆ๋Š” kvp๋“ค ์ค‘์— ์‚ฌ์šฉ๋˜์ง€ ์•Š์€ kvp๋“ค์„ ์ฐพ์•„์„œ ์ถœ๋ ฅํ•˜๋Š” ํ•จ์ˆ˜์ด๋‹ค.

  • l์€ linked list ๊ตฌ์กฐ์ฒด์˜ ํฌ์ธํ„ฐ์ด๋‹ค.

  • kvp ๊ตฌ์กฐ์ฒด๋Š” key-value pair๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๊ตฌ์กฐ์ฒด๋กœ key์™€ val๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ๋‹ค.

  • n์€ linked list์—์„œ ํ˜„์žฌ ๊ฒ€์‚ฌ ์ค‘์ธ ๋…ธ๋“œ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ํฌ์ธํ„ฐ์ด๋‹ค.

  • while๋ฌธ์€ linked list์˜ ๋ชจ๋“  ๋…ธ๋“œ๋ฅผ ๊ฒ€์‚ฌํ•œ๋‹ค.

  • p๋Š” ํ˜„์žฌ ๋…ธ๋“œ์˜ kvp๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ํฌ์ธํ„ฐ์ด๋‹ค.

  • ๋งŒ์•ฝ ํ˜„์žฌ kvp๊ฐ€ ์‚ฌ์šฉ๋˜์ง€ ์•Š์•˜์œผ๋ฉด, ํ•ด๋‹น kvp์˜ key์™€ val์„ stderr๋กœ ์ถœ๋ ฅํ•œ๋‹ค.

  • n์€ ๋‹ค์Œ ๋…ธ๋“œ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ํฌ์ธํ„ฐ๋กœ ์—…๋ฐ์ดํŠธ๋œ๋‹ค.

option_find

char *option_find(list *l, char *key)
{
    node *n = l->front;
    while(n){
        kvp *p = (kvp *)n->val;
        if(strcmp(p->key, key) == 0){
            p->used = 1;
            return p->val;
        }
        n = n->next;
    }
    return 0;
}

ํ•จ์ˆ˜ ์ด๋ฆ„: option_find

์ž…๋ ฅ:

  • list ํฌ์ธํ„ฐ l

  • char ํฌ์ธํ„ฐ key

๋™์ž‘:

  • ์ฃผ์–ด์ง„ key๋กœ list l์—์„œ kvp ๊ตฌ์กฐ์ฒด์˜ key์™€ ๋น„๊ตํ•˜์—ฌ ์ผ์น˜ํ•˜๋Š” key๋ฅผ ์ฐพ๊ณ  ํ•ด๋‹นํ•˜๋Š” kvp ๊ตฌ์กฐ์ฒด์˜ val ํฌ์ธํ„ฐ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๊ณ , ์‚ฌ์šฉ๋œ kvp ๊ตฌ์กฐ์ฒด์˜ used ๊ฐ’์„ 1๋กœ ์„ค์ •ํ•œ๋‹ค.

์„ค๋ช…:

  • option_find ํ•จ์ˆ˜๋Š” ์ฃผ์–ด์ง„ key์— ํ•ด๋‹นํ•˜๋Š” ๊ฐ’(val)์„ ์ฐพ๋Š” ํ•จ์ˆ˜๋กœ, ์ด๋ฅผ ์œ„ํ•ด key-value pair(kvp) ๊ตฌ์กฐ์ฒด๋ฅผ ํ™œ์šฉํ•œ๋‹ค.

  • l์€ kvp ๊ตฌ์กฐ์ฒด๋ฅผ ๋ชจ์•„๋‘” list๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ํฌ์ธํ„ฐ์ด๋ฉฐ, key๋Š” ์ฐพ๊ณ ์ž ํ•˜๋Š” ๊ฐ’์˜ key๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ํฌ์ธํ„ฐ์ด๋‹ค.

  • ๋ฐ˜ํ™˜๊ฐ’์€ ์ฐพ์€ ๊ฐ’(val)์˜ ํฌ์ธํ„ฐ์ด๋ฉฐ, ํ•ด๋‹นํ•˜๋Š” key๊ฐ€ ์—†์„ ๊ฒฝ์šฐ 0์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

option_find_str

char *option_find_str(list *l, char *key, char *def)
{
    char *v = option_find(l, key);
    if(v) return v;
    if(def) fprintf(stderr, "%s: Using default '%s'\n", key, def);
    return def;
}

ํ•จ์ˆ˜ ์ด๋ฆ„: option_find_str

์ž…๋ ฅ:

  • list *l: ์˜ต์…˜ ๋ฆฌ์ŠคํŠธ

  • char *key: ๊ฒ€์ƒ‰ํ•  ์˜ต์…˜ ํ‚ค

  • char *def: ์˜ต์…˜์ด ์—†์„ ๊ฒฝ์šฐ ๋ฐ˜ํ™˜ํ•  ๊ธฐ๋ณธ๊ฐ’

๋™์ž‘:

  • ์ฃผ์–ด์ง„ ๋ฆฌ์ŠคํŠธ์—์„œ ์ฃผ์–ด์ง„ ํ‚ค๋ฅผ ๊ฒ€์ƒ‰ํ•˜๊ณ  ํ•ด๋‹นํ•˜๋Š” ๊ฐ’์ด ์žˆ๋‹ค๋ฉด ๋ฐ˜ํ™˜ํ•œ๋‹ค.

  • ๊ฐ’์ด ์—†๋Š” ๊ฒฝ์šฐ, ๊ธฐ๋ณธ๊ฐ’(def)์„ ๋ฐ˜ํ™˜ํ•˜๊ณ  ํ•ด๋‹นํ•˜๋Š” ํ‚ค์™€ ๊ธฐ๋ณธ๊ฐ’์„ ์—๋Ÿฌ ๋ฉ”์‹œ์ง€๋กœ ์ถœ๋ ฅํ•œ๋‹ค.

์„ค๋ช…:

  • ์ด ํ•จ์ˆ˜๋Š” ์ฃผ์–ด์ง„ ๋ฆฌ์ŠคํŠธ์—์„œ ํŠน์ • ์˜ต์…˜์˜ ๊ฐ’์„ ๊ฒ€์ƒ‰ํ•˜๋Š” ํ•จ์ˆ˜์ด๋‹ค.

  • ๋งŒ์•ฝ ํ•ด๋‹นํ•˜๋Š” ์˜ต์…˜์˜ ๊ฐ’์ด ์žˆ๋‹ค๋ฉด ๋ฌธ์ž์—ด ํ˜•ํƒœ๋กœ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

  • ์˜ต์…˜์ด ์—†๋Š” ๊ฒฝ์šฐ, ๊ธฐ๋ณธ๊ฐ’(def)์„ ๋ฐ˜ํ™˜ํ•˜๊ณ  ํ•ด๋‹นํ•˜๋Š” ํ‚ค์™€ ๊ธฐ๋ณธ๊ฐ’์„ ์—๋Ÿฌ ๋ฉ”์‹œ์ง€๋กœ ์ถœ๋ ฅํ•œ๋‹ค.

  • ์ด ํ•จ์ˆ˜๋Š” YOLO์™€ ๊ฐ™์€ ๋”ฅ๋Ÿฌ๋‹ ๋ชจ๋ธ์—์„œ ์‚ฌ์šฉ๋˜๋Š” ์˜ต์…˜ ๊ฐ’์„ ๊ฐ€์ ธ์˜ค๋Š” ๋ฐ ์‚ฌ์šฉ๋œ๋‹ค.

option_find_int

int option_find_int(list *l, char *key, int def)
{
    char *v = option_find(l, key);
    if(v) return atoi(v);
    fprintf(stderr, "%s: Using default '%d'\n", key, def);
    return def;
}

ํ•จ์ˆ˜ ์ด๋ฆ„: option_find_int

์ž…๋ ฅ:

  • list *l: ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ ํฌ์ธํ„ฐ

  • char *key: ์ฐพ์œผ๋ ค๋Š” ์˜ต์…˜ ํ‚ค ๋ฌธ์ž์—ด ํฌ์ธํ„ฐ

  • int def: ๊ธฐ๋ณธ๊ฐ’

๋™์ž‘:

  • ์ž…๋ ฅ๋œ ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ์—์„œ ์ฃผ์–ด์ง„ ์˜ต์…˜ ํ‚ค๋ฅผ ์ฐพ์•„ ํ•ด๋‹น ๊ฐ’์˜ ์ •์ˆ˜ํ˜•์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

  • ํ•ด๋‹น ์˜ต์…˜ ํ‚ค๊ฐ€ ์—†์„ ๊ฒฝ์šฐ ๊ธฐ๋ณธ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•˜๊ณ  ํ‘œ์ค€ ์˜ค๋ฅ˜ ์ถœ๋ ฅ์— ํ•ด๋‹น ์˜ต์…˜ ํ‚ค์™€ ๊ธฐ๋ณธ๊ฐ’์„ ์ถœ๋ ฅํ•œ๋‹ค.

์„ค๋ช…:

  • ์ž…๋ ฅ๋œ ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ๋Š” ์˜ต์…˜ ํ‚ค์™€ ๊ฐ’์˜ ์Œ์„ ์ €์žฅํ•˜๊ณ  ์žˆ๋‹ค.

  • option_find ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•ด ์ฃผ์–ด์ง„ ์˜ต์…˜ ํ‚ค์— ํ•ด๋‹นํ•˜๋Š” ๊ฐ’ ๋ฌธ์ž์—ด ํฌ์ธํ„ฐ๋ฅผ ์ฐพ๋Š”๋‹ค.

  • ์ฐพ์€ ๋ฌธ์ž์—ด ํฌ์ธํ„ฐ๋ฅผ atoi ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•ด ์ •์ˆ˜ํ˜•์œผ๋กœ ๋ณ€ํ™˜ํ•˜๊ณ  ๋ฐ˜ํ™˜ํ•œ๋‹ค.

  • ํ•ด๋‹น ์˜ต์…˜ ํ‚ค๊ฐ€ ์—†์„ ๊ฒฝ์šฐ ํ‘œ์ค€ ์˜ค๋ฅ˜ ์ถœ๋ ฅ์— ํ•ด๋‹น ์˜ต์…˜ ํ‚ค์™€ ๊ธฐ๋ณธ๊ฐ’์„ ์ถœ๋ ฅํ•˜๊ณ  ๊ธฐ๋ณธ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

option_find_int_quiet

int option_find_int_quiet(list *l, char *key, int def)
{
    char *v = option_find(l, key);
    if(v) return atoi(v);
    return def;
}

ํ•จ์ˆ˜ ์ด๋ฆ„: option_find_int_quiet

์ž…๋ ฅ:

  • list *l: ์„ค์ • ํŒŒ์ผ์—์„œ ์ฝ์–ด์˜จ ์„ค์ •๋“ค์ด ์ €์žฅ๋œ list ๊ตฌ์กฐ์ฒด ํฌ์ธํ„ฐ

  • char *key: ์ฝ์–ด์˜ฌ ์„ค์ •์˜ ์ด๋ฆ„

  • int def: ์„ค์ • ํŒŒ์ผ์—์„œ ํ•ด๋‹น key์— ๋Œ€ํ•œ ๊ฐ’์„ ์ฐพ์ง€ ๋ชปํ–ˆ์„ ๊ฒฝ์šฐ ์‚ฌ์šฉํ•  ๊ธฐ๋ณธ๊ฐ’

๋™์ž‘:

  • ์ž…๋ ฅ์œผ๋กœ ๋ฐ›์€ key์— ํ•ด๋‹นํ•˜๋Š” ๊ฐ’์„ ์„ค์ • ํŒŒ์ผ์—์„œ ์ฐพ์Šต๋‹ˆ๋‹ค.

  • ํ•ด๋‹น ๊ฐ’์ด ์กด์žฌํ•  ๊ฒฝ์šฐ int ํ˜•ํƒœ๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

  • ํ•ด๋‹น ๊ฐ’์ด ์กด์žฌํ•˜์ง€ ์•Š์„ ๊ฒฝ์šฐ ๊ธฐ๋ณธ๊ฐ’ def๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

  • ์ถœ๋ ฅ์„ ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์„ค๋ช…:

  • ์ด ํ•จ์ˆ˜๋Š” ์„ค์ • ํŒŒ์ผ์—์„œ int ํ˜•ํƒœ์˜ ๊ฐ’์„ ์ฝ์–ด์˜ค๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

  • ์ž…๋ ฅ์œผ๋กœ ๋ฐ›์€ ์„ค์ • ํŒŒ์ผ(list ๊ตฌ์กฐ์ฒด)์—์„œ key์— ํ•ด๋‹นํ•˜๋Š” ๊ฐ’์„ ์ฐพ์Šต๋‹ˆ๋‹ค.

  • ์ฐพ์€ ๊ฐ’์„ atoi ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•˜์—ฌ int ํ˜•ํƒœ๋กœ ๋ณ€ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

  • ๋งŒ์•ฝ key์— ํ•ด๋‹นํ•˜๋Š” ๊ฐ’์ด ์กด์žฌํ•˜์ง€ ์•Š์„ ๊ฒฝ์šฐ ๊ธฐ๋ณธ๊ฐ’ def๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

  • ์ด ํ•จ์ˆ˜๋Š” ์„ค์ • ํŒŒ์ผ์—์„œ ์ฝ์–ด์˜จ int ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

  • ๋งŒ์•ฝ ์„ค์ • ํŒŒ์ผ์—์„œ ํ•ด๋‹น key์— ๋Œ€ํ•œ ๊ฐ’์„ ์ฐพ์ง€ ๋ชปํ–ˆ์„ ๊ฒฝ์šฐ, ๊ธฐ๋ณธ๊ฐ’ def๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

  • ์ด ํ•จ์ˆ˜๋Š” ์ถœ๋ ฅ์„ ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

option_find_float_quiet

float option_find_float_quiet(list *l, char *key, float def)
{
    char *v = option_find(l, key);
    if(v) return atof(v);
    return def;
}

ํ•จ์ˆ˜ ์ด๋ฆ„: option_find_float_quiet

์ž…๋ ฅ:

  • list *l: ์„ค์ • ํŒŒ์ผ์—์„œ ์ฝ์–ด์˜จ ์„ค์ •๋“ค์ด ์ €์žฅ๋œ list ๊ตฌ์กฐ์ฒด ํฌ์ธํ„ฐ

  • char *key: ์ฝ์–ด์˜ฌ ์„ค์ •์˜ ์ด๋ฆ„

  • float def: ์„ค์ • ํŒŒ์ผ์—์„œ ํ•ด๋‹น key์— ๋Œ€ํ•œ ๊ฐ’์„ ์ฐพ์ง€ ๋ชปํ–ˆ์„ ๊ฒฝ์šฐ ์‚ฌ์šฉํ•  ๊ธฐ๋ณธ๊ฐ’

๋™์ž‘:

  • ์ž…๋ ฅ์œผ๋กœ ๋ฐ›์€ key์— ํ•ด๋‹นํ•˜๋Š” ๊ฐ’์„ ์„ค์ • ํŒŒ์ผ์—์„œ ์ฐพ์Šต๋‹ˆ๋‹ค.

  • ํ•ด๋‹น ๊ฐ’์ด ์กด์žฌํ•  ๊ฒฝ์šฐ float ํ˜•ํƒœ๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

  • ํ•ด๋‹น ๊ฐ’์ด ์กด์žฌํ•˜์ง€ ์•Š์„ ๊ฒฝ์šฐ ๊ธฐ๋ณธ๊ฐ’ def๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

  • ์ถœ๋ ฅ์„ ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์„ค๋ช…:

  • ์ด ํ•จ์ˆ˜๋Š” ์„ค์ • ํŒŒ์ผ์—์„œ float ํ˜•ํƒœ์˜ ๊ฐ’์„ ์ฝ์–ด์˜ค๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

  • ์ž…๋ ฅ์œผ๋กœ ๋ฐ›์€ ์„ค์ • ํŒŒ์ผ(list ๊ตฌ์กฐ์ฒด)์—์„œ key์— ํ•ด๋‹นํ•˜๋Š” ๊ฐ’์„ ์ฐพ์Šต๋‹ˆ๋‹ค.

  • ์ฐพ์€ ๊ฐ’์„ atof ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•˜์—ฌ float ํ˜•ํƒœ๋กœ ๋ณ€ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

  • ๋งŒ์•ฝ key์— ํ•ด๋‹นํ•˜๋Š” ๊ฐ’์ด ์กด์žฌํ•˜์ง€ ์•Š์„ ๊ฒฝ์šฐ ๊ธฐ๋ณธ๊ฐ’ def๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

  • ์ด ํ•จ์ˆ˜๋Š” ์„ค์ • ํŒŒ์ผ์—์„œ ์ฝ์–ด์˜จ float ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

  • ๋งŒ์•ฝ ์„ค์ • ํŒŒ์ผ์—์„œ ํ•ด๋‹น key์— ๋Œ€ํ•œ ๊ฐ’์„ ์ฐพ์ง€ ๋ชปํ–ˆ์„ ๊ฒฝ์šฐ, ๊ธฐ๋ณธ๊ฐ’ def๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

  • ์ด ํ•จ์ˆ˜๋Š” ์ถœ๋ ฅ์„ ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

option_find_float

float option_find_float(list *l, char *key, float def)
{
    char *v = option_find(l, key);
    if(v) return atof(v);
    fprintf(stderr, "%s: Using default '%lf'\n", key, def);
    return def;
}

ํ•จ์ˆ˜ ์ด๋ฆ„: option_find_float

์ž…๋ ฅ:

  • list *l: ์„ค์ • ํŒŒ์ผ์—์„œ ์ฝ์–ด์˜จ ์„ค์ •๋“ค์ด ์ €์žฅ๋œ list ๊ตฌ์กฐ์ฒด ํฌ์ธํ„ฐ

  • char *key: ์ฝ์–ด์˜ฌ ์„ค์ •์˜ ์ด๋ฆ„

  • float def: ์„ค์ • ํŒŒ์ผ์—์„œ ํ•ด๋‹น key์— ๋Œ€ํ•œ ๊ฐ’์„ ์ฐพ์ง€ ๋ชปํ–ˆ์„ ๊ฒฝ์šฐ ์‚ฌ์šฉํ•  ๊ธฐ๋ณธ๊ฐ’

๋™์ž‘:

  • ์ž…๋ ฅ์œผ๋กœ ๋ฐ›์€ key์— ํ•ด๋‹นํ•˜๋Š” ๊ฐ’์„ ์„ค์ • ํŒŒ์ผ์—์„œ ์ฐพ์Šต๋‹ˆ๋‹ค.

  • ํ•ด๋‹น ๊ฐ’์ด ์กด์žฌํ•  ๊ฒฝ์šฐ float ํ˜•ํƒœ๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

  • ํ•ด๋‹น ๊ฐ’์ด ์กด์žฌํ•˜์ง€ ์•Š์„ ๊ฒฝ์šฐ ๊ธฐ๋ณธ๊ฐ’ def๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

์„ค๋ช…:

  • ์ด ํ•จ์ˆ˜๋Š” ์„ค์ • ํŒŒ์ผ์—์„œ float ํ˜•ํƒœ์˜ ๊ฐ’์„ ์ฝ์–ด์˜ค๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

  • ์ž…๋ ฅ์œผ๋กœ ๋ฐ›์€ ์„ค์ • ํŒŒ์ผ(list ๊ตฌ์กฐ์ฒด)์—์„œ key์— ํ•ด๋‹นํ•˜๋Š” ๊ฐ’์„ ์ฐพ์Šต๋‹ˆ๋‹ค.

  • ์ฐพ์€ ๊ฐ’์„ atof ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•˜์—ฌ float ํ˜•ํƒœ๋กœ ๋ณ€ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

  • ๋งŒ์•ฝ key์— ํ•ด๋‹นํ•˜๋Š” ๊ฐ’์ด ์กด์žฌํ•˜์ง€ ์•Š์„ ๊ฒฝ์šฐ ๊ธฐ๋ณธ๊ฐ’ def๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

  • ์ด ํ•จ์ˆ˜๋Š” ์„ค์ • ํŒŒ์ผ์—์„œ ์ฝ์–ด์˜จ float ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

  • ๋งŒ์•ฝ ์„ค์ • ํŒŒ์ผ์—์„œ ํ•ด๋‹น key์— ๋Œ€ํ•œ ๊ฐ’์„ ์ฐพ์ง€ ๋ชปํ–ˆ์„ ๊ฒฝ์šฐ, ๊ธฐ๋ณธ๊ฐ’ def๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์‚ฌ์šฉํ•œ ๊ฐ’์„ stderr์— ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค.

Last updated

Was this helpful?