114 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			C++
		
	
	
	
			
		
		
	
	
			114 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			C++
		
	
	
	
| #ifndef __NASAL_HASH_CPP__
 | |
| #define __NASAL_HASH_CPP__
 | |
| 
 | |
| 
 | |
| #include "nasal_hash.h"
 | |
| 
 | |
| nasal_hash::nasal_hash()
 | |
| {
 | |
| 	head=new nasal_hash_unit;
 | |
| 	head->name="";
 | |
| 	head->hash_var.type=VAR_NONE;
 | |
| 	head->hash_var.data=NULL;
 | |
| 	head->next=NULL;
 | |
| }
 | |
| nasal_hash::~nasal_hash()
 | |
| {
 | |
| 	nasal_hash_unit *temp=head;
 | |
| 	nasal_hash_unit *this_node=NULL;
 | |
| 	while(temp->next)
 | |
| 	{
 | |
| 		this_node=temp;
 | |
| 		temp=temp->next;
 | |
| 		delete this_node;
 | |
| 	}
 | |
| 	delete temp;
 | |
| }
 | |
| nasal_hash& nasal_hash::operator=(const nasal_hash &p)
 | |
| {
 | |
| 	nasal_hash_unit *temp=head;
 | |
| 	nasal_hash_unit *this_node=NULL;
 | |
| 	if(head->next)
 | |
| 	{
 | |
| 		temp=temp->next;
 | |
| 		head->next=NULL;
 | |
| 		while(temp->next)
 | |
| 		{
 | |
| 			this_node=temp;
 | |
| 			temp=temp->next;
 | |
| 			delete this_node;
 | |
| 		}
 | |
| 		delete temp;
 | |
| 	}
 | |
| 	temp=head;
 | |
| 	nasal_hash_unit *temp_p=p.head;
 | |
| 	
 | |
| 	while(temp_p->next)
 | |
| 	{
 | |
| 		temp_p=temp_p->next;
 | |
| 		temp->next=new nasal_hash_unit;
 | |
| 		temp=temp->next;
 | |
| 		temp->next=NULL;
 | |
| 		temp->hash_var=temp_p->hash_var;
 | |
| 		temp->name=temp_p->name;
 | |
| 	}
 | |
| 	return *this;
 | |
| }
 | |
| void nasal_hash::append(std::string& var_name,var& p)
 | |
| {
 | |
| 	nasal_hash_unit *temp=head;
 | |
| 	while(temp->next)
 | |
| 		temp=temp->next;
 | |
| 	temp->next=new nasal_hash_unit;
 | |
| 	temp=temp->next;
 | |
| 	temp->next=NULL;
 | |
| 	temp->hash_var=p;
 | |
| 	temp->name=var_name;
 | |
| 	return;
 | |
| }
 | |
| int nasal_hash::contains(std::string& var_name)
 | |
| {
 | |
| 	nasal_hash_unit *temp=head;
 | |
| 	while(temp->next)
 | |
| 	{
 | |
| 		temp=temp->next;
 | |
| 		if(temp->name==var_name)
 | |
| 			return 1;
 | |
| 	}
 | |
| 	return 0;
 | |
| }
 | |
| int nasal_hash::delete_element(std::string& var_name)
 | |
| {
 | |
| 	nasal_hash_unit *temp=head;
 | |
| 	nasal_hash_unit *last_node=NULL;
 | |
| 	while(temp->next)
 | |
| 	{
 | |
| 		last_node=temp;
 | |
| 		temp=temp->next;
 | |
| 		if(temp->name==var_name)
 | |
| 		{
 | |
| 			last_node->next=temp->next;
 | |
| 			delete temp;
 | |
| 			return 1;
 | |
| 		}
 | |
| 	}
 | |
| 	return 0;
 | |
| }
 | |
| nasal_list nasal_hash::keys()
 | |
| {
 | |
| 	var assist_var;
 | |
| 	assist_var.type=VAR_STRING;
 | |
| 	nasal_list temp_list;
 | |
| 	nasal_hash_unit *temp=head;
 | |
| 	while(temp->next)
 | |
| 	{
 | |
| 		temp=temp->next;
 | |
| 		assist_var.data=new std::string;
 | |
| 		*((std::string *)assist_var.data)=temp->name;
 | |
| 		temp_list.append(assist_var);
 | |
| 	}
 | |
| 	return temp_list;
 | |
| }
 | |
| 
 | |
| #endif
 |