libsaria: Add floats as preferenc type
Now I can store floating point numbers in addition to booleans.
This commit is contained in:
parent
8dfbb8915b
commit
f7d7d5e038
|
@ -34,6 +34,7 @@ class OutFile
|
|||
|
||||
void write_str(string, bool);
|
||||
void write_int(int, bool);
|
||||
void write_float(float, bool);
|
||||
void write_ui(unsigned int, bool);
|
||||
void write_lui(long unsigned int, bool);
|
||||
void write_ino(ino_t, bool);
|
||||
|
@ -50,6 +51,7 @@ class InFile
|
|||
bool good();
|
||||
string read_str();
|
||||
int read_int();
|
||||
float read_float();
|
||||
unsigned int read_ui();
|
||||
long unsigned int read_lui();
|
||||
ino_t read_ino();
|
||||
|
|
|
@ -11,8 +11,10 @@ namespace libsaria
|
|||
void load();
|
||||
|
||||
void set(string, bool);
|
||||
void set(string, float);
|
||||
|
||||
bool get_bool(string);
|
||||
float get_float(string, float);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -58,6 +58,13 @@ void OutFile::write_int(int i, bool end)
|
|||
end_write(end);
|
||||
}
|
||||
|
||||
void OutFile::write_float(float f, bool end)
|
||||
{
|
||||
begin_write();
|
||||
out << f;
|
||||
end_write(end);
|
||||
}
|
||||
|
||||
void OutFile::write_ui(unsigned int i, bool end)
|
||||
{
|
||||
begin_write();
|
||||
|
@ -119,6 +126,13 @@ int InFile::read_int()
|
|||
return i;
|
||||
}
|
||||
|
||||
float InFile::read_float()
|
||||
{
|
||||
float f;
|
||||
in >> f;
|
||||
return f;
|
||||
}
|
||||
|
||||
unsigned int InFile::read_ui()
|
||||
{
|
||||
unsigned int i;
|
||||
|
|
|
@ -7,12 +7,14 @@ using namespace std;
|
|||
|
||||
enum pref_t {
|
||||
BOOL,
|
||||
FLOAT,
|
||||
};
|
||||
|
||||
struct Preference {
|
||||
pref_t type;
|
||||
union value {
|
||||
bool boolean;
|
||||
float floating;
|
||||
} value_u;
|
||||
};
|
||||
|
||||
|
@ -26,6 +28,11 @@ static void load_pref(InFile &in)
|
|||
switch (p.type) {
|
||||
case BOOL:
|
||||
p.value_u.boolean = in.read_int();
|
||||
println("preferences[" + key + "] = %d", p.value_u.boolean);
|
||||
break;
|
||||
case FLOAT:
|
||||
p.value_u.floating = in.read_float();
|
||||
println("preferences[" + key + "] = %f", p.value_u.floating);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
|
@ -41,6 +48,9 @@ static void save_pref(string key, struct Preference &p, OutFile &out)
|
|||
case BOOL:
|
||||
out.write_int(p.value_u.boolean, true);
|
||||
break;
|
||||
case FLOAT:
|
||||
out.write_float(p.value_u.floating, true);
|
||||
break;
|
||||
default:
|
||||
out.write_str("", true);
|
||||
}
|
||||
|
@ -72,6 +82,7 @@ namespace libsaria
|
|||
return;
|
||||
|
||||
size = in.read_ui();
|
||||
println("Preferences size: %d", size);
|
||||
for (unsigned int i = 0; i < size; i++)
|
||||
load_pref(in);
|
||||
}
|
||||
|
@ -84,6 +95,14 @@ namespace libsaria
|
|||
set_preference(key, p);
|
||||
}
|
||||
|
||||
void prefs::set(string key, float value)
|
||||
{
|
||||
struct Preference p;
|
||||
p.type = FLOAT;
|
||||
p.value_u.floating = value;
|
||||
set_preference(key, p);
|
||||
}
|
||||
|
||||
bool prefs::get_bool(string key)
|
||||
{
|
||||
map<string, Preference>::iterator it;
|
||||
|
@ -95,4 +114,15 @@ namespace libsaria
|
|||
return it->second.value_u.boolean;
|
||||
}
|
||||
|
||||
float prefs::get_float(string key, float dfault)
|
||||
{
|
||||
map<string, Preference>::iterator it;
|
||||
it = preferences.find(key);
|
||||
if (it == preferences.end())
|
||||
return dfault;
|
||||
if (it->second.type != FLOAT)
|
||||
return dfault;
|
||||
return it->second.value_u.floating;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue