PEBL 2.2
Psychology Experiment Building Language - Cross-platform psychological experiment development system
Variant Class Reference

#include <Variant.h>

Public Member Functions

 Variant ()
 
 Variant (const pInt i)
 Standard constructors.
 
 Variant (int i)
 
 Variant (const long unsigned int i)
 
 Variant (pDouble f)
 
 Variant (const double f)
 
 Variant (float f)
 
 Variant (const char *mystring)
 
 Variant (const char character)
 
 Variant (const char *mystring, VariantDataType type)
 
 Variant (const StackSignalType)
 This is an internal data type used by the stack evaluator.
 
 Variant (pFunc)
 
 Variant (const PComplexData *pcd)
 
 Variant (bool b)
 
 Variant (const std::string s)
 
 ~Variant ()
 Standard Destructor.
 
 Variant (const Variant &v)
 Copy Constructor.
 
Variant operator+ (const Variant &rhs) const
 
Variant operator- (const Variant &rhs) const
 This overloads the - operator for Variants.
 
Variant operator* (const Variant &rhs) const
 This overloads the * operator for Variants.
 
Variant operator/ (const Variant &rhs) const
 This overloads the / operator for Variants.
 
bool Equal (const Variant &rhs) const
 
bool Less (const Variant &rhs) const
 Primitive Comparing Method.
 
bool operator< (const Variant &rhs) const
 
bool operator> (const Variant &rhs) const
 
bool operator<= (const Variant &rhs) const
 
bool operator>= (const Variant &rhs) const
 
bool operator== (const Variant &rhs) const
 
bool operator!= (const Variant &rhs) const
 
Variant operator= (const Variant &value)
 Assignment Operator (overloaded)
 
Variant operator= (const pDouble &value)
 
Variant operator= (const pInt &value)
 
Variant operator= (const long unsigned int &value)
 
Variant operator= (const int &value)
 
Variant operator= (const double &value)
 
Variant operator= (const float &value)
 
Variant operator= (const char *value)
 
Variant operator= (const std::string value)
 
 operator pDouble ()
 Typecast Operators.
 
 operator pInt ()
 
 operator long unsigned int ()
 
 operator int ()
 
 operator const std::string () const
 
 operator bool ()
 
VariantDataType GetDataType () const
 This returns the type as an enum.
 
std::string GetDataTypeName () const
 This returns the type as a string.
 
bool IsNumber () const
 This tests whether the Variant is a number (i.e., a float or an integer.)
 
bool IsFloat () const
 
bool IsInteger () const
 
bool IsVariable () const
 
bool IsLocalVariable () const
 
bool IsGlobalVariable () const
 
bool IsString () const
 
bool IsFunction () const
 
bool IsFunctionPointer () const
 
bool IsComplexData () const
 
bool IsStackSignal () const
 
pInt GetInteger () const
 
pDouble GetFloat () const
 
std::string GetVariableName () const
 
std::string GetVariableBaseName () const
 
std::string GetVariablePropertyName () const
 
std::string GetFunctionName () const
 
std::string GetString () const
 
StackSignalType GetSignal () const
 
Variant GetSignalName () const
 
pFunc GetFunctionPointer () const
 
PComplexDataGetComplexData () const
 
void SetComplexData (PComplexData *data)
 
void SetCreationTime (long unsigned int time)
 
long unsigned int GetCreationTime () const
 

Protected Member Functions

void free_mData ()
 

Friends

std::ostream & operator<< (std::ostream &out, const Variant &v)
 

Detailed Description

Definition at line 66 of file Variant.h.

Constructor & Destructor Documentation

◆ Variant() [1/16]

Variant::Variant ( )

Definition at line 58 of file Variant.cpp.

58 :
59 mDataType(P_DATA_UNDEFINED),
60 mComplexData(NULL),
61 mCreationTime(0)
62{
63
64 mData.iNumber = 0;
65}
#define NULL
Definition BinReloc.cpp:317
@ P_DATA_UNDEFINED
Definition Variant.h:41

Referenced by GetSignalName(), operator*(), operator+(), operator-(), and operator/().

◆ Variant() [2/16]

Variant::Variant ( const pInt  i)

Standard constructors.

Definition at line 69 of file Variant.cpp.

69 :
70 mDataType(P_DATA_NUMBER_INTEGER),
71 mComplexData(NULL),
72 mCreationTime(0)
73{
74
75 mData.iNumber = i;
76
77}
@ P_DATA_NUMBER_INTEGER
Definition Variant.h:45

◆ Variant() [3/16]

Variant::Variant ( int  i)

Definition at line 82 of file Variant.cpp.

82 :
83 mDataType(P_DATA_NUMBER_INTEGER),
84 mComplexData(NULL),
85 mCreationTime(0)
86{
87 mData.iNumber = (pInt)i;
88
89}
#define pInt
Definition Defs.h:8

References pInt.

◆ Variant() [4/16]

Variant::Variant ( const long unsigned int  i)

Definition at line 95 of file Variant.cpp.

95 :
96 mDataType(P_DATA_NUMBER_INTEGER),
97 mComplexData(NULL),
98 mCreationTime(0)
99{
100
101 mData.iNumber = static_cast<pInt>(i);
102
103}

References pInt.

◆ Variant() [5/16]

Variant::Variant ( pDouble  f)

Definition at line 108 of file Variant.cpp.

108 :
109 mDataType(P_DATA_NUMBER_FLOAT),
110 mComplexData(NULL),
111 mCreationTime(0)
112
113{
114
115 mData.fNumber = f;
116}
@ P_DATA_NUMBER_FLOAT
Definition Variant.h:46

◆ Variant() [6/16]

Variant::Variant ( const double  f)

Definition at line 120 of file Variant.cpp.

120 :
121 mDataType(P_DATA_NUMBER_FLOAT),
122 mComplexData(NULL),
123 mCreationTime(0)
124{
125 mData.fNumber=(pDouble)f;
126}
#define pDouble
Definition Defs.h:7

References pDouble.

◆ Variant() [7/16]

Variant::Variant ( float  f)

Definition at line 130 of file Variant.cpp.

130 :
131 mDataType(P_DATA_NUMBER_FLOAT),
132 mComplexData(NULL),
133 mCreationTime(0)
134
135{
136
137 mData.fNumber = (pDouble)f;
138
139}

References pDouble.

◆ Variant() [8/16]

Variant::Variant ( const char *  mystring)

Definition at line 143 of file Variant.cpp.

143 :
144 mDataType(P_DATA_STRING),
145 mComplexData(NULL),
146 mCreationTime(0)
147 // mData(NULL)
148{
149
150
151 //cout << P_DATA_STRING << endl;
152 mData.String = strdup(mystring);
153 if(!mData.String)
154 PError::SignalFatalError("Failed to copy string.");
155}
@ P_DATA_STRING
Definition Variant.h:47
void SignalFatalError(const std::string &message)

References PError::SignalFatalError().

◆ Variant() [9/16]

Variant::Variant ( const char  character)

Definition at line 159 of file Variant.cpp.

159 :
160 mDataType(P_DATA_STRING),
161 mComplexData(NULL),
162 mCreationTime(0)
163
164{
165
166 //Make a dummy string to place the character into.
167 char * dummy = (char*)malloc(2*sizeof(char));
168 dummy[0]=character;
169 dummy[1]='\0';
170 mData.String = dummy;
171
172}

◆ Variant() [10/16]

Variant::Variant ( const char *  mystring,
VariantDataType  type 
)

Definition at line 188 of file Variant.cpp.

