72 lines
1.5 KiB
C
72 lines
1.5 KiB
C
/**
|
|
* Copyright (c) 2021 Dominic Masters
|
|
*
|
|
* This software is released under the MIT License.
|
|
* https://opensource.org/licenses/MIT
|
|
*/
|
|
|
|
#include "save.h"
|
|
|
|
void saveManagerInit(savemanager_t *man) {
|
|
man->count = 0;
|
|
}
|
|
|
|
savevalue_t * saveManagerAddOrGet(savemanager_t *man, char *key) {
|
|
uint8_t i, j;
|
|
|
|
j = saveManagerGetKey(man, key);
|
|
|
|
if(j != 0xFF) return man->values + j;
|
|
|
|
// Find empty key
|
|
for(i = 0; i < man->count; i++) {
|
|
if(man->keys[i] != NULL) continue;
|
|
|
|
man->keys[i] = key;
|
|
return man->values + i;
|
|
}
|
|
|
|
// No empty key
|
|
man->keys[man->count] = key;
|
|
return man->values + man->count++;
|
|
}
|
|
|
|
uint8_t saveManagerGetKey(savemanager_t *man, char *key) {
|
|
uint8_t i;
|
|
for(i = 0; i < man->count; i++) {
|
|
if(strcmp(man->keys + i, key) == 0) return i;
|
|
}
|
|
return 0xFF;
|
|
}
|
|
|
|
void saveManagerRemove(savemanager_t *man, char *key) {
|
|
uint8_t i;
|
|
|
|
i = saveManagerGetKey(man, key);
|
|
if(i == 0xFF) return;
|
|
|
|
man->keys[i] = NULL;
|
|
}
|
|
|
|
|
|
// Setters
|
|
savevalue_t * saveManagerSetBool(savemanager_t *man, char *key, bool val) {
|
|
savevalue_t * v = saveManagerAddOrGet(man, key);
|
|
v->b = val;
|
|
return v;
|
|
}
|
|
|
|
savevalue_t * saveManagerSetUint8(savemanager_t *man, char *key, uint8_t val) {
|
|
savevalue_t * v = saveManagerAddOrGet(man, key);
|
|
v->u8 = val;
|
|
return v;
|
|
}
|
|
|
|
// Getters
|
|
bool saveManagerGetBool(savemanager_t *man, char *key) {
|
|
return saveManagerAddOrGet(man, key)->b;
|
|
}
|
|
|
|
uint8_t saveManagerGetUint8(savemanager_t *man, char *key) {
|
|
return saveManagerAddOrGet(man, key)->u8;
|
|
} |