summaryrefslogtreecommitdiffhomepage
path: root/examples/inits.c
blob: 26518e33141941095ca1095c8d900b30b549c2c1 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
#include <stdio.h>
#include <stc/cstr.h>
#include <stc/cmap.h>
#include <stc/cvec.h>
#include <stc/cpque.h>
#include <stc/clist.h>

using_cmap_strval(id, int); // Map of int => cstr
using_cmap_strkey(cnt, int); // Map of cstr => int

typedef struct {int x, y;} ipair_t;
inline static int ipair_compare(const ipair_t* a, const ipair_t* b) {
    int cx = c_default_compare(&a->x, &b->x);
    return cx == 0 ? c_default_compare(&a->y, &b->y) : cx;
}

using_cvec(ip, ipair_t, ipair_compare);
using_clist(ip, ipair_t, ipair_compare);
using_cvec(f, float);
using_cpque(f, cvec_f);

int main(void)
{
    // CVEC FLOAT / PRIORITY QUEUE

    cvec_f floats = cvec_f_init();
    c_emplace_items(&floats, cvec_f, {4.0f, 2.0f, 5.0f, 3.0f, 1.0f});

    c_foreach (i, cvec_f, floats) printf("%.1f ", *i.ref);
    puts("");

    // CVEC PRIORITY QUEUE

    cpque_f_make_heap(&floats);
    c_emplace_items(&floats, cpque_f, {40.0f, 20.0f, 50.0f, 30.0f, 10.0f});

    puts("\npop and show high priorites first:");
    while (! cpque_f_empty(floats)) {
        printf("%.1f ", *cpque_f_top(&floats));
        cpque_f_pop(&floats);
    }
    puts("\n");
    cpque_f_del(&floats);

    // CMAP ID

    int year = 2020;
    cmap_id idnames = cmap_id_init();
    cmap_id_emplace(&idnames, 100, "Hello");
    cmap_id_insert(&idnames, 110, cstr_from("World"));
    cmap_id_insert(&idnames, 120, cstr_from_fmt("Howdy, -%d-", year));

    c_foreach (i, cmap_id, idnames)
        printf("%d: %s\n", i.ref->first, i.ref->second.str);
    puts("");
    cmap_id_del(&idnames);

    // CMAP CNT

    cmap_cnt countries = cmap_cnt_init();
    c_emplace_items(&countries, cmap_cnt, {
        {"Norway", 100},
        {"Denmark", 50},
        {"Iceland", 10},
        {"Belgium", 10},
        {"Italy", 10},
        {"Germany", 10},
        {"Spain", 10},
        {"France", 10},
    });
    cmap_cnt_emplace(&countries, "Greenland", 0).ref->second += 20;
    cmap_cnt_emplace(&countries, "Sweden", 0).ref->second += 20;
    cmap_cnt_emplace(&countries, "Norway", 0).ref->second += 20;
    cmap_cnt_emplace(&countries, "Finland", 0).ref->second += 20;

    c_foreach (i, cmap_cnt, countries)
        printf("%s: %d\n", i.ref->first.str, i.ref->second);
    puts("");
    cmap_cnt_del(&countries);

    // CVEC PAIR

    c_init (cvec_ip, pairs1, { {5, 6}, {3, 4}, {1, 2}, {7, 8} });
    cvec_ip_sort(&pairs1);

    c_foreach (i, cvec_ip, pairs1)
        printf("(%d %d) ", i.ref->x, i.ref->y);
    puts("");
    cvec_ip_del(&pairs1);

    // CLIST PAIR

    c_init (clist_ip, pairs2, { {5, 6}, {3, 4}, {1, 2}, {7, 8} });
    clist_ip_sort(&pairs2);

    c_foreach (i, clist_ip, pairs2)
        printf("(%d %d) ", i.ref->x, i.ref->y);
    puts("");
    clist_ip_del(&pairs2);
}