188 :
189 mDataType(type),
190 mComplexData(NULL),
191// mData((int)0),
192 mCreationTime(0)
193{
194
195 switch(type)
196 {
197 case P_DATA_FUNCTION:
198 mData.Function= strdup(mystring); break;
199 case P_DATA_STRING:
200 mData.String= strdup(mystring); break;
203 mData.Variable= strdup(mystring); break;
204
205 case P_DATA_UNDEFINED:
209 default:
210 //If it isn't one of the above, change it into a string
211 mDataType = P_DATA_STRING;
212 mData.String = strdup(mystring);
213 break;
214 }
215}
@ P_DATA_LOCALVARIABLE
Definition Variant.h:48
@ P_DATA_COMPLEXDATA
Definition Variant.h:50
@ P_DATA_FUNCTION
Definition Variant.h:43
@ P_DATA_GLOBALVARIABLE
Definition Variant.h:49

References P_DATA_COMPLEXDATA, P_DATA_FUNCTION, P_DATA_GLOBALVARIABLE, P_DATA_LOCALVARIABLE, P_DATA_NUMBER_FLOAT, P_DATA_NUMBER_INTEGER, P_DATA_STRING, and P_DATA_UNDEFINED.

◆ Variant() [11/16]

Variant::Variant ( const StackSignalType  signal)

This is an internal data type used by the stack evaluator.

Definition at line 228 of file Variant.cpp.

228 :
229 mDataType(P_DATA_STACK_SIGNAL),
230 mComplexData(NULL),
231 // mData((StackSignalType)signal),
232 mCreationTime(0)
233
234{
235 mData.Signal = signal;
236}
@ P_DATA_STACK_SIGNAL
Definition Variant.h:42

◆ Variant() [12/16]

Variant::Variant ( pFunc  pfunc)

Definition at line 239 of file Variant.cpp.

239 :
240 mDataType(P_DATA_FUNCTION_POINTER),
241 mComplexData(NULL),
242 mCreationTime(0)
243{
244 mData.pFunction = pfunc;
245}
@ P_DATA_FUNCTION_POINTER
Definition Variant.h:44

◆ Variant() [13/16]

Variant::Variant ( const PComplexData pcd)

Definition at line 217 of file Variant.cpp.

217 :
218 mDataType(P_DATA_COMPLEXDATA),
219 mComplexData(NULL),
220 mCreationTime(0)
221{
222
223 mComplexData = new PComplexData(pcd);
224}

◆ Variant() [14/16]

Variant::Variant ( bool  b)

Definition at line 250 of file Variant.cpp.

250 :
251 mDataType(P_DATA_NUMBER_INTEGER),
252 mComplexData(NULL),
253 mCreationTime(0)
254
255{
256
257 mData.iNumber = (pInt)b;
258}

References pInt.

◆ Variant() [15/16]

Variant::Variant ( const std::string  s)

Definition at line 175 of file Variant.cpp.

175 :
176 mDataType(P_DATA_STRING),
177 mComplexData(NULL),
178 mCreationTime(0)
179
180{
181
182 const char* dummy = mystring.c_str();
183 mData.String = strdup(dummy);
184
185}

◆ ~Variant()

Variant::~Variant ( )

Standard Destructor.

Standard destructor. This should take care of cleaning up after data subtypes that put stuff on the stack.

Definition at line 376 of file Variant.cpp.

377{
378 //This is needed to destroy counted pointers, but it leads to a
379 //crash later.
380 free_mData();
381}
void free_mData()
Definition Variant.cpp:1320

References free_mData().

◆ Variant() [16/16]

Variant::Variant ( const Variant v)

Copy Constructor.

Copy Constructor for variant

Definition at line 265 of file Variant.cpp.

265 :
266 mDataType(v.GetDataType()),
267 mComplexData(NULL),
268 mCreationTime(v.GetCreationTime())
269{
270
271 // cout << "creating/copy10:[" << v << "]("<<GetCreationTime()<<")"<< endl;
272
273 //This should behave differently depending on what type of variant v is
274 // mDataType already initialized in initializer list above
275
276#ifdef PEBL_EMSCRIPTEN
277 // Validate that mDataType is within valid range
278 if(mDataType < 0 || mDataType > P_DATA_COMPLEXDATA) {
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;
284
285 // Print stack trace using Emscripten
286 EM_ASM({
287 console.error("Stack trace at corruption point:");
288 console.trace();
289 });
290
291 cerr << "This indicates memory corruption or uninitialized Variant" << endl;
292 // Set to undefined and continue rather than crash
293 mDataType = P_DATA_UNDEFINED;
294 mData.iNumber = 0;
295 return;
296 }
297#endif
298
299 switch(mDataType)
300 {
301
302 case P_DATA_NUMBER_INTEGER: // an integer
303 mData.iNumber = v.GetInteger();
304 break;
305
306 case P_DATA_NUMBER_FLOAT: // a float
307 mData.fNumber = v.GetFloat();
308 break;
309
310 case P_DATA_STRING:
311 // cout << "testing case string:<" << v << ">"<<endl;
312 mData.String = strdup(v.GetString().c_str());
313 break;
314
315 case P_DATA_LOCALVARIABLE: // a variable name
316 case P_DATA_GLOBALVARIABLE: // a variable name
317 mData.Variable = strdup(v.GetVariableName().c_str());
318 break;
319
320 case P_DATA_FUNCTION:
321 {
322 //Memory problem here, diagnosed by efence:
323 std::string tmpfname = v.GetFunctionName();
324 // const char* tmpfname2 = tmpfname.c_str();
325 char* cstr = new char[tmpfname.length()+1];
326 strcpy(cstr,tmpfname.c_str());
327 mData.Function = cstr;
328
329 }
330
331 break;
332
334 mData.pFunction = v.GetFunctionPointer();
335 break;
336
337
339 mData.Signal = v.GetSignal();
340 break;
341
342 //This needs to make a deep copy
343
345 {
346
347 //cout<<"TYPE:" << v << endl;
348 PComplexData * pcd = v.GetComplexData();
349
350 if(pcd)
351 mComplexData = new PComplexData(*pcd);
352 else
353 mComplexData = NULL;
354
355 }
356 break;
357
358 case P_DATA_UNDEFINED: // undefined, not an error
359 break;
360 default:
361
362 cerr << "Undefined Data Type in Variant copy constructor. Type: " << mDataType << endl;
363 cerr << v << endl;
364 PError::SignalFatalError("Undefined Data Type.");
365 break;
366
367 }
368
369}
pInt GetInteger() const
Definition Variant.cpp:997
long unsigned int GetCreationTime() const
Definition Variant.h:185
pFunc GetFunctionPointer() const
Definition Variant.cpp:1280
std::string GetVariableName() const
Definition Variant.cpp:1138
std::string GetString() const
Definition Variant.cpp:1056
StackSignalType GetSignal() const
Definition Variant.cpp:1265
PComplexData * GetComplexData() const
Definition Variant.cpp:1299
pDouble GetFloat() const
Definition Variant.cpp:1025
std::string GetFunctionName() const
Definition Variant.cpp:1208
VariantDataType GetDataType() const
This returns the type as an enum.
Definition Variant.cpp:885

References GetComplexData(), GetFloat(), GetFunctionName(), GetFunctionPointer(), GetInteger(), GetSignal(), GetString(), GetVariableName(), NULL, P_DATA_COMPLEXDATA, P_DATA_FUNCTION, P_DATA_FUNCTION_POINTER, P_DATA_GLOBALVARIABLE, P_DATA_LOCALVARIABLE, P_DATA_NUMBER_FLOAT, P_DATA_NUMBER_INTEGER, P_DATA_STACK_SIGNAL, P_DATA_STRING, P_DATA_UNDEFINED, and PError::SignalFatalError().

Member Function Documentation

◆ Equal()

bool Variant::Equal ( const Variant rhs) const

Primitive Compare Method

Definition at line 491 of file Variant.cpp.

492{
493 //std::cout << "variant equal: "<< *this << "==" << rhs << endl;
494 //If they are both integers, make equality be exact.
495 //If one is a float, make equality be with some tolerance.
496
497 if(this->IsInteger() && rhs.IsInteger())
498 {
499 return (this->GetInteger() == rhs.GetInteger());
500 }
501 else if (this->IsNumber() && rhs.IsNumber())
502 {
503 return (std::abs(this->GetFloat() - rhs.GetFloat()) < .00000000001);
504 }
505 else if (this->IsString() && rhs.IsString())
506 { //If both are strings, compare them
507
508 //Get copies of the strings.
509 std::string str1 = this->GetString();
510 std::string str2 = rhs.GetString();
511
512 //strcmp returns 0 if they are identical, a number otherwise
513 bool b = (str1 == str2);
514 return b;
515 }
516 else if (this->IsStackSignal() && rhs.IsStackSignal())
517 {
518 return (this->GetSignal() == rhs.GetSignal());
519 }
520 else if (this->IsComplexData() && rhs.IsComplexData())
521 {
522 // Compare complex data objects by their underlying pointer addresses
523 // Two Variants are equal if they reference the SAME object instance
524 PComplexData* pcd1 = this->GetComplexData();
525 PComplexData* pcd2 = rhs.GetComplexData();
526
527 if(!pcd1 || !pcd2)
528 return false; // One or both are null
529
530 // Get the underlying object pointers and compare
533
534 // Compare raw pointers - same object instance?
535 return (obj1.get() == obj2.get());
536 }
537 return false;
538}
counted_ptr< PEBLObjectBase > GetObject() const
bool IsComplexData() const
Definition Variant.cpp:984
bool IsString() const
Definition Variant.cpp:948
bool IsStackSignal() const
Definition Variant.cpp:989
bool IsInteger() const
Definition Variant.cpp:942
bool IsNumber() const
This tests whether the Variant is a number (i.e., a float or an integer.)
Definition Variant.cpp:930
X * get() const
Definition rc_ptrs.h:110

References counted_ptr< X >::get(), GetComplexData(), GetFloat(), GetInteger(), PComplexData::GetObject(), GetSignal(), GetString(), IsComplexData(), IsInteger(), IsNumber(), IsStackSignal(), and IsString().

Referenced by operator==().

◆ free_mData()

void Variant::free_mData ( )
protected

This method just clears out any part of mData That is on the free store, including any PComplexData that is held by the variant. PCDs are 1-1 with variants; they should not be shared by multiple variants, although the data they reference is ref-counted and may be shared.

Definition at line 1320 of file Variant.cpp.

1321{
1322 // Debug: std::cout << "[VARIANT] free_mData() called. Type: " << mDataType
1323 // << ", mComplexData: " << mComplexData << std::endl;
1324
1325 if(mComplexData)
1326 {
1327 // Debug: std::cout << "[VARIANT] Deleting PComplexData at: " << mComplexData << std::endl;
1328 delete mComplexData;
1329 mComplexData =NULL;
1330
1331 //mDataType=P_DATA_UNDEFINED;
1332 } else
1333 {
1334
1335 if(mDataType == P_DATA_STRING )
1336 {
1337 if(mData.String)
1338 {
1339 free(mData.String);
1340 mData.String = NULL;
1341 }
1342 }
1343 else if(IsVariable())
1344 {
1345 if(mData.Variable)
1346 {
1347 free(mData.Variable);
1348 mData.Variable = NULL;
1349 }
1350 }
1351 else if(mDataType == P_DATA_FUNCTION)
1352 {
1353 if(mData.Function)
1354 {
1355 free(mData.Function);
1356 mData.Function = NULL;
1357 }
1358 }
1359
1360 else if(mDataType == P_DATA_COMPLEXDATA)
1361 {
1362 }
1363
1364 }
1365
1366 // mDataType = P_DATA_UNDEFINED;
1367}
bool IsVariable() const
Definition Variant.cpp:954

References IsVariable(), NULL, P_DATA_COMPLEXDATA, P_DATA_FUNCTION, and P_DATA_STRING.

Referenced by operator=(), operator=(), operator=(), operator=(), operator=(), operator=(), operator=(), operator=(), operator=(), and ~Variant().

◆ GetComplexData()

PComplexData * Variant::GetComplexData ( ) const

This will return a pointer to the complex data held within the variant.

Definition at line 1299 of file Variant.cpp.

1300{
1301 return mComplexData;
1302}

Referenced by PEBLMath::Abs(), PEBLMath::AbsFloor(), PEBLMath::ACos(), PEBLObjects::AddObject(), PEBLList::Append(), PEBLStream::AppendFile(), PEBLMath::ASin(), PEBLMath::ATan(), PEBLObjects::Bezier(), Evaluator::CallFunction(), PEBLEnvironment::CallFunction(), PEBLMath::Ceiling(), PEBLEnvironment::CheckProcessStatus(), PEBLObjects::Circle(), PEBLStream::CopyFile(), PEBLEnvironment::CopyToClipboard(), PEBLString::CopyToClipboard(), PEBLMath::Cos(), PEBLList::CrossFactorWithoutDuplicates(), PEBLMath::DegToRad(), PEBLEnvironment::DeleteFile(), PEBLList::DesignFullCounterbalance(), PEBLString::DetectTextScript(), PlatformPolygon::Draw(), PlatformBezier::Draw(), PlatformWindow::Draw(), PEBLObjects::Draw(), PEBLObjects::DrawFor(), PEBLObjects::Ellipse(), PEBLStream::EndOfFile(), PEBLStream::EndOfLine(), Equal(), Evaluator::Evaluate(), Evaluator::Evaluate1(), PEBLEnvironment::ExitQuietly(), PEBLMath::Exp(), PEBLList::Fifth(), PEBLStream::FileClose(), PEBLEnvironment::FileExists(), PEBLStream::FileOpenAppend(), PEBLStream::FileOpenOverwrite(), PEBLStream::FileOpenRead(), PEBLStream::FileOpenWrite(), PEBLStream::FilePrint(), PEBLStream::FilePrint_(), PEBLStream::FileReadCharacter(), PEBLStream::FileReadLine(), PEBLStream::FileReadList(), PEBLStream::FileReadTable(), PEBLStream::FileReadText(), PEBLStream::FileReadWord(), PEBLString::FindInString(), PEBLList::First(), PEBLMath::Floor(), PEBLStream::Format(), PEBLList::Fourth(), PEBLObjects::GetAudioStats(), PFont::GetBackgroundColorPtr(), PDrawObject::GetColor(), PEBLObjects::GetCursorPosition(), PEBLEnvironment::GetDirectoryListing(), PEBLObjects::GetEyeObject(), PFont::GetFontColorPtr(), PEBLString::GetFontForText(), PEBLEnvironment::GetInput0(), PEBLEnvironment::GetJoystick(), PEBLEnvironment::GetJoystickAxisState(), PEBLEnvironment::GetJoystickBallState(), PEBLEnvironment::GetJoystickButtonState(), PEBLEnvironment::GetJoystickHatState(), PEBLObjects::GetLineBreaks(), PEBLEnvironment::GetNumJoystickAxes(), PEBLEnvironment::GetNumJoystickBalls(), PEBLEnvironment::GetNumJoystickButtons(), PEBLEnvironment::GetNumJoystickHats(), PEBLEnvironment::GetObjectTime(), PDrawObject::GetOutlineColor(), PEBLObjects::GetParent(), PEBLObjects::GetPixelColor(), PEBLObjects::GetProperty(), PEBLObjects::GetPropertyList(), PEBLObjects::GetSize(), GetString(), PEBLObjects::GetText(), PEBLEnvironment::GetTextBoxCursorFromClick(), PError::GetTypeName(), PEBLEnvironment::GetVideoModes(), PEBLObjects::GetVocalResponseTime(), PEBLObjects::Hide(), PEBLEnvironment::IsAudioOut(), PEBLEnvironment::IsCanvas(), PEBLEnvironment::IsColor(), PEBLEnvironment::IsCustomObject(), PEBLEnvironment::IsDirectory(), PEBLEnvironment::IsFileStream(), PEBLEnvironment::IsFloat(), PEBLEnvironment::IsFont(), PEBLEnvironment::IsImage(), PEBLEnvironment::IsInteger(), PEBLEnvironment::IsJoystick(), PEBLEnvironment::IsKeyDown(), PEBLEnvironment::IsKeyUp(), PEBLEnvironment::IsLabel(), PEBLEnvironment::IsList(), PEBLList::IsMember(), PEBLEnvironment::IsNumber(), PEBLEnvironment::IsPEBLObject(), PEBLString::IsRTL(), PEBLEnvironment::IsShape(), PEBLEnvironment::IsString(), PEBLEnvironment::IsText(), PEBLEnvironment::IsTextBox(), PEBLEnvironment::IsWidget(), PEBLEnvironment::IsWindow(), PEBLList::Last(), PEBLEnvironment::LaunchFile(), PEBLList::Length(), PEBLObjects::Line(), PEBLList::ListToString(), PEBLMath::Ln(), PEBLObjects::LoadAudioFile(), PEBLObjects::LoadMovie(), PEBLObjects::LoadSound(), PEBLMath::Log10(), PEBLMath::Log2(), PEBLMath::LogN(), PEventLoop::Loop1(), PEBLString::Lowercase(), PEBLObjects::MakeAudioInputBuffer(), PEBLObjects::MakeCanvas(), PEBLObjects::MakeColor(), PEBLObjects::MakeColorRGB(), PEBLObjects::MakeCustomObject(), PEBLEnvironment::MakeDirectory(), PEBLObjects::MakeFont(), PEBLObjects::MakeImage(), PEBLObjects::MakeLabel(), PEBLObjects::MakeSineWave(), PEBLObjects::MakeTextBox(), PEBLObjects::MakeWindow(), PEBLStream::MD5File(), PEBLStream::MD5Sum(), PEBLList::Merge(), PEBLMath::Mod(), PEBLList::ModList(), PEBLObjects::Move(), PEBLList::Nth(), PEBLMath::NthRoot(), operator<<(), operator=(), PEBLStream::ParseJSON(), PEBLObjects::PausePlayback(), PEBLInterpret(), PEBLObjects::PlayBackground(), PEBLObjects::PlayForeground(), PEBLEnvironment::PlayMovie(), PEBLObjects::Polygon(), PEBLMath::Pow(), PEBLStream::Print(), PEBLStream::Print_(), PEBLObjects::PrintProperties(), PEBLObjects::PropertyExists(), PEBLList::PushOnEnd(), PEBLMath::RadToDeg(), PEBLMath::RandomBernoulli(), PEBLMath::RandomBinomial(), PEBLMath::RandomDiscrete(), PEBLMath::RandomExponential(), PEBLMath::RandomLogNormal(), PEBLMath::RandomNormal(), PEBLMath::RandomUniform(), PEBLObjects::RecordToBuffer(), PEBLObjects::Rectangle(), PEBLMath::Recurse(), PEBLMath::Recurse2(), PEBLString::RegexMatch(), PEBLEnvironment::RegisterEvent(), PEBLObjects::RemoveObject(), PEBLList::Repeat(), PEBLList::RepeatList(), PEBLObjects::ResizeWindow(), PEBLUtility::ResolvePropertyChain(), PEBLList::Rotate(), PEBLObjects::RotoZoom(), PEBLMath::Round(), PEBLObjects::SaveAudioToWaveFile(), PEBLList::Second(), PEBLMath::SeedRNG(), PEBLList::Sequence(), PCanvas::SetColor(), PEBLEnvironment::SetCursorPosition(), PEBLObjects::SetCursorPosition(), PEBLObjects::SetEditable(), PEBLList::SetElement(), PEBLObjects::SetEyeTrackerHandler(), PEBLObjects::SetFont(), PEBLObjects::SetPanning(), PEBLObjects::SetPlayRepeats(), PEBLObjects::SetPoint(), PFont::SetProperty(), PlatformLabel::SetProperty(), PlatformTextBox::SetProperty(), PEBLObjects::SetProperty(), PEBLUtility::SetPropertyChain(), PEBLObjects::SetText(), PEBLEnvironment::SetWorkingDirectory(), PEBLObjects::Show(), PEBLEnvironment::ShowCursor(), PEBLList::Shuffle(), PEBLMath::Sign(), PEBLEnvironment::SignalFatalError(), PEBLMath::Sin(), PEBLList::Sort(), PEBLList::SortBy(), PEBLString::SplitString(), PEBLMath::Sqrt(), PEBLObjects::Square(), PEBLObjects::StartAudioMonitor(), PEBLObjects::StartPlayback(), PEBLObjects::Stop(), PEBLObjects::StopAudioMonitor(), PEBLString::StringLength(), PEBLList::SubList(), PEBLString::SubString(), PEBLEnvironment::SystemCall(), PEBLEnvironment::SystemCallUpdate(), PEBLMath::Tan(), PEBLObjects::ThickLine(), PEBLList::Third(), PEBLString::ToASCII(), PEBLMath::ToFloat(), PEBLMath::ToInt(), PEBLMath::ToNumber(), PEBLMath::ToString(), PEBLEnvironment::TranslateKeyCode(), PEBLEnvironment::TranslateString(), PEBLList::Transpose(), PEBLString::Uppercase(), PEBLEnvironment::VariableExists(), Variant(), PEBLEnvironment::Wait(), PEBLEnvironment::WaitForAnyKeyDownWithTimeout(), PEBLEnvironment::WaitForAnyKeyPressWithTimeout(), PEBLEnvironment::WaitForKeyDown(), PEBLEnvironment::WaitForKeyListDown(), PEBLEnvironment::WaitForKeyPress(), PEBLEnvironment::WaitForKeyRelease(), PEBLEnvironment::WaitForKeyUp(), PEBLEnvironment::WaitForListKeyPress(), PEBLEnvironment::WaitForListKeyPressWithTimeout(), PEBLEnvironment::WaitForMouseButtonWithTimeout(), and PEBLStream::WritePNG().

◆ GetCreationTime()

long unsigned int Variant::GetCreationTime ( ) const
inline

Definition at line 185 of file Variant.h.

185{return mCreationTime;} ;

Referenced by PEBLEnvironment::GetObjectTime().

◆ GetDataType()

VariantDataType Variant::GetDataType ( ) const

This returns the type as an enum.

Data Accessors

Definition at line 885 of file Variant.cpp.

