Nasal-Interpreter/version1.0/nasal_var.cpp

90 lines
2.3 KiB
C++

#ifndef __NASAL_VAR_CPP__
#define __NASAL_VAR_CPP__
var::var()
{
ptr=NULL;
type=var_null;
}
var::var(const var& temp)
{
switch(temp.type)
{
case var_null:ptr=NULL;break;
case var_number:ptr=new double;*((double*)ptr)=*((double*)temp.ptr);break;
case var_string:ptr=new std::string;*((std::string*)ptr)=*((std::string*)temp.ptr);break;
case var_list:ptr=new nasal_list;*((nasal_list*)ptr)=*((nasal_list*)temp.ptr);break;
case var_hash:ptr=new nasal_hash;*((nasal_hash*)ptr)=*((nasal_hash*)temp.ptr);break;
case var_function:ptr=new nasal_function;*((nasal_function*)ptr)=*((nasal_function*)temp.ptr);break;
}
type=temp.type;
}
var::~var()
{
switch(type)
{
case var_null:break;
case var_number:delete (double*)ptr;break;
case var_string:delete (std::string*)ptr;break;
case var_list:delete (nasal_list*)ptr;break;
case var_hash:delete (nasal_hash*)ptr;break;
case var_function:delete (nasal_function*)ptr;break;
}
}
var& var::operator=(const var& temp)
{
if(ptr)
{
switch(type)
{
case var_null:break;
case var_number:delete (double*)ptr;break;
case var_string:delete (std::string*)ptr;break;
case var_list:delete (nasal_list*)ptr;break;
case var_hash:delete (nasal_hash*)ptr;break;
case var_function:delete (nasal_function*)ptr;break;
}
}
switch(temp.type)
{
case var_null:ptr=NULL;break;
case var_number:ptr=new double;*((double*)ptr)=*((double*)temp.ptr);break;
case var_string:ptr=new std::string;*((std::string*)ptr)=*((std::string*)temp.ptr);break;
case var_list:ptr=new nasal_list;*((nasal_list*)ptr)=*((nasal_list*)temp.ptr);break;
case var_hash:ptr=new nasal_hash;*((nasal_hash*)ptr)=*((nasal_hash*)temp.ptr);break;
case var_function:ptr=new nasal_function;*((nasal_function*)ptr)=*((nasal_function*)temp.ptr);break;
}
type=temp.type;
return *this;
}
nasal_list::nasal_list()
{
elem.clear();
}
nasal_list::nasal_list(const nasal_list& temp)
{
elem=temp.elem;
}
nasal_hash::nasal_hash()
{
elem.clear();
elem_name.clear();
}
nasal_hash::nasal_hash(const nasal_hash& temp)
{
elem=temp.elem;
elem_name=temp.elem_name;
}
nasal_function::nasal_function()
{
root.clear();
}
nasal_function::nasal_function(const nasal_function& temp)
{
root=temp.root;
}
#endif