commit x64 compilation from lulu cause the other branch dont seems to compile properly at home
This commit is contained in:
86
include/framework/data/registry.cpp
Normal file
86
include/framework/data/registry.cpp
Normal file
@ -0,0 +1,86 @@
|
||||
/* -----------------------------------------------------------------------------
|
||||
GSFramework
|
||||
Copyright 2001-2013 Emmanuel Julien. All Rights Reserved.
|
||||
----------------------------------------------------------------------------- */
|
||||
|
||||
|
||||
#include "data/registry.h"
|
||||
|
||||
using namespace GS;
|
||||
using GS::NML::Tag;
|
||||
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
Tag *Registry::CreateKey(const char *path, const Variant *value, bool /*recursive*/)
|
||||
{
|
||||
StringList tag_path_list;
|
||||
String(path).TrimChar(';').Split(":", tag_path_list);
|
||||
|
||||
Tag *ctag = NULL;
|
||||
for (uint n = 0; n < tag_path_list.GetCount(); ++n)
|
||||
{
|
||||
String &tag_path = tag_path_list.ObjectAt(n);
|
||||
|
||||
Tag *ntag = ctag ? ctag->GetTag(tag_path) : GetTag(tag_path);
|
||||
if (ntag == NULL)
|
||||
ntag = ctag ? ctag->AddChild(tag_path) : AddRoot(tag_path);
|
||||
if ((ctag = ntag) == NULL)
|
||||
return NULL;
|
||||
}
|
||||
|
||||
if (ctag && value)
|
||||
{
|
||||
ctag->GetValue() = *value;
|
||||
RegistryKeyChange msg(path);
|
||||
BroadcastMessage(RegistryMsg_KeyChange, this, &msg);
|
||||
}
|
||||
return ctag;
|
||||
}
|
||||
Tag *Registry::CreateKey(const char *path, const Variant &value, bool recursive)
|
||||
{ return CreateKey(path, &value, recursive); }
|
||||
bool Registry::DeleteKey(const char *path)
|
||||
{
|
||||
StringList tag_path_list;
|
||||
String(path).Split(":", tag_path_list);
|
||||
|
||||
Tag *ctag = NULL, *ptag = NULL;
|
||||
for (uint n = 0; n < tag_path_list.GetCount(); ++n)
|
||||
{
|
||||
ptag = ctag;
|
||||
String &tag_path = tag_path_list.ObjectAt(n);
|
||||
Tag *ntag = ctag ? ctag->GetTag(tag_path) : GetTag(tag_path);
|
||||
if (!ntag)
|
||||
return false;
|
||||
ctag = ntag;
|
||||
}
|
||||
if (!ctag)
|
||||
return false;
|
||||
|
||||
if (ptag)
|
||||
ptag->RemoveTag(ctag);
|
||||
else
|
||||
tags.Remove(ctag);
|
||||
|
||||
_safe_delete(ctag);
|
||||
return true;
|
||||
}
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
float Registry::GetReal(const char *path, float default_value) const
|
||||
{
|
||||
Tag *tag = GetTag(path);
|
||||
float v;
|
||||
if (!tag || !tag->GetValue().Get(v))
|
||||
return default_value;
|
||||
return v;
|
||||
}
|
||||
bool Registry::GetBool(const char *path, bool default_value) const
|
||||
{
|
||||
Tag *tag = GetTag(path);
|
||||
bool v;
|
||||
if (!tag || !tag->GetValue().Get(v))
|
||||
return default_value;
|
||||
return v;
|
||||
}
|
||||
//------------------------------------------------------------------------------
|
||||
Reference in New Issue
Block a user