886{
887 return mDataType;
888}

Referenced by Evaluator::Evaluate(), Evaluator::Evaluate(), Evaluator::Evaluate1(), Evaluator::Evaluate1(), DataNode::GetDataType(), operator<<(), and operator=().

◆ GetDataTypeName()

std::string Variant::GetDataTypeName ( ) const

This returns the type as a string.

Definition at line 891 of file Variant.cpp.

892{
893 switch(mDataType)
894 {
896 return "PEBL Integer Type";
897
899 return "PEBL Floating-Point Type";
900
901 case P_DATA_STRING:
902 return "PEBL String Type";
903
905 return "PEBL Local Variable Type";
906
908 return "PEBL Global Variable Type";
909
910 case P_DATA_FUNCTION:
911 return "PEBL Function Type";
912
914 return "PEBL Function Pointer Type";
915
917 return "PEBL Internal Stack Signal Type";
918
920 return "PEBL Complex data within Variant";
921
922 case P_DATA_UNDEFINED:
923 default:
924 return "Undefined PEBL Variant Type";
925 }
926}

References P_DATA_COMPLEXDATA, P_DATA_FUNCTION, P_DATA_FUNCTION_POINTER, P_DATA_GLOBALVARIABLE, P_DATA_LOCALVARIABLE, P_DATA_NUMBER_FLOAT, P_DATA_NUMBER_INTEGER, P_DATA_STACK_SIGNAL, P_DATA_STRING, and P_DATA_UNDEFINED.

Referenced by VCG::Evaluate(), PError::GetTypeName(), main(), and operator<<().

◆ GetFloat()

pDouble Variant::GetFloat ( ) const

Definition at line 1025 of file Variant.cpp.

1026{
1027 switch(mDataType)
1028 {
1029 case P_DATA_NUMBER_INTEGER: // an integer
1030 return (pDouble)mData.iNumber;
1031
1032 case P_DATA_NUMBER_FLOAT: // a float
1033 return mData.fNumber;
1034
1035 case P_DATA_STRING:
1036
1037 return PEBLUtility::StringToPDouble(mData.String);
1038
1042 case P_DATA_FUNCTION:
1044 case P_DATA_UNDEFINED: // undefined, error
1045 default:
1046 PError::SignalWarning("Erroneous Data type in Variant::GetFloat(); returning 0");
1047 return (pDouble)0;
1048
1049 }
1050
1051}
pDouble StringToPDouble(const char *mystring)
void SignalWarning(const std::string &message)
Definition PError.cpp:119

References P_DATA_FUNCTION, P_DATA_FUNCTION_POINTER, P_DATA_GLOBALVARIABLE, P_DATA_LOCALVARIABLE, P_DATA_NUMBER_FLOAT, P_DATA_NUMBER_INTEGER, P_DATA_STACK_SIGNAL, P_DATA_STRING, P_DATA_UNDEFINED, pDouble, PError::SignalWarning(), and PEBLUtility::StringToPDouble().

Referenced by PEBLMath::Abs(), PEBLMath::AbsFloor(), PEBLMath::ACos(), PEBLMath::ASin(), PEBLMath::ATan(), PEBLMath::Ceiling(), PEBLMath::Cos(), PEBLMath::DegToRad(), Equal(), PEBLMath::Exp(), PEBLMath::Floor(), Less(), PEBLMath::Ln(), PEBLMath::Log10(), PEBLMath::Log2(), PEBLMath::LogN(), PEBLMath::NthRoot(), operator*(), operator+(), operator-(), operator/(), operator<<(), operator=(), PEBLMath::RadToDeg(), PEBLMath::Round(), PEBLMath::Sign(), PEBLMath::Sin(), PEBLMath::Sqrt(), PEBLMath::Tan(), PEBLMath::ToFloat(), PEBLMath::ToNumber(), and Variant().

◆ GetFunctionName()

std::string Variant::GetFunctionName ( ) const

Definition at line 1208 of file Variant.cpp.

1209{
1210
1211 if( mDataType == P_DATA_FUNCTION)
1212 {
1213
1214 const char* fname = mData.Function;
1215
1216 //hmm--memory error here in efence.
1217 //may have to do with page allocation stuff,
1218 //affecting NOT pebl itself but PEBL+efence.
1219 //try cat /proc/sys/vm/max_map_count
1220 //and something like
1221 //echo 165535 > /proc/sys/vm/max_map_count
1222 std::string tmp = std::string(fname);
1223 //cout <<"tmp obtained" << tmp << endl;
1224 return tmp;
1225 }
1226 else
1227 {
1228
1229 PError::SignalFatalError("Erroneous Data type in Variant::GetFunctionName()");
1230 return NULL;
1231 }
1232}

References NULL, P_DATA_FUNCTION, and PError::SignalFatalError().

Referenced by Evaluator::CallFunction(), Evaluator::Evaluate1(), Less(), operator<<(), operator=(), and Variant().

◆ GetFunctionPointer()

pFunc Variant::GetFunctionPointer ( ) const

Definition at line 1280 of file Variant.cpp.

1281{
1282
1283 if( mDataType == P_DATA_FUNCTION_POINTER)
1284 {
1285 return mData.pFunction;
1286 }
1287 else
1288 {
1289 return NULL;
1290 }
1291}

References NULL, and P_DATA_FUNCTION_POINTER.

Referenced by Evaluator::Evaluate(), Evaluator::Evaluate1(), operator=(), and Variant().

◆ GetInteger()

pInt Variant::GetInteger ( ) const

◆ GetSignal()

StackSignalType Variant::GetSignal ( ) const

Definition at line 1265 of file Variant.cpp.

1266{
1267
1268 if( mDataType == P_DATA_STACK_SIGNAL)
1269 {
1270 return mData.Signal;
1271 }else
1272 {
1273 return STACK_UNDEFINED;
1274 }
1275}
@ STACK_UNDEFINED
Definition Variant.h:55

References P_DATA_STACK_SIGNAL, and STACK_UNDEFINED.

Referenced by Equal(), Evaluator::Evaluate(), Evaluator::Evaluate1(), GetSignalName(), operator=(), and Variant().

◆ GetSignalName()

Variant Variant::GetSignalName ( ) const

Definition at line 1236 of file Variant.cpp.

1237{
1238
1239 if( mDataType == P_DATA_STACK_SIGNAL)
1240 {
1241
1242 int val = GetSignal();
1243 switch (val)
1244 {
1245 case STACK_LIST_HEAD:
1246 return Variant(val)+Variant("|STACK_LIST_HEAD");
1247 case STACK_RETURN_DUMMY:
1248 return Variant(val)+Variant("|STACK_RETURN_DUMMY");
1250 return Variant(val)+Variant("|STACK_TERMINATE_EVENT_LOOP");
1251 case STACK_BREAK:
1252 return Variant(val)+Variant("|STACK_BREAK");
1253 case STACK_UNDEFINED:
1254 default:
1255 return Variant(val)+Variant("STACK_UNDEFINED");
1256
1257 }
1258 }else{
1259 return STACK_UNDEFINED;
1260 }
1261}
@ STACK_LIST_HEAD
Definition Variant.h:56
@ STACK_BREAK
Definition Variant.h:59
@ STACK_TERMINATE_EVENT_LOOP
Definition Variant.h:58
@ STACK_RETURN_DUMMY
Definition Variant.h:57
Variant()
Definition Variant.cpp:58

References GetSignal(), P_DATA_STACK_SIGNAL, STACK_BREAK, STACK_LIST_HEAD, STACK_RETURN_DUMMY, STACK_TERMINATE_EVENT_LOOP, STACK_UNDEFINED, and Variant().

