 |
ManaPlus
|
Go to the documentation of this file.
48 std::
string separator;
70 const
std::
string &separator);
88 ud.levels.push_back(bu);
97 ud.levels.push_back(ul);
108 const UnitLevel bu = {
"¤", 1, 0,
""};
109 ud.levels.push_back(bu);
138 ud.levels.push_back(bu);
142 if (xmlNameEqual(uLevel,
"level"))
155 ud.levels.push_back(ul);
160 logger->
log(
"Error bad unit count: %d for %s in %s",
169 const UnitLevel lev =
176 ud.levels.push_back(lev);
184 if (xmlNameEqual(node,
"unit"))
203 XmlNodeConstPtrConst root = doc.
rootNode();
205 if ((root ==
nullptr) || !xmlNameEqual(root,
"units"))
207 logger->
log(
"Error loading unit definition file: "
214 if (xmlNameEqual(node,
"include"))
221 else if (xmlNameEqual(node,
"unit"))
224 UnitDescription ud =
loadUnit(node);
225 if (type ==
"weight")
229 else if (type ==
"currency")
236 logger->
log(
"Error unknown unit type: %s", type.c_str());
239 else if (xmlNameEqual(node,
"currency"))
247 const UnitDescription &ud)
255 return strprintf(
"0%s", ul.symbol.c_str());
258 double amount = ud.conversion * value;
259 const unsigned int sz =
CAST_U32(ud.levels.size());
262 if (ud.mix && !ud.levels.empty() && ud.levels[1].count < amount)
265 UnitLevel pl = ud.levels[0];
271 levelAmount /= ul.count;
273 amount -=
static_cast<double>(levelAmount * ul.count);
278 amount), pl.separator).append(pl.symbol);
281 for (
unsigned int i = 2; i < sz; i++)
288 nextAmount = levelAmount / ul.count;
289 levelAmount %= ul.count;
295 pl.separator).append(pl.symbol).append(output);
300 levelAmount = nextAmount;
307 for (
unsigned int i = 0; i < sz; i++)
310 if (amount < ul.count && ul.count > 0)
312 ul = ud.levels[i - 1];
320 ul.separator).append(ul.symbol);
362 const std::string &separator)
364 std::string lastPart;
365 const size_t point = str.find(
'.');
366 if (point != std::string::npos)
368 lastPart = str.substr(point);
369 str = str.substr(0, point);
375 size_t sz = str.size();
380 result = std::string(separator).append(str.substr(
381 sz - 3)).append(result);
385 result = str.substr(sz - 3).append(result);
387 str = str.substr(0, str.size() - 3);
393 result = std::string(str).append(separator).append(result);
399 return result + lastPart;
const std::string DEFAULT_CURRENCY
bool existsCurrency(const std::string &name)
#define reportAlways(...)
std::string formatWeight(const int value)
const bool SkipError_true
static void loadCurrencies(xmlNodePtr parentNode)
static std::string splitNumber(std::string str, const std::string &separator)
UnitDescription defaultWeight
std::string formatCurrency64(const int64_t value)
const bool SkipError_false
static UnitDescription loadUnit(xmlNodePtr node)
std::string formatCurrency(const int value)
#define A_DEFAULT_COPY(func)
int getProperty(const xmlNodePtr node, const char *const name, int def)
#define loadXmlDir(name, function)
std::string strprintf(const char *const format,...)
static void loadXmlFile(const std::string &file, const std::string &name, BadgesInfos &arr, const SkipError skipError)
const bool UseVirtFs_true
std::string getStringValue(const std::string &key) const
UnitDescription defaultCurrency
void log1(const char *const log_text)
static std::string formatUnit(const int value, const UnitDescription &ud)
std::map< std::string, UnitDescription > mCurrencies
#define for_each_xml_child_node(var, parent)
void loadXmlFile(const std::string &fileName, const SkipError skipError)
void log(const char *const log_text,...)