to_string is more efficient now

This commit is contained in:
VaclavT 2021-09-17 00:00:50 +02:00
parent 8b78ff87c9
commit 843eb3a72f
1 changed files with 8 additions and 16 deletions

24
ml.cpp
View File

@ -53,14 +53,6 @@
#define LIST_TYPE "list"
// Convert an object to a string using a string stream conveniently
#if __linux
#define to_string(x) static_cast<std::ostringstream&>((std::ostringstream() << std::dec << x )).str()
#else
#define to_string(x) static_cast<std::ostringstream>((std::ostringstream() << std::dec << x )).str()
#endif
// Is this character a valid lisp symbol character
bool is_symbol(char ch) {
return (isalpha(ch) || ispunct(ch)) && ch != '(' && ch != ')' && ch != '"' && ch != '\'';
@ -281,9 +273,9 @@ MlValue MlValue::cast_to_float() const {
MlValue MlValue::cast_to_string() const {
switch (type) {
case INT:
return MlValue::string(to_string(stack_data.i));
return MlValue::string(std::to_string(stack_data.i));
case FLOAT:
return MlValue::string(to_string(stack_data.f));
return MlValue::string(std::to_string(stack_data.f));
case STRING:
return *this;
default:
@ -544,9 +536,9 @@ std::string MlValue::display() const {
case ATOM:
return str;
case INT:
return to_string(stack_data.i);
return std::to_string(stack_data.i);
case FLOAT:
return to_string(stack_data.f);
return std::to_string(stack_data.f);
case STRING:
return str;
case LAMBDA:
@ -562,7 +554,7 @@ std::string MlValue::display() const {
}
return "(" + result + ")";
case BUILTIN:
return "<" + str + " at " + to_string(long(stack_data.b)) + ">";
return "<" + str + " at " + std::to_string(long(stack_data.b)) + ">";
case NIL:
return "nil";
default:
@ -581,9 +573,9 @@ std::string MlValue::debug() const {
case ATOM:
return str;
case INT:
return to_string(stack_data.i);
return std::to_string(stack_data.i);
case FLOAT:
return to_string(stack_data.f);
return std::to_string(stack_data.f);
case STRING:
for (size_t i = 0; i < str.length(); i++) {
if (str[i] == '"') result += "\\\"";
@ -603,7 +595,7 @@ std::string MlValue::debug() const {
}
return "(" + result + ")";
case BUILTIN:
return "<" + str + " at " + to_string(long(stack_data.b)) + ">";
return "<" + str + " at " + std::to_string(long(stack_data.b)) + ">";
case NIL:
return "nil";
default: