mirror of
https://github.com/wesnoth/wesnoth
synced 2025-05-07 23:48:56 +00:00
Formula engine: New function to reverse a string
This commit is contained in:
parent
59dd9cc6af
commit
2637f23afd
@ -654,6 +654,28 @@ private:
|
||||
}
|
||||
};
|
||||
|
||||
class reverse_function : public function_expression {
|
||||
public:
|
||||
explicit reverse_function(const args_list& args)
|
||||
: function_expression("reverse", args, 1, 1)
|
||||
{}
|
||||
|
||||
private:
|
||||
variant execute(const formula_callable& variables, formula_debugger *fdb) const {
|
||||
const variant& arg = args()[0]->evaluate(variables,fdb);
|
||||
if(arg.is_string()) {
|
||||
std::string str = args()[0]->evaluate(variables,fdb).as_string();
|
||||
std::reverse(str.begin(), str.end());
|
||||
return variant(str);
|
||||
} else if(arg.is_list()) {
|
||||
std::vector<variant> list = args()[0]->evaluate(variables,fdb).as_list();
|
||||
std::reverse(list.begin(), list.end());
|
||||
return variant(&list);
|
||||
}
|
||||
return variant();
|
||||
}
|
||||
};
|
||||
|
||||
class contains_string_function : public function_expression {
|
||||
public:
|
||||
explicit contains_string_function(const args_list& args)
|
||||
@ -1216,6 +1238,7 @@ functions_map& get_functions_map() {
|
||||
FUNCTION(wave);
|
||||
FUNCTION(sort);
|
||||
FUNCTION(contains_string);
|
||||
FUNCTION(reverse);
|
||||
FUNCTION(filter);
|
||||
FUNCTION(find);
|
||||
FUNCTION(map);
|
||||
|
@ -592,6 +592,20 @@ const std::string& variant::as_string() const
|
||||
return string_->str;
|
||||
}
|
||||
|
||||
const std::vector<variant>& variant::as_list() const
|
||||
{
|
||||
must_be(TYPE_LIST);
|
||||
assert(list_);
|
||||
return list_->elements;
|
||||
}
|
||||
|
||||
const std::map<variant,variant>& variant::as_map() const
|
||||
{
|
||||
must_be(TYPE_MAP);
|
||||
assert(map_);
|
||||
return map_->elements;
|
||||
}
|
||||
|
||||
variant variant::operator+(const variant& v) const
|
||||
{
|
||||
if(type_ == TYPE_LIST) {
|
||||
|
@ -89,6 +89,9 @@ public:
|
||||
bool as_bool() const;
|
||||
|
||||
bool is_list() const { return type_ == TYPE_LIST; }
|
||||
|
||||
const std::vector<variant>& as_list() const;
|
||||
const std::map<variant,variant>& as_map() const;
|
||||
|
||||
const std::string& as_string() const;
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user