ocarina/libsaria/prefs.cpp

88 lines
1.6 KiB
C++

// Copyright (c) 2011 Bryan Schumaker.
#include <print.h>
#include <prefs.h>
#include <fs.h>
#include <map>
#include <fstream>
#include <stdlib.h>
using namespace std;
static map<string, int> preferences;
static void save(ofstream &stream, void *data)
{
map<string, int>::iterator it;
println("Saving preferences!");
for (it = preferences.begin(); it != preferences.end(); it++) {
stream << it->first << endl;
stream << it->second << endl;
}
}
static void load(ifstream &stream)
{
string key, value;
int val;
println("Loading preferences!");
while (stream.good()) {
getline(stream, key);
if (!stream.good())
break;
getline(stream, value);
if (!stream.good())
break;
val = atoi(value.c_str());
println(key + " = %d", val);
preferences[key] = val;
}
}
static void set_preference(const string &key, int p)
{
preferences[key] = p;
libsaria::app::save("prefs", save, NULL);
}
static bool key_exists(const string &key)
{
map<string, int>::iterator it;
it = preferences.find(key);
return it != preferences.end();
}
namespace libsaria
{
void prefs::init()
{
libsaria::app::read_now("prefs", load);
}
int prefs::get(const string &key)
{
map<string, int>::iterator it;
it = preferences.find(key);
if (it == preferences.end())
return 0;
return it->second;
}
void prefs::set(const string &key, int value)
{
if (get(key) != value)
set_preference(key, value);
}
int prefs::init(const string &key, int value)
{
if (!key_exists(key)) {
set_preference(key, value);
return value;
}
return get(key);
}
}; /* Namespace: libsaria */