32#include "../utility/PError.h"
33#include "../utility/Defs.h"
46#include <emscripten.h>
80#ifndef PEBL_EMSCRIPTEN
87 mData.iNumber = (
pInt)i;
101 mData.iNumber =
static_cast<pInt>(i);
118#ifndef PEBL_EMSCRIPTEN
152 mData.String = strdup(mystring);
167 char * dummy = (
char*)malloc(2*
sizeof(
char));
170 mData.String = dummy;
182 const char* dummy = mystring.c_str();
183 mData.String = strdup(dummy);
198 mData.Function= strdup(mystring);
break;
200 mData.String= strdup(mystring);
break;
203 mData.Variable= strdup(mystring);
break;
212 mData.String = strdup(mystring);
235 mData.Signal = signal;
244 mData.pFunction = pfunc;
257 mData.iNumber = (
pInt)b;
266 mDataType(v.GetDataType()),
268 mCreationTime(v.GetCreationTime())
276#ifdef PEBL_EMSCRIPTEN
279 cerr <<
"ERROR: Variant copy constructor received corrupted source Variant" << endl;
280 cerr <<
"Invalid mDataType value: " << mDataType <<
" (expected 0-" <<
P_DATA_COMPLEXDATA <<
")" << endl;
281 cerr <<
"Source address: " << &v << endl;
282 cerr <<
"Source mComplexData: " << v.mComplexData << endl;
283 cerr <<
"Source mCreationTime: " << v.mCreationTime << endl;
287 console.error(
"Stack trace at corruption point:");
291 cerr <<
"This indicates memory corruption or uninitialized Variant" << endl;
312 mData.String = strdup(v.
GetString().c_str());
325 char* cstr =
new char[tmpfname.length()+1];
326 strcpy(cstr,tmpfname.c_str());
327 mData.Function = cstr;
362 cerr <<
"Undefined Data Type in Variant copy constructor. Type: " << mDataType << endl;
403 std::string tmp1, tmp2;
513 bool b = (str1 == str2);
535 return (obj1.
get() == obj2.
get());
566 return (str1 < str2);
577{
return Equal(rhs); }
582{
return ! ((*this) == rhs); }
592{
return rhs < (*this); }
597{
return ! ((*this) > rhs); }
602{
return rhs <= (*this); }
632 mData.String = strdup(value.
GetString().c_str());
676 mData.fNumber = value;
689 mData.iNumber = value;
702 mData.iNumber = value;
706#ifndef PEBL_EMSCRIPTEN
714 mData.iNumber = (
pInt)value;
725 mData.fNumber = (
pDouble)value;
737 mData.fNumber = (
pDouble)value;
751 mData.String = strdup(value);
764 mData.String = strdup(value.c_str());
799 out <<
"Function Pointer" ;
829#ifndef PEBL_EMSCRIPTEN
830Variant::operator int()
832 return static_cast<int>(GetInteger());
837Variant::operator
long unsigned int()
839 return static_cast<long unsigned int>(GetInteger());
855Variant::operator
const std::string ()
const
866Variant::operator bool ()
896 return "PEBL Integer Type";
899 return "PEBL Floating-Point Type";
902 return "PEBL String Type";
905 return "PEBL Local Variable Type";
908 return "PEBL Global Variable Type";
911 return "PEBL Function Type";
914 return "PEBL Function Pointer Type";
917 return "PEBL Internal Stack Signal Type";
920 return "PEBL Complex data within Variant";
924 return "Undefined PEBL Variant Type";
1002 return mData.iNumber;
1005 return (
pInt)mData.fNumber;
1008 return strtol(mData.String,0,10);
1030 return (
pDouble)mData.iNumber;
1033 return mData.fNumber;
1063 std::ostringstream o;
1070 std::ostringstream o;
1076 return std::string(mData.String);
1078 return mData.Function;
1083 return std::string(mData.Variable);
1097 std::ostringstream o;
1098 o << *pob << std::flush;
1127 cout << mDataType << endl;
1143 return std::string(mData.Variable);
1167 std::string::size_type pos = tmp.find(
".");
1168 if(pos == std::string::npos)
1171 return tmp.substr(0, pos);
1192 std::string::size_type pos = tmp.find(
".");
1193 if(pos == std::string::npos)
1196 return tmp.substr(pos+1,tmp.size());
1214 const char* fname = mData.Function;
1222 std::string tmp = std::string(fname);
1270 return mData.Signal;
1285 return mData.pFunction;
1301 return mComplexData;
1311 mComplexData = data;
1328 delete mComplexData;
1340 mData.String =
NULL;
1347 free(mData.Variable);
1348 mData.Variable =
NULL;
1355 free(mData.Function);
1356 mData.Function =
NULL;
ostream & operator<<(ostream &out, const Variant &v)
overload operator<<
@ P_DATA_FUNCTION_POINTER
@ STACK_TERMINATE_EVENT_LOOP
Variant(* pFunc)(Variant)
counted_ptr< PEBLObjectBase > GetObject() const
Variant operator/(const Variant &rhs) const
This overloads the / operator for Variants.
bool IsComplexData() const
bool Less(const Variant &rhs) const
Primitive Comparing Method.
bool operator!=(const Variant &rhs) const
bool IsGlobalVariable() const
std::string GetVariablePropertyName() const
bool Equal(const Variant &rhs) const
Variant operator-(const Variant &rhs) const
This overloads the - operator for Variants.
pFunc GetFunctionPointer() const
bool IsStackSignal() const
Variant operator=(const Variant &value)
Assignment Operator (overloaded)
bool IsFunctionPointer() const
bool operator<=(const Variant &rhs) const
std::string GetVariableName() const
bool operator>(const Variant &rhs) const
std::string GetString() const
StackSignalType GetSignal() const
bool operator==(const Variant &rhs) const
PComplexData * GetComplexData() const
bool IsNumber() const
This tests whether the Variant is a number (i.e., a float or an integer.)
void SetComplexData(PComplexData *data)
Variant GetSignalName() const
bool IsLocalVariable() const
Variant operator*(const Variant &rhs) const
This overloads the * operator for Variants.
std::string GetDataTypeName() const
This returns the type as a string.
bool operator>=(const Variant &rhs) const
std::string GetVariableBaseName() const
bool operator<(const Variant &rhs) const
std::string GetFunctionName() const
VariantDataType GetDataType() const
This returns the type as an enum.
Variant operator+(const Variant &rhs) const
~Variant()
Standard Destructor.
pDouble StringToPDouble(const char *mystring)
std::string ToUpper(const std::string &text)
void SignalWarning(const std::string &message)
void SignalFatalError(const std::string &message)