Referenced by operator<<().

◆ GetString()

std::string Variant::GetString ( ) const

Definition at line 1056 of file Variant.cpp.

1057{
1058
1059 switch(mDataType)
1060 {
1061 case P_DATA_NUMBER_INTEGER: // an integer
1062 {
1063 std::ostringstream o;
1064 o << mData.iNumber;
1065 return o.str();
1066 }
1067
1068 case P_DATA_NUMBER_FLOAT: // a float
1069 {
1070 std::ostringstream o;
1071 o << mData.fNumber;
1072 return o.str();
1073 }
1074
1075 case P_DATA_STRING:
1076 return std::string(mData.String);
1077 case P_DATA_FUNCTION:
1078 return mData.Function;
1079
1080
1083 return std::string(mData.Variable);
1084
1085 case P_DATA_COMPLEXDATA:
1086 {
1087 PComplexData * pcd = GetComplexData();
1089
1090 // cout << *pob << endl;
1091
1092
1093 // std::string tmp = pob->ObjectName();
1094 // return tmp;
1095
1096
1097 std::ostringstream o;
1098 o << *pob << std::flush;
1099
1100 return o.str();
1101
1102// std::stringstream tmp;
1103// tmp << *pob << std::flush;
1104
1105// std::string tmpstring;
1106// tmp >> tmpstring;
1107
1108// return tmpstring.c_str();
1109 // return pcd->GetTypeName().c_str();
1110
1111
1112// cout << *pcd << endl;
1113// cout << "Getting Variant string\n";
1114
1115//
1116// cout << "[[["<< tmpstring << "]]]"<< endl;
1117// cout << "done Getting Variant string\n";
1118// return tmpstring.c_str();
1119
1120 }
1121
1124
1125 case P_DATA_UNDEFINED: // undefined, error
1126 default:
1127 cout << mDataType << endl;
1128 PError::SignalWarning("Erroneous Data type in Variant::GetString");
1129 return "";
1130
1131 }
1132
1133
1134}

References GetComplexData(), PComplexData::GetObject(), P_DATA_COMPLEXDATA, P_DATA_FUNCTION, P_DATA_FUNCTION_POINTER, P_DATA_GLOBALVARIABLE, P_DATA_LOCALVARIABLE, P_DATA_NUMBER_FLOAT, P_DATA_NUMBER_INTEGER, P_DATA_STACK_SIGNAL, P_DATA_STRING, P_DATA_UNDEFINED, and PError::SignalWarning().

Referenced by PEBLStream::AppendFile(), Evaluator::CallFunction(), PEBLEnvironment::CallFunction(), PEBLStream::CopyFile(), Equal(), Evaluator::Evaluate1(), PEBLEnvironment::ExitQuietly(), PEBLStream::FilePrint(), PEBLStream::FileReadList(), PEBLStream::FileReadTable(), PEBLStream::FileReadText(), PlatformWindow::Initialize(), PEBLEnvironment::LaunchFile(), Less(), PEBLObjects::MakeWindow(), PColor::ObjectName(), operator+(), operator<<(), operator=(), PlatformAudioOut::SaveBufferToWave(), PTextBox::SetProperty(), PEBLObjects::SetText(), PEBLEnvironment::SignalFatalError(), PEBLEnvironment::SystemCall(), PEBLEnvironment::SystemCallUpdate(), PEBLMath::ToNumber(), PEBLMath::ToString(), and Variant().

◆ GetVariableBaseName()

std::string Variant::GetVariableBaseName ( ) const

Definition at line 1160 of file Variant.cpp.

1161{
1162
1163 if( mDataType == P_DATA_LOCALVARIABLE || mDataType == P_DATA_GLOBALVARIABLE)
1164 {
1165
1166 std::string tmp = PEBLUtility::ToUpper(mData.Variable);
1167 std::string::size_type pos = tmp.find(".");
1168 if(pos == std::string::npos)
1169 return tmp;
1170 else
1171 return tmp.substr(0, pos);
1172
1173 }
1174 else
1175 {
1176 PError::SignalFatalError("Erroneous Data type in Variant::GetVariableBaseName()");
1177 return NULL;
1178
1179 }
1180}
std::string ToUpper(const std::string &text)

References NULL, P_DATA_GLOBALVARIABLE, P_DATA_LOCALVARIABLE, PError::SignalFatalError(), and PEBLUtility::ToUpper().

Referenced by Evaluator::Evaluate(), Evaluator::Evaluate(), Evaluator::Evaluate1(), and Evaluator::Evaluate1().

◆ GetVariableName()

std::string Variant::GetVariableName ( ) const

Definition at line 1138 of file Variant.cpp.

1139{
1140
1141 if( mDataType == P_DATA_LOCALVARIABLE || mDataType == P_DATA_GLOBALVARIABLE)
1142 {
1143 return std::string(mData.Variable);
1144 }
1145 else
1146 {
1147
1148 PError::SignalFatalError("Erroneous Data type in Variant::GetVariableName()");
1149 return NULL;
1150
1151 }
1152}

References NULL, P_DATA_GLOBALVARIABLE, P_DATA_LOCALVARIABLE, and PError::SignalFatalError().

Referenced by Evaluator::Evaluate(), Evaluator::Evaluate1(), operator<<(), operator=(), and Variant().

◆ GetVariablePropertyName()

std::string Variant::GetVariablePropertyName ( ) const

Definition at line 1185 of file Variant.cpp.

1186{
1187
1188 if( mDataType == P_DATA_LOCALVARIABLE || mDataType == P_DATA_GLOBALVARIABLE)
1189 {
1190
1191 std::string tmp = PEBLUtility::ToUpper(mData.Variable);
1192 std::string::size_type pos = tmp.find(".");
1193 if(pos == std::string::npos)
1194 return "";
1195 else
1196 return tmp.substr(pos+1,tmp.size());
1197 }
1198 else
1199 {
1200 PError::SignalFatalError("Erroneous Data type in Variant::GetVariablePropertyName()");
1201 return NULL;
1202
1203 }
1204}

References NULL, P_DATA_GLOBALVARIABLE, P_DATA_LOCALVARIABLE, PError::SignalFatalError(), and PEBLUtility::ToUpper().

Referenced by Evaluator::Evaluate(), Evaluator::Evaluate(), Evaluator::Evaluate1(), and Evaluator::Evaluate1().

◆ IsComplexData()

◆ IsFloat()

bool Variant::IsFloat ( ) const

Definition at line 937 of file Variant.cpp.

938{
939 return mDataType == P_DATA_NUMBER_FLOAT;
940}

References P_DATA_NUMBER_FLOAT.

Referenced by PEBLEnvironment::IsFloat().

◆ IsFunction()

bool Variant::IsFunction ( ) const

Definition at line 970 of file Variant.cpp.

971{
972 return mDataType == P_DATA_FUNCTION;
973}

References P_DATA_FUNCTION.

Referenced by Less().

◆ IsFunctionPointer()

bool Variant::IsFunctionPointer ( ) const

Definition at line 976 of file Variant.cpp.

977{
978 return mDataType == P_DATA_FUNCTION_POINTER;
979}

References P_DATA_FUNCTION_POINTER.

◆ IsGlobalVariable()

bool Variant::IsGlobalVariable ( ) const

Definition at line 964 of file Variant.cpp.

965{
966 return mDataType == P_DATA_GLOBALVARIABLE;
967}

References P_DATA_GLOBALVARIABLE.

