2012-12-05 20:31:06 +00:00
|
|
|
/*
|
|
|
|
* SenchaObject.cpp
|
|
|
|
*
|
|
|
|
* Created on: Dec 5, 2012
|
|
|
|
* Author: attero
|
|
|
|
*/
|
|
|
|
|
|
|
|
#include "SenchaObject.h"
|
|
|
|
|
|
|
|
SenchaObject::SenchaObject() {
|
|
|
|
set_null_value();
|
|
|
|
}
|
|
|
|
|
|
|
|
SenchaObject::~SenchaObject() {
|
|
|
|
// TODO Auto-generated destructor stub
|
|
|
|
}
|
|
|
|
|
2012-12-05 22:27:03 +00:00
|
|
|
|
|
|
|
std::string SenchaObject::repr()
|
|
|
|
{
|
|
|
|
std::string representation = "";
|
|
|
|
switch(type){
|
|
|
|
case string_literal:
|
|
|
|
representation = "type: string\n";
|
|
|
|
representation += this->text;
|
|
|
|
break;
|
|
|
|
case integer_number:
|
|
|
|
representation = "type: integer\n";
|
|
|
|
representation += to_string(this->integer);
|
|
|
|
break;
|
|
|
|
case float_number:
|
|
|
|
representation = "type: float\n";
|
|
|
|
representation += to_string(this->number);
|
|
|
|
break;
|
|
|
|
case null:
|
|
|
|
representation = "type: null\n";
|
|
|
|
representation += "null";
|
|
|
|
break;
|
2012-12-08 19:59:05 +00:00
|
|
|
case symbol:
|
|
|
|
representation = "type: symbol\n";
|
|
|
|
representation += this->text;
|
|
|
|
break;
|
2012-12-05 22:27:03 +00:00
|
|
|
case invalid:
|
|
|
|
representation = "type: invalid\n";
|
|
|
|
representation += "some crap";
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
return representation;
|
|
|
|
}
|
|
|
|
|
2012-12-05 20:31:06 +00:00
|
|
|
SenchaObject SenchaObject::operator+(const SenchaObject& right)const
|
|
|
|
{
|
|
|
|
SenchaObject result;
|
|
|
|
if(type == right.type)
|
|
|
|
{
|
|
|
|
switch(type){
|
|
|
|
case string_literal:
|
2012-12-08 21:33:34 +00:00
|
|
|
result.set_new_string(this->text + right.text);
|
2012-12-05 20:31:06 +00:00
|
|
|
break;
|
|
|
|
case integer_number:
|
|
|
|
result.set_value(this->integer + right.integer);
|
|
|
|
break;
|
|
|
|
case float_number:
|
|
|
|
result.set_value(this->number + right.number);
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
result.type = invalid;
|
|
|
|
}
|
|
|
|
|
|
|
|
return result;
|
|
|
|
|
|
|
|
}
|
2012-12-07 15:58:27 +00:00
|
|
|
|
|
|
|
SenchaObject SenchaObject::operator-(const SenchaObject& right)const
|
|
|
|
{
|
|
|
|
SenchaObject result;
|
|
|
|
if(type == right.type)
|
|
|
|
{
|
|
|
|
switch(type){
|
|
|
|
case string_literal:
|
|
|
|
result.type = invalid;
|
|
|
|
break;
|
|
|
|
case integer_number:
|
|
|
|
result.set_value(this->integer - right.integer);
|
|
|
|
break;
|
|
|
|
case float_number:
|
|
|
|
result.set_value(this->number - right.number);
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
result.type = invalid;
|
|
|
|
}
|
|
|
|
|
|
|
|
return result;
|
|
|
|
}
|
|
|
|
|
|
|
|
SenchaObject SenchaObject::operator*(const SenchaObject& right)const
|
|
|
|
{
|
|
|
|
SenchaObject result;
|
|
|
|
if(type == right.type)
|
|
|
|
{
|
|
|
|
switch(type){
|
|
|
|
case string_literal:
|
|
|
|
result.type = invalid;
|
|
|
|
break;
|
|
|
|
case integer_number:
|
|
|
|
result.set_value(this->integer * right.integer);
|
|
|
|
break;
|
|
|
|
case float_number:
|
|
|
|
result.set_value(this->number * right.number);
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
result.type = invalid;
|
|
|
|
}
|
|
|
|
|
|
|
|
return result;
|
|
|
|
}
|
|
|
|
|
|
|
|
SenchaObject SenchaObject::operator/(const SenchaObject& right)const
|
|
|
|
{
|
|
|
|
SenchaObject result;
|
|
|
|
if(type == right.type)
|
|
|
|
{
|
|
|
|
switch(type){
|
|
|
|
case string_literal:
|
|
|
|
result.type = invalid;
|
|
|
|
break;
|
|
|
|
case integer_number:
|
|
|
|
result.set_value(this->integer / right.integer);
|
|
|
|
break;
|
|
|
|
case float_number:
|
|
|
|
result.set_value(this->number / right.number);
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
result.type = invalid;
|
|
|
|
}
|
|
|
|
|
|
|
|
return result;
|
|
|
|
}
|
|
|
|
|
|
|
|
//TODO change code above to something more generic
|