Begun making template for dictionary
This commit is contained in:
parent
af7fefee1e
commit
823d3112ad
@ -321,7 +321,146 @@ core::stringc ListUserConfigParam<T, U>::toString() const
|
||||
return "";
|
||||
} // toString
|
||||
|
||||
// ============================================================================
|
||||
template<typename T, typename U>
|
||||
MapUserConfigParam<T, U>::MapUserConfigParam(const char* param_name,
|
||||
const char* comment)
|
||||
{
|
||||
m_param_name = param_name;
|
||||
all_params.push_back(this);
|
||||
if (comment != NULL) m_comment = comment;
|
||||
} // MapUserConfigParam
|
||||
|
||||
// ============================================================================
|
||||
template<typename T, typename U>
|
||||
MapUserConfigParam<T, U>::MapUserConfigParam(const char* param_name,
|
||||
const char* comment,
|
||||
int nb_elements,
|
||||
...)
|
||||
{
|
||||
m_param_name = param_name;
|
||||
all_params.push_back(this);
|
||||
if (comment != NULL) m_comment = comment;
|
||||
|
||||
// add the default list
|
||||
va_list arguments;
|
||||
va_start(arguments, nb_elements);
|
||||
for (int i = 0; i < nb_elements; i++)
|
||||
m_elements.push_back(T(va_arg(arguments, U)));
|
||||
va_end(arguments); // Cleans up the list
|
||||
} // MapUserConfigParam
|
||||
|
||||
// ============================================================================
|
||||
template<typename T, typename U>
|
||||
MapUserConfigParam<T, U>::MapUserConfigParam(const char* param_name,
|
||||
GroupUserConfigParam* group,
|
||||
const char* comment)
|
||||
{
|
||||
m_param_name = param_name;
|
||||
group->addChild(this);
|
||||
if (comment != NULL) m_comment = comment;
|
||||
} // MapUserConfigParam
|
||||
|
||||
// ============================================================================
|
||||
template<typename T, typename U>
|
||||
MapUserConfigParam<T, U>::MapUserConfigParam(const char* param_name,
|
||||
GroupUserConfigParam* group,
|
||||
const char* comment,
|
||||
int nb_elements,
|
||||
...)
|
||||
{
|
||||
m_param_name = param_name;
|
||||
group->addChild(this);
|
||||
if (comment != NULL) m_comment = comment;
|
||||
|
||||
// add the default list
|
||||
va_list arguments;
|
||||
va_start(arguments, nb_elements);
|
||||
for (int i = 0; i < nb_elements; i++)
|
||||
m_elements.push_back(va_arg(arguments, T));
|
||||
va_end(arguments); // Cleans up the list
|
||||
} // MapUserConfigParam
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
template<typename T, typename U>
|
||||
void MapUserConfigParam<T, U>::write(std::ofstream& stream) const
|
||||
{
|
||||
const int elts_amount = m_elements.size();
|
||||
|
||||
// comment
|
||||
if (m_comment.size() > 0) stream << " <!-- " << m_comment.c_str();
|
||||
stream << " -->\n <" << m_param_name.c_str() << "\n";
|
||||
|
||||
stream << " Size=\"" << elts_amount << "\"\n";
|
||||
// actual elements
|
||||
//for (int n = 0; n<elts_amount; n++)
|
||||
|
||||
for (std::map<T, U>::iterator it = m_elements.begin(); it != m_elements.end(); ++it)
|
||||
{
|
||||
stream << " " << it->first << "=\"" << it->second << "\"\n";
|
||||
}
|
||||
stream << " >\n";
|
||||
stream << " </" << m_param_name.c_str() << ">\n\n";
|
||||
} // write
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
template<typename T, typename U>
|
||||
void MapUserConfigParam<T, U>::findYourDataInAChildOf(const XMLNode* node)
|
||||
{
|
||||
const XMLNode* child = node->getNode(m_param_name);
|
||||
if (child == NULL)
|
||||
{
|
||||
//Log::error("User Config", "Couldn't find parameter group %s", m_param_name.c_str());
|
||||
return;
|
||||
}
|
||||
|
||||
int attr_count = 0;
|
||||
child->get("Size", &attr_count);
|
||||
for (int n = 0; n<attr_count; n++)
|
||||
{
|
||||
T elt;
|
||||
std::string str;
|
||||
child->get(StringUtils::toString(n), &str);
|
||||
StringUtils::fromString<T>(str, elt);
|
||||
|
||||
// check if the element is already there :
|
||||
bool there = false;
|
||||
for (unsigned int i = 0; i < m_elements.size(); i++)
|
||||
{
|
||||
if (elt == m_elements[i])
|
||||
{
|
||||
there = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (!there)
|
||||
{
|
||||
m_elements.push_back(elt);
|
||||
}
|
||||
}
|
||||
|
||||
} // findYourDataInAChildOf
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
template<typename T, typename U>
|
||||
void MapUserConfigParam<T, U>::findYourDataInAnAttributeOf(const XMLNode* node)
|
||||
{
|
||||
} // findYourDataInAnAttributeOf
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
template<typename T, typename U>
|
||||
void MapUserConfigParam<T, U>::addElement(T element, U value)
|
||||
{
|
||||
m_elements[element] = value;
|
||||
} // findYourDataInAnAttributeOf
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
template<typename T, typename U>
|
||||
core::stringc MapUserConfigParam<T, U>::toString() const
|
||||
{
|
||||
return "";
|
||||
} // toString
|
||||
|
||||
// ============================================================================
|
||||
IntUserConfigParam::IntUserConfigParam(int default_value,
|
||||
|
@ -136,6 +136,50 @@ public:
|
||||
}; // ListUserConfigParam
|
||||
typedef ListUserConfigParam<std::string, const char*> StringListUserConfigParam;
|
||||
|
||||
template<typename T, typename U>
|
||||
class MapUserConfigParam : public UserConfigParam
|
||||
{
|
||||
std::map<T, U> m_elements;
|
||||
|
||||
public:
|
||||
MapUserConfigParam(const char* param_name,
|
||||
const char* comment = NULL);
|
||||
MapUserConfigParam(const char* param_name,
|
||||
const char* comment,
|
||||
int nb_elts,
|
||||
...);
|
||||
MapUserConfigParam(const char* param_name,
|
||||
GroupUserConfigParam* group,
|
||||
const char* comment = NULL);
|
||||
MapUserConfigParam(const char* param_name,
|
||||
GroupUserConfigParam* group,
|
||||
const char* comment,
|
||||
int nb_elts,
|
||||
...);
|
||||
|
||||
void write(std::ofstream& stream) const;
|
||||
void findYourDataInAChildOf(const XMLNode* node);
|
||||
void findYourDataInAnAttributeOf(const XMLNode* node);
|
||||
|
||||
void addElement(T element, U value);
|
||||
|
||||
irr::core::stringc toString() const;
|
||||
|
||||
operator std::map<T,U>() const
|
||||
{
|
||||
return m_elements;
|
||||
}
|
||||
float& operator=(const std::map<T,U>& v)
|
||||
{
|
||||
m_elements = std::map<T, U>(v); return m_elements;
|
||||
}
|
||||
float& operator=(const MapUserConfigParam& v)
|
||||
{
|
||||
m_elements = std::map<T,U>(v); return m_elements;
|
||||
}
|
||||
}; // ListUserConfigParam
|
||||
typedef MapUserConfigParam<std::string, const char*> StringToStringUserConfigParam;
|
||||
|
||||
// ============================================================================
|
||||
class IntUserConfigParam : public UserConfigParam
|
||||
{
|
||||
@ -372,12 +416,12 @@ namespace UserConfigParams
|
||||
// ---- Gamemode setup
|
||||
|
||||
|
||||
PARAM_PREFIX StringListUserConfigParam m_karts_per_gamemode
|
||||
PARAM_DEFAULT(StringListUserConfigParam("karts_per_gamemode", "The karts per gamemode"
|
||||
PARAM_PREFIX StringToStringUserConfigParam m_karts_per_gamemode
|
||||
PARAM_DEFAULT(StringToStringUserConfigParam("karts_per_gamemode", "The karts per gamemode"
|
||||
"Number of karts per gamemode. Order corresponds to Enum value",
|
||||
10,
|
||||
"3",
|
||||
"3",
|
||||
"3",
|
||||
"3",
|
||||
"3",
|
||||
"3",
|
||||
"3",
|
||||
|
@ -164,7 +164,7 @@ void TrackInfoScreen::init()
|
||||
m_ai_kart_spinner->setVisible(has_AI);
|
||||
getWidget<LabelWidget>("ai-text")->setVisible(has_AI);
|
||||
|
||||
std::vector<std::string> karts_per_gamemode = UserConfigParams::m_karts_per_gamemode;
|
||||
std::vector<std::string> karts_per_gamemode;//UserConfigParams::m_karts_per_gamemode;
|
||||
|
||||
if (has_AI)
|
||||
{
|
||||
|
Loading…
Reference in New Issue
Block a user