Referenced by Evaluator::Evaluate(), and Evaluator::Evaluate1().

◆ IsInteger()

bool Variant::IsInteger ( ) const

Definition at line 942 of file Variant.cpp.

943{
944 return mDataType == P_DATA_NUMBER_INTEGER;
945
946}

References P_DATA_NUMBER_INTEGER.

Referenced by Equal(), Evaluator::Evaluate(), Evaluator::Evaluate1(), PEBLEnvironment::IsInteger(), operator*(), operator+(), and operator-().

◆ IsLocalVariable()

bool Variant::IsLocalVariable ( ) const

Definition at line 959 of file Variant.cpp.

960{
961 return mDataType == P_DATA_LOCALVARIABLE;
962}

References P_DATA_LOCALVARIABLE.

Referenced by Evaluator::Evaluate(), and Evaluator::Evaluate1().

◆ IsNumber()

◆ IsStackSignal()

bool Variant::IsStackSignal ( ) const

◆ IsString()

bool Variant::IsString ( ) const

Definition at line 948 of file Variant.cpp.

949{
950 return mDataType == P_DATA_STRING;
951}

References P_DATA_STRING.

Referenced by Equal(), PEBLEnvironment::IsString(), PEBLEnvironment::IsText(), Less(), operator+(), and PEBLMath::ToNumber().

◆ IsVariable()

bool Variant::IsVariable ( ) const

Definition at line 954 of file Variant.cpp.

955{
956 return( mDataType == P_DATA_LOCALVARIABLE || mDataType == P_DATA_GLOBALVARIABLE);
957}

References P_DATA_GLOBALVARIABLE, and P_DATA_LOCALVARIABLE.

Referenced by free_mData().

◆ Less()

bool Variant::Less ( const Variant rhs) const

Primitive Comparing Method.

Definition at line 543 of file Variant.cpp.

544{
545
546 if (this->IsNumber() && rhs.IsNumber())
547 {
548 return ((this->GetFloat()) < (rhs.GetFloat()));
549 }
550 else if (this->IsString() && rhs.IsString())
551 { //If both are strings, compare them
552
553 //Get copies of the strings.
554 std::string str1 = this->GetString();
555 std::string str2 = rhs.GetString();
556
557 return str1 < str2;
558 }
559 else if (this->IsFunction() && rhs.IsFunction())
560 {
561 //Get copies of the strings.
562
563 std::string str1 = this->GetFunctionName();
564 std::string str2 = rhs.GetFunctionName();
565
566 return (str1 < str2);
567 }
568 //This should be handled more elegantly.
569 return false;
570}
bool IsFunction() const
Definition Variant.cpp:970

References GetFloat(), GetFunctionName(), GetString(), IsFunction(), IsNumber(), and IsString().

Referenced by operator<().

◆ operator bool()

Variant::operator bool ( )

Definition at line 866 of file Variant.cpp.

867{
868 if((*this) == Variant((pInt)0) ||
869 (*this) == Variant((pDouble)0.0) ||
870 (*this) == Variant("") ||
871 (*this) == Variant("F") ||
872 (*this) == Variant("FALSE")
873 )
874
875 return false;
876 else
877 return true;
878}

References pDouble, and pInt.

◆ operator const std::string()

Variant::operator const std::string ( ) const

Definition at line 855 of file Variant.cpp.

856{
857 return GetString();
858}

◆ operator int()

Variant::operator int ( )

Definition at line 830 of file Variant.cpp.

831{
832 return static_cast<int>(GetInteger());
833}

◆ operator long unsigned int()

Variant::operator long unsigned int ( )

Definition at line 837 of file Variant.cpp.

838{
839 return static_cast<long unsigned int>(GetInteger());
840}

◆ operator pDouble()

Variant::operator pDouble ( )

Typecast Operators.

Definition at line 844 of file Variant.cpp.

845{
846 return GetFloat();
847}

◆ operator pInt()

Variant::operator pInt ( )

Definition at line 824 of file Variant.cpp.

825{
826 return GetInteger();
827}

◆ operator!=()

bool Variant::operator!= ( const Variant rhs) const

Definition at line 581 of file Variant.cpp.

582{ return ! ((*this) == rhs); }

◆ operator*()

Variant Variant::operator* ( const Variant rhs) const

This overloads the * operator for Variants.

Definition at line 444 of file Variant.cpp.

445{
446 pInt i;
447 pDouble f;
448
449 if(this->IsInteger() && rhs.IsInteger())
450 {
451 i = this->GetInteger() * rhs.GetInteger();
452 return Variant(i);
453 }
454 else if (this->IsNumber() && rhs.IsNumber())
455 {
456
457 f = this->GetFloat() * rhs.GetFloat();
458 return Variant(f);
459 }
460 else
461 i=0;
462 return Variant(i);
463
464}

References GetFloat(), GetInteger(), IsInteger(), IsNumber(), pDouble, pInt, and Variant().

◆ operator+()

Variant Variant::operator+ ( const Variant rhs) const

This overloads the + operator for Variants. for strings, this concatenates them.

Definition at line 386 of file Variant.cpp.

387{
388 pInt i;
389 pDouble f;
390
391 if(this->IsInteger() && rhs.IsInteger())
392 {
393 i = this->GetInteger() + rhs.GetInteger();
394 return Variant(i);
395 }
396 else if (this->IsNumber() && rhs.IsNumber())
397 {
398 f = this->GetFloat() + rhs.GetFloat();
399 return Variant(f);
400 }
401 else if (this->IsString() || rhs.IsString())
402 {
403 std::string tmp1, tmp2;
404 tmp1 = GetString();
405 tmp2 = rhs.GetString();
406 tmp1 += tmp2;
407 return Variant(tmp1);
408 }
409 else
410 //There should be an error emmitted here
411 i=0;
412 return Variant(i);
413
414}

References GetFloat(), GetInteger(), GetString(), IsInteger(), IsNumber(), IsString(), pDouble, pInt, and Variant().

◆ operator-()

Variant Variant::operator- ( const Variant rhs) const

This overloads the - operator for Variants.

Definition at line 418 of file Variant.cpp.

419{
420 pInt i;
421 pDouble f;
422
423 if(this->IsInteger() && rhs.IsInteger())
424 {
425 i = this->GetInteger() - rhs.GetInteger();
426 return Variant(i);
427 }
428 else if (this->IsNumber() && rhs.IsNumber())
429 {
430
431 f = this->GetFloat() - rhs.GetFloat();
432 return Variant(f);
433 }
434 else
435 i=0;
436 return Variant(i);
437
438}

References GetFloat(), GetInteger(), IsInteger(), IsNumber(), pDouble, pInt, and Variant().

◆ operator/()

Variant Variant::operator/ ( const Variant rhs) const

This overloads the / operator for Variants.

Definition at line 469 of file Variant.cpp.

470{
471 pInt i;
472 pDouble f;
473
474 if(this->IsNumber() && rhs.IsNumber())
475 {
476
477 f = this->GetFloat() / rhs.GetFloat();
478 return Variant(f);
479 }
480 else
481 i=0;
482 return Variant(i);
483
484}

References GetFloat(), IsNumber(), pDouble, pInt, and Variant().

◆ operator<()

bool Variant::operator< ( const Variant rhs) const

Definition at line 586 of file Variant.cpp.

587{ return Less(rhs); }
bool Less(const Variant &rhs) const
Primitive Comparing Method.
Definition Variant.cpp:543

References Less().

◆ operator<=()

bool Variant::operator<= ( const Variant rhs) const

Definition at line 596 of file Variant.cpp.

597{ return ! ((*this) > rhs); }

◆ operator=() [1/9]

Variant Variant::operator= ( const char *  value)

Definition at line 744 of file Variant.cpp.

745{
746 //First, clean up 'this' if it contains data on free store
747 // (e.g., a Variable or a string)
748 free_mData();
749
750 mDataType = P_DATA_STRING;
751 mData.String = strdup(value);
752 return *this;
753}

References free_mData(), and P_DATA_STRING.

◆ operator=() [2/9]

Variant Variant::operator= ( const double &  value)

Definition at line 718 of file Variant.cpp.

719{
720 //First, clean up 'this' if it contains data on free store
721 // (e.g., a Variable or a string)
722 free_mData();
723
724 mDataType = P_DATA_NUMBER_FLOAT;
725 mData.fNumber = (pDouble)value;
726 return *this;
727}

References free_mData(), P_DATA_NUMBER_FLOAT, and pDouble.

◆ operator=() [3/9]

Variant Variant::operator= ( const float &  value)

Definition at line 730 of file Variant.cpp.

731{
732 //First, clean up 'this' if it contains data on free store
733 // (e.g., a Variable or a string)
734 free_mData();
735
736 mDataType = P_DATA_NUMBER_FLOAT;
737 mData.fNumber = (pDouble)value;
738 return *this;
739}

References free_mData(), P_DATA_NUMBER_FLOAT, and pDouble.

◆ operator=() [4/9]

Variant Variant::operator= ( const int &  value)

Definition at line 707 of file Variant.cpp.

708{
709 //First, clean up 'this' if it contains data on free store
710 // (e.g., a Variable or a string)
711 free_mData();
712
713 mDataType = P_DATA_NUMBER_INTEGER;
714 mData.iNumber = (pInt)value;
715 return *this;
716}

References free_mData(), P_DATA_NUMBER_INTEGER, and pInt.

◆ operator=() [5/9]

Variant Variant::operator= ( const long unsigned int &  value)

Definition at line 694 of file Variant.cpp.

695{
696 //First, clean up 'this' if it contains data on free store
697 // (e.g., a Variable or a string)
698 free_mData();
699
700
701 mDataType = P_DATA_NUMBER_INTEGER;
702 mData.iNumber = value;
703 return *this;
704}

References free_mData(), and P_DATA_NUMBER_INTEGER.

◆ operator=() [6/9]

Variant Variant::operator= ( const pDouble value)

Definition at line 669 of file Variant.cpp.

670{
671 //First, clean up 'this' if it contains data on free store
672 // (e.g., a Variable or a string)
673 free_mData();
674
675 mDataType = P_DATA_NUMBER_FLOAT;
676 mData.fNumber = value;
677 return *this;
678}

References free_mData(), and P_DATA_NUMBER_FLOAT.

◆ operator=() [7/9]

Variant Variant::operator= ( const pInt value)

Definition at line 681 of file Variant.cpp.

682{
683 //First, clean up 'this' if it contains data on free store
684 // (e.g., a Variable or a string)
685 free_mData();
686
687
688 mDataType = P_DATA_NUMBER_INTEGER;
689 mData.iNumber = value;
690 return *this;
691}

References free_mData(), and P_DATA_NUMBER_INTEGER.

◆ operator=() [8/9]

Variant Variant::operator= ( const std::string  value)

Definition at line 757 of file Variant.cpp.

758{
759 //First, clean up 'this' if it contains data on free store
760 // (e.g., a Variable or a string)
761 free_mData();
762
763 mDataType = P_DATA_STRING;
764 mData.String = strdup(value.c_str());
765 return *this;
766}

References free_mData(), and P_DATA_STRING.

◆ operator=() [9/9]

Variant Variant::operator= ( const Variant value)

Assignment Operator (overloaded)

Definition at line 610 of file Variant.cpp.

611{
612 // Debug: std::cout << "[VARIANT] Assignment operator called. Old type: " << mDataType
613 // << " (" << GetDataTypeName() << "), New type: " << value.GetDataType()
614 // << " (" << value.GetDataTypeName() << ")" << std::endl;
615
616 //First, clean up 'this' if it contains data on free store
617 // (e.g., a Variable or a string)
618 free_mData();
619
620 mDataType=value.GetDataType();
621 switch(mDataType)
622 {
623 case P_DATA_NUMBER_INTEGER: // an integer
624 mData.iNumber = value.GetInteger();
625 break;
626
627 case P_DATA_NUMBER_FLOAT: // a float
628 mData.fNumber = value.GetFloat();
629 break;
630
631 case P_DATA_STRING:
632 mData.String = strdup(value.GetString().c_str());
633 break;
634
635 case P_DATA_LOCALVARIABLE: // a char* variable name
636 case P_DATA_GLOBALVARIABLE: // a char* variable name
637 mData.Variable = strdup(value.GetVariableName().c_str());
638 break;
639
640 case P_DATA_FUNCTION:
641 mData.Function = strdup(value.GetFunctionName().c_str());
642 break;
643
645 mData.pFunction = value.GetFunctionPointer();
646 break;
647
649 mData.Signal = value.GetSignal();
650 break;
651
653 {
654 PComplexData * tmp = value.GetComplexData();
655 //tmp is a pointer to complex data, which
656 //is just a holder for the object. We want to make a
657 //copy of tmp
658 mComplexData = new PComplexData(*tmp);
659 break;
660 }
661 case P_DATA_UNDEFINED: // undefined, error
662 default:
663 PError::SignalFatalError( "Undefined Variant type in Variant::operator = (Variant).");
664 break;
665 }
666 return (*this);
667}

References free_mData(), GetComplexData(), GetDataType(), GetFloat(), GetFunctionName(), GetFunctionPointer(), GetInteger(), GetSignal(), GetString(), GetVariableName(), P_DATA_COMPLEXDATA, P_DATA_FUNCTION, P_DATA_FUNCTION_POINTER, P_DATA_GLOBALVARIABLE, P_DATA_LOCALVARIABLE, P_DATA_NUMBER_FLOAT, P_DATA_NUMBER_INTEGER, P_DATA_STACK_SIGNAL, P_DATA_STRING, P_DATA_UNDEFINED, and PError::SignalFatalError().

◆ operator==()

bool Variant::operator== ( const Variant rhs) const

Definition at line 576 of file Variant.cpp.

577{ return Equal(rhs); }
bool Equal(const Variant &rhs) const
Definition Variant.cpp:491

References Equal().

◆ operator>()

bool Variant::operator> ( const Variant rhs) const

Definition at line 591 of file Variant.cpp.

592{ return rhs < (*this); }

◆ operator>=()

bool Variant::operator>= ( const Variant rhs) const

Definition at line 601 of file Variant.cpp.

602{ return rhs <= (*this); }

◆ SetComplexData()

void Variant::SetComplexData ( PComplexData data)

This sets the complex data type to the argument. It does not delete the complex data currently held in the pointer.

Definition at line 1309 of file Variant.cpp.

1310{
1311 mComplexData = data;
1312}

◆ SetCreationTime()

void Variant::SetCreationTime ( long unsigned int  time)
inline

Definition at line 184 of file Variant.h.

184{mCreationTime = time;};

Referenced by PEvent::operator Variant(), and PEBLEnvironment::WaitForAnyKeyPress().

Friends And Related Symbol Documentation

◆ operator<<

std::ostream & operator<< ( std::ostream &  out,
const Variant v 
)
friend

The documentation for this class was generated from the following files: