mirror of
https://github.com/glest/glest-source.git
synced 2025-08-15 04:43:58 +02:00
i know its crazy, but attempt performance gains by avoiding use of int64 as much as possible.
This commit is contained in:
@@ -20,6 +20,7 @@
|
|||||||
#include <stdexcept>
|
#include <stdexcept>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
#include <limits>
|
||||||
#include "byte_order.h"
|
#include "byte_order.h"
|
||||||
//#include <tr1/unordered_map>
|
//#include <tr1/unordered_map>
|
||||||
//using namespace std::tr1;
|
//using namespace std::tr1;
|
||||||
@@ -59,8 +60,16 @@ inline T truncateDecimal(const T &value, int precision=6) {
|
|||||||
precNum = std::pow((T)10,(T)precision);
|
precNum = std::pow((T)10,(T)precision);
|
||||||
}
|
}
|
||||||
|
|
||||||
int64 resultInt = (T)value * (T)precNum;
|
// See if we can avoid using an int64 for speed
|
||||||
|
static int MAX_INT_VALUE = std::numeric_limits<int>::max();
|
||||||
|
if((T)value * (T)precNum <= MAX_INT_VALUE) {
|
||||||
|
int resultInt = (T)value * (T)precNum;
|
||||||
|
T result = (T)resultInt / precNum;
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Must use an int64 since the result is large
|
||||||
|
int64 resultInt = (T)value * (T)precNum;
|
||||||
T result = (long double)resultInt / precNum;
|
T result = (long double)resultInt / precNum;
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
@@ -33,8 +33,8 @@ bool strToUInt(const string &s, uint32 *i);
|
|||||||
bool strToFloat(const string &s, float *f);
|
bool strToFloat(const string &s, float *f);
|
||||||
|
|
||||||
string boolToStr(bool b);
|
string boolToStr(bool b);
|
||||||
string uIntToStr(uint32 i);
|
string uIntToStr(const uint64 &value);
|
||||||
string intToStr(int64 i);
|
string intToStr(const int64 &value);
|
||||||
string intToHex(int i);
|
string intToHex(int i);
|
||||||
string floatToStr(float f,int precsion=2);
|
string floatToStr(float f,int precsion=2);
|
||||||
string doubleToStr(double f,int precsion=2);
|
string doubleToStr(double f,int precsion=2);
|
||||||
|
@@ -19,6 +19,7 @@
|
|||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include <locale>
|
#include <locale>
|
||||||
#include "platform_util.h"
|
#include "platform_util.h"
|
||||||
|
#include <limits>
|
||||||
#include "leak_dumper.h"
|
#include "leak_dumper.h"
|
||||||
|
|
||||||
using namespace std;
|
using namespace std;
|
||||||
@@ -132,15 +133,27 @@ string boolToStr(bool b) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
string intToStr(int64 i) {
|
string intToStr(const int64 &value) {
|
||||||
char str[strSize]="";
|
char str[strSize]="";
|
||||||
snprintf(str, strSize-1, "%lld", (long long int)i);
|
static int MAX_INT_VALUE = std::numeric_limits<int>::max();
|
||||||
|
if(value <= MAX_INT_VALUE) {
|
||||||
|
snprintf(str, strSize-1, "%d", (int)value);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
snprintf(str, strSize-1, "%lld", (long long int)value);
|
||||||
|
}
|
||||||
return (str[0] != '\0' ? str : "");
|
return (str[0] != '\0' ? str : "");
|
||||||
}
|
}
|
||||||
|
|
||||||
string uIntToStr(uint32 i) {
|
string uIntToStr(const uint64 &value) {
|
||||||
char str[strSize]="";
|
char str[strSize]="";
|
||||||
snprintf(str, strSize-1, "%u", i);
|
static unsigned int MAX_UNSIGNED_INT_VALUE = std::numeric_limits<unsigned int>::max();
|
||||||
|
if(value <= MAX_UNSIGNED_INT_VALUE) {
|
||||||
|
snprintf(str, strSize-1, "%u", (int)value);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
snprintf(str, strSize-1, "%llu", (long long unsigned int)value);
|
||||||
|
}
|
||||||
return (str[0] != '\0' ? str : "");
|
return (str[0] != '\0' ? str : "");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -502,7 +502,7 @@ XmlTree::XmlTree(xml_engine_parser_type engine_type) {
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
throw megaglest_runtime_error("Invalid XML parser engine: " + intToStr(engine_type));
|
throw megaglest_runtime_error("Invalid XML parser engine: " + intToStr((int)engine_type));
|
||||||
}
|
}
|
||||||
|
|
||||||
this->engine_type = engine_type;
|
this->engine_type = engine_type;
|
||||||
@@ -689,7 +689,7 @@ XmlNode::~XmlNode() {
|
|||||||
|
|
||||||
XmlAttribute *XmlNode::getAttribute(unsigned int i) const {
|
XmlAttribute *XmlNode::getAttribute(unsigned int i) const {
|
||||||
if(i >= attributes.size()) {
|
if(i >= attributes.size()) {
|
||||||
throw megaglest_runtime_error(getName()+" node doesn't have "+intToStr(i)+" attributes");
|
throw megaglest_runtime_error(getName()+" node doesn't have " + uIntToStr(i) + " attributes");
|
||||||
}
|
}
|
||||||
return attributes[i];
|
return attributes[i];
|
||||||
}
|
}
|
||||||
@@ -733,7 +733,7 @@ int XmlNode::clearChild(const string &childName) {
|
|||||||
XmlNode *XmlNode::getChild(unsigned int i) const {
|
XmlNode *XmlNode::getChild(unsigned int i) const {
|
||||||
assert(!superNode);
|
assert(!superNode);
|
||||||
if(i >= children.size()) {
|
if(i >= children.size()) {
|
||||||
throw megaglest_runtime_error("\"" + getName()+"\" node doesn't have "+intToStr(i+1)+" children");
|
throw megaglest_runtime_error("\"" + getName()+"\" node doesn't have "+ uIntToStr(i+1) + " children");
|
||||||
}
|
}
|
||||||
return children[i];
|
return children[i];
|
||||||
}
|
}
|
||||||
@@ -754,7 +754,7 @@ XmlNode *XmlNode::getChild(const string &childName, unsigned int i) const {
|
|||||||
return superNode->getChild(childName,i);
|
return superNode->getChild(childName,i);
|
||||||
}
|
}
|
||||||
if(i >= children.size()) {
|
if(i >= children.size()) {
|
||||||
throw megaglest_runtime_error("\"" + name + "\" node doesn't have "+intToStr(i+1)+" children named \"" + childName + "\"\n\nTree: "+getTreeString());
|
throw megaglest_runtime_error("\"" + name + "\" node doesn't have " + uIntToStr(i+1) +" children named \"" + childName + "\"\n\nTree: "+getTreeString());
|
||||||
}
|
}
|
||||||
|
|
||||||
int count= 0;
|
int count= 0;
|
||||||
@@ -767,7 +767,7 @@ XmlNode *XmlNode::getChild(const string &childName, unsigned int i) const {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
throw megaglest_runtime_error("Node \""+getName()+"\" doesn't have "+intToStr(i+1)+" children named \""+childName+"\"\n\nTree: "+getTreeString());
|
throw megaglest_runtime_error("Node \""+getName()+"\" doesn't have " + uIntToStr(i+1) + " children named \""+childName+"\"\n\nTree: "+getTreeString());
|
||||||
}
|
}
|
||||||
|
|
||||||
bool XmlNode::hasChildNoSuper(const string &childName) const {
|
bool XmlNode::hasChildNoSuper(const string &childName) const {
|
||||||
|
Reference in New Issue
Block a user