Nasal-Interpreter/version1.0/nasal_var_inrun_list.h

111 lines
1.9 KiB
C++

#ifndef __NASAL_VAR_INRUN_LIST_H__
#define __NASAL_VAR_INRUN_LIST_H__
struct var_list_unit
{
std::string var_name;
int num_place;
};
class nasal_var_map
{
private:
std::list<var_list_unit> var_list;
int var_number;
public:
nasal_var_map()
{
var_list.clear();
var_number=0;
}
void add_var(std::string& __str)
{
var_list_unit t;
t.var_name=__str;
for(std::list<var_list_unit>::iterator i=var_list.begin();i!=var_list.end();++i)
{
if(i->var_name==__str)
return;
}
++var_number;
t.num_place=var_number;
var_list.push_back(t);
return;
}
int return_last_var_num_place()
{
std::list<var_list_unit>::iterator i=var_list.end();
--i;
return i->num_place;
}
void print_all_var()
{
for(std::list<var_list_unit>::iterator i=var_list.begin();i!=var_list.end();++i)
std::cout<<i->var_name<<": "<<i->num_place<<std::endl;
return;
}
};
struct block_list_unit
{
var variable;
int num_place;
};
class block_list
{
private:
std::list<block_list_unit> var_list;
bool global;
public:
block_list(const bool is_global)
{
var_list.clear();
global=is_global;
}
block_list(const block_list& temp)
{
var_list=temp.var_list;
global=temp.global;
}
~block_list()
{
var_list.clear();
}
void block_add_var(var& varia,int number)
{
block_list_unit t;
t.variable=varia;
t.num_place=number;
var_list.push_back(t);
return;
}
};
class general_in_run_list
{
private:
std::list<block_list> var_block_list;
public:
general_in_run_list()
{
var_block_list.clear();
}
~general_in_run_list()
{
var_block_list.clear();
}
void add_block(block_list temp)
{
var_block_list.push_back(temp);
return;
}
void delete_last_block()
{
var_block_list.pop_back();
return;
}
};
#endif