73 lines
1.7 KiB
C
73 lines
1.7 KiB
C
//
|
|
// Készítette: Toldi Balázs Ádám
|
|
// Dátum: 2019. 10. 16.
|
|
//
|
|
|
|
#include "map.h"
|
|
|
|
void map_init(Map *m) {
|
|
m->length = 0;
|
|
m->size = 0;
|
|
m->pairs = 0;
|
|
}
|
|
|
|
bool map_isFound(Map map, char *key) {
|
|
char *res = map_getValue(map, key);
|
|
return (res == NULL) ? false : true;
|
|
}
|
|
|
|
char *map_getValue(Map m, char *key) {
|
|
int min = 0;
|
|
int max = m.length - 1;
|
|
int kp = (min + max) / 2;
|
|
while (min <= max && strcmp(m.pairs[kp].key, key) != 0) {
|
|
if (strcmp(m.pairs[kp].key, key) < 0)
|
|
min = kp + 1;
|
|
else
|
|
max = kp - 1;
|
|
kp = (min + max) / 2;
|
|
}
|
|
return min <= max ? m.pairs[kp].value : NULL;
|
|
}
|
|
|
|
void map_dump(Map m) {
|
|
for (size_t i = 0; i < m.length; ++i) {
|
|
printf("%s %s\n", m.pairs[i].key, m.pairs[i].value);
|
|
}
|
|
}
|
|
|
|
void map_addPair(Map *m, Pair p) {
|
|
if (m->length >= m->size) {
|
|
assert(m->length == m->size);
|
|
size_t new_size = (m->size + 2) * 2;
|
|
m->pairs = realloc(m->pairs, new_size * sizeof(Pair));
|
|
if (m->pairs == NULL) {
|
|
printf("OUT OF MEMORY!");
|
|
abort();
|
|
}
|
|
m->size = new_size;
|
|
}
|
|
m->pairs[m->length++] = p;
|
|
map_sort(m);
|
|
}
|
|
|
|
Pair map_make_pair(char *key, char *value) {
|
|
Pair result;
|
|
strncpy(result.key, key,65);
|
|
strncpy(result.value, value,1024);
|
|
return result;
|
|
}
|
|
|
|
void map_sort(Map *m) {
|
|
|
|
for (int i = m->length - 1; i > 0; --i) {
|
|
for (int j = 0; j < i; ++j) {
|
|
if (strcmp(m->pairs[j].key, m->pairs[j + 1].key) > 0) {
|
|
Pair tmp = m->pairs[j];
|
|
m->pairs[j] = m->pairs[j + 1];
|
|
m->pairs[j + 1] = tmp;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|