parent
d4e3e1868b
commit
7603ae21b6
|
@ -0,0 +1,43 @@
|
|||
#include <iostream>
|
||||
#include "var.h"
|
||||
using namespace nasal;
|
||||
|
||||
int main()
|
||||
{
|
||||
PrintString("This is a testing programme. \n");
|
||||
NasalHash m;
|
||||
int a=1;
|
||||
std::string k="hello world!";
|
||||
PrintString(k);
|
||||
m.Append("first",&a,"int");
|
||||
m.Append("second",&a,"int");
|
||||
m.Append("third",&k,"string");
|
||||
m.PrintHash();
|
||||
std::cout<<std::endl;
|
||||
PrintVar(m);
|
||||
std::cout<<std::endl;
|
||||
|
||||
NasalList n;
|
||||
n=m.Keys();
|
||||
n.PrintList();
|
||||
std::cout<<std::endl;
|
||||
PrintVar(n);
|
||||
std::cout<<std::endl;
|
||||
|
||||
m.Delete("fifth");
|
||||
m.Delete("second");
|
||||
m.PrintHash();
|
||||
|
||||
n=m.Keys();
|
||||
std::cout<<std::endl;
|
||||
n.PrintList();
|
||||
std::cout<<std::endl;
|
||||
|
||||
//n.Append(&n,"array","n");//cause infinite loop
|
||||
n.Append(&n,"array");
|
||||
n.Append(&n,"array");
|
||||
n.PrintList();
|
||||
std::cout<<std::endl;
|
||||
|
||||
return 0;
|
||||
}
|
134
nasal_hash.h
134
nasal_hash.h
|
@ -1,8 +1,10 @@
|
|||
#ifndef __NASAL_HASH_H__
|
||||
#define __NASAL_HASH_H__
|
||||
|
||||
#include<iostream>
|
||||
#include<cstring>
|
||||
#include <iostream>
|
||||
#include <cstring>
|
||||
#include "nasal_list.h"
|
||||
|
||||
namespace nasal
|
||||
{
|
||||
|
||||
|
@ -31,6 +33,25 @@ class NasalHash
|
|||
while(temp->next)
|
||||
{
|
||||
head=temp->next;
|
||||
if(temp->data)
|
||||
{
|
||||
if(temp->Type=="int")
|
||||
delete (int *)temp->data;
|
||||
if(temp->Type=="float")
|
||||
delete (float *)temp->data;
|
||||
if(temp->Type=="double")
|
||||
delete (double *)temp->data;
|
||||
if(temp->Type=="char")
|
||||
delete (char *)temp->data;
|
||||
if(temp->Type=="long long int")
|
||||
delete (long long int *)temp->data;
|
||||
if(temp->Type=="string")
|
||||
delete (std::string *)temp->data;
|
||||
if(temp->Type=="array")
|
||||
delete (NasalList *)temp->data;
|
||||
if(temp->Type=="hash")
|
||||
delete (NasalHash *)temp->data;
|
||||
}
|
||||
delete temp;
|
||||
temp=head;
|
||||
}
|
||||
|
@ -56,6 +77,18 @@ class NasalHash
|
|||
std::cout<<"\""<<*((char *)temp->data)<<"\", ";
|
||||
if(temp->Type=="long long int")
|
||||
std::cout<<*((long long int *)temp->data)<<", ";
|
||||
if(temp->Type=="string")
|
||||
std::cout<<"\""<<*((std::string *)temp->data)<<"\", ";
|
||||
if(temp->Type=="array")
|
||||
{
|
||||
((NasalList *)temp->data)->PrintList();
|
||||
std::cout<<", ";
|
||||
}
|
||||
if(temp->Type=="hash")
|
||||
{
|
||||
((NasalHash *)temp->data)->PrintHash();
|
||||
std::cout<<", ";
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -69,6 +102,12 @@ class NasalHash
|
|||
std::cout<<"\""<<*((char *)temp->data)<<"\"";
|
||||
if(temp->Type=="long long int")
|
||||
std::cout<<*((long long int *)temp->data);
|
||||
if(temp->Type=="string")
|
||||
std::cout<<"\""<<*((std::string *)temp->data)<<"\"";
|
||||
if(temp->Type=="array")
|
||||
((NasalList *)temp->data)->PrintList();
|
||||
if(temp->Type=="hash")
|
||||
((NasalHash *)temp->data)->PrintHash();
|
||||
}
|
||||
}
|
||||
std::cout<<"}";
|
||||
|
@ -82,11 +121,100 @@ class NasalHash
|
|||
}
|
||||
HashUnit *NewHashMember=new HashUnit;
|
||||
temp->next=NewHashMember;
|
||||
NewHashMember->data=AppendData;
|
||||
NewHashMember->VarName=VariaName;
|
||||
NewHashMember->Type=TypeName;
|
||||
if(TypeName=="int")
|
||||
{
|
||||
NewHashMember->data=new int;
|
||||
*((int *)NewHashMember->data)=*((int *)AppendData);
|
||||
}
|
||||
if(TypeName=="float")
|
||||
{
|
||||
NewHashMember->data=new float;
|
||||
*((float *)NewHashMember->data)=*((float *)AppendData);
|
||||
}
|
||||
if(TypeName=="double")
|
||||
{
|
||||
NewHashMember->data=new double;
|
||||
*((double *)NewHashMember->data)=*((double *)AppendData);
|
||||
}
|
||||
if(TypeName=="char")
|
||||
{
|
||||
NewHashMember->data=new char;
|
||||
*((char *)NewHashMember->data)=*((char *)AppendData);
|
||||
}
|
||||
if(TypeName=="long long int")
|
||||
{
|
||||
NewHashMember->data=new long long int;
|
||||
*((long long int *)NewHashMember->data)=*((long long int *)AppendData);
|
||||
}
|
||||
if(TypeName=="string")
|
||||
{
|
||||
NewHashMember->data=new std::string;
|
||||
*((std::string *)NewHashMember->data)=*((std::string *)AppendData);
|
||||
}
|
||||
if(temp->Type=="array")
|
||||
;
|
||||
if(temp->Type=="hash")
|
||||
;
|
||||
NewHashMember->next=NULL;
|
||||
}
|
||||
int Contains(const char *VariaName)
|
||||
{
|
||||
HashUnit *temp=head;
|
||||
while(temp->next)
|
||||
{
|
||||
temp=temp->next;
|
||||
if(temp->VarName==VariaName)
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
NasalList Keys()
|
||||
{
|
||||
NasalList FeedBackList;
|
||||
HashUnit *temp=head;
|
||||
while(temp->next)
|
||||
{
|
||||
temp=temp->next;
|
||||
FeedBackList.Append(&(temp->VarName),"string");
|
||||
}
|
||||
return FeedBackList;
|
||||
}
|
||||
void Delete(const char *VariaName)
|
||||
{
|
||||
HashUnit *temp=head;
|
||||
HashUnit *LastNode;
|
||||
while(temp->next)
|
||||
{
|
||||
LastNode=temp;
|
||||
temp=temp->next;
|
||||
if(temp->VarName==VariaName)
|
||||
{
|
||||
LastNode->next=temp->next;
|
||||
if(temp->Type=="int")
|
||||
delete (int *)temp->data;
|
||||
if(temp->Type=="float")
|
||||
delete (float *)temp->data;
|
||||
if(temp->Type=="double")
|
||||
delete (double *)temp->data;
|
||||
if(temp->Type=="char")
|
||||
delete (char *)temp->data;
|
||||
if(temp->Type=="long long int")
|
||||
delete (long long int *)temp->data;
|
||||
if(temp->Type=="string")
|
||||
delete (std::string *)temp->data;
|
||||
if(temp->Type=="array")
|
||||
delete (NasalList *)temp->data;
|
||||
if(temp->Type=="hash")
|
||||
delete (NasalHash *)temp->data;
|
||||
delete temp;
|
||||
return;
|
||||
}
|
||||
}
|
||||
std::cout<<"[Error]: Could not find this element \""<<VariaName<<"\"."<<std::endl;
|
||||
return;
|
||||
}
|
||||
};
|
||||
|
||||
}
|
||||
|
|
205
nasal_list.h
205
nasal_list.h
|
@ -1,12 +1,13 @@
|
|||
#ifndef __NASAL_LIST_H__
|
||||
#define __NASAL_LIST_H__
|
||||
|
||||
#include<iostream>
|
||||
#include<cstring>
|
||||
#include <iostream>
|
||||
#include <cstring>
|
||||
#include "nasal_hash.h"
|
||||
|
||||
namespace nasal
|
||||
{
|
||||
|
||||
|
||||
struct ListUnit
|
||||
{
|
||||
std::string Type;
|
||||
|
@ -22,6 +23,7 @@ class NasalList
|
|||
NasalList()
|
||||
{
|
||||
head=new ListUnit;
|
||||
head->data=NULL;
|
||||
head->next=NULL;
|
||||
}
|
||||
~NasalList()
|
||||
|
@ -30,9 +32,47 @@ class NasalList
|
|||
while(temp->next)
|
||||
{
|
||||
head=temp->next;
|
||||
if(temp->data)
|
||||
{
|
||||
if(temp->Type=="int")
|
||||
delete (int *)temp->data;
|
||||
if(temp->Type=="float")
|
||||
delete (float *)temp->data;
|
||||
if(temp->Type=="double")
|
||||
delete (double *)temp->data;
|
||||
if(temp->Type=="char")
|
||||
delete (char *)temp->data;
|
||||
if(temp->Type=="long long int")
|
||||
delete (long long int *)temp->data;
|
||||
if(temp->Type=="string")
|
||||
delete (std::string *)temp->data;
|
||||
if(temp->Type=="array")
|
||||
delete (NasalList *)temp->data;
|
||||
if(temp->Type=="hash");
|
||||
//delete (NasalHash *)temp->data;
|
||||
}
|
||||
delete temp;
|
||||
temp=head;
|
||||
}
|
||||
if(temp->data)
|
||||
{
|
||||
if(temp->Type=="int")
|
||||
delete (int *)temp->data;
|
||||
if(temp->Type=="float")
|
||||
delete (float *)temp->data;
|
||||
if(temp->Type=="double")
|
||||
delete (double *)temp->data;
|
||||
if(temp->Type=="char")
|
||||
delete (char *)temp->data;
|
||||
if(temp->Type=="long long int")
|
||||
delete (long long int *)temp->data;
|
||||
if(temp->Type=="string")
|
||||
delete (std::string *)temp->data;
|
||||
if(temp->Type=="array")
|
||||
delete (NasalList *)temp->data;
|
||||
if(temp->Type=="hash")
|
||||
;
|
||||
}
|
||||
delete temp;
|
||||
}
|
||||
void PrintList()
|
||||
|
@ -54,6 +94,18 @@ class NasalList
|
|||
std::cout<<"\""<<*((char *)temp->data)<<"\", ";
|
||||
if(temp->Type=="long long int")
|
||||
std::cout<<*((long long int *)temp->data)<<", ";
|
||||
if(temp->Type=="string")
|
||||
std::cout<<"\""<<*((std::string *)temp->data)<<"\", ";
|
||||
if(temp->Type=="array")
|
||||
{
|
||||
((NasalList *)temp->data)->PrintList();
|
||||
std::cout<<", ";
|
||||
}
|
||||
if(temp->Type=="hash")
|
||||
{
|
||||
;//((NasalHash *)temp->data)->PrintHash();
|
||||
std::cout<<", ";
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -67,12 +119,21 @@ class NasalList
|
|||
std::cout<<"\""<<*((char *)temp->data)<<"\"";
|
||||
if(temp->Type=="long long int")
|
||||
std::cout<<*((long long int *)temp->data);
|
||||
if(temp->Type=="string")
|
||||
std::cout<<"\""<<*((std::string *)temp->data)<<"\"";
|
||||
if(temp->Type=="array")
|
||||
((NasalList *)temp->data)->PrintList();
|
||||
if(temp->Type=="hash")
|
||||
;//((NasalHash *)temp->data)->PrintHash();
|
||||
}
|
||||
}
|
||||
std::cout<<"]";
|
||||
}
|
||||
void Append(void *AppendData,const char *TypeName)
|
||||
{
|
||||
NasalList TempList;//sometimes user may use n.append(n)
|
||||
if(TypeName=="array")
|
||||
TempList=*((NasalList *)AppendData);
|
||||
ListUnit *temp=head;
|
||||
while(temp->next)
|
||||
{
|
||||
|
@ -80,10 +141,146 @@ class NasalList
|
|||
}
|
||||
ListUnit *NewListMember=new ListUnit;
|
||||
temp->next=NewListMember;
|
||||
NewListMember->data=AppendData;
|
||||
NewListMember->Type=TypeName;
|
||||
if(TypeName=="int")
|
||||
{
|
||||
NewListMember->data=new int;
|
||||
*((int *)NewListMember->data)=*((int *)AppendData);
|
||||
}
|
||||
if(TypeName=="float")
|
||||
{
|
||||
NewListMember->data=new float;
|
||||
*((float *)NewListMember->data)=*((float *)AppendData);
|
||||
}
|
||||
if(TypeName=="double")
|
||||
{
|
||||
NewListMember->data=new double;
|
||||
*((double *)NewListMember->data)=*((double *)AppendData);
|
||||
}
|
||||
if(TypeName=="char")
|
||||
{
|
||||
NewListMember->data=new char;
|
||||
*((char *)NewListMember->data)=*((char *)AppendData);
|
||||
}
|
||||
if(TypeName=="long long int")
|
||||
{
|
||||
NewListMember->data=new long long int;
|
||||
*((long long int *)NewListMember->data)=*((long long int *)AppendData);
|
||||
}
|
||||
if(TypeName=="string")
|
||||
{
|
||||
NewListMember->data=new std::string;
|
||||
*((std::string *)NewListMember->data)=*((std::string *)AppendData);
|
||||
}
|
||||
if(TypeName=="array")
|
||||
{
|
||||
NewListMember->data=new NasalList;
|
||||
*((NasalList *)NewListMember->data)=TempList;
|
||||
}
|
||||
if(TypeName=="hash")
|
||||
;
|
||||
NewListMember->next=NULL;
|
||||
}
|
||||
NasalList& operator=(const NasalList &Source)
|
||||
{
|
||||
ListUnit *temp=head;
|
||||
ListUnit *SourceTemp=Source.head;
|
||||
while(temp->next)
|
||||
{
|
||||
head=temp->next;
|
||||
if(temp->data)
|
||||
{
|
||||
if(temp->Type=="int")
|
||||
delete (int *)temp->data;
|
||||
if(temp->Type=="float")
|
||||
delete (float *)temp->data;
|
||||
if(temp->Type=="double")
|
||||
delete (double *)temp->data;
|
||||
if(temp->Type=="char")
|
||||
delete (char *)temp->data;
|
||||
if(temp->Type=="long long int")
|
||||
delete (long long int *)temp->data;
|
||||
if(temp->Type=="string")
|
||||
delete (std::string *)temp->data;
|
||||
if(temp->Type=="array")
|
||||
delete (NasalList *)temp->data;
|
||||
if(temp->Type=="hash")
|
||||
;
|
||||
}
|
||||
delete temp;
|
||||
temp=head;
|
||||
}
|
||||
if(temp->data)
|
||||
{
|
||||
if(temp->Type=="int")
|
||||
delete (int *)temp->data;
|
||||
if(temp->Type=="float")
|
||||
delete (float *)temp->data;
|
||||
if(temp->Type=="double")
|
||||
delete (double *)temp->data;
|
||||
if(temp->Type=="char")
|
||||
delete (char *)temp->data;
|
||||
if(temp->Type=="long long int")
|
||||
delete (long long int *)temp->data;
|
||||
if(temp->Type=="string")
|
||||
delete (std::string *)temp->data;
|
||||
if(temp->Type=="array")
|
||||
delete (NasalList *)temp->data;
|
||||
if(temp->Type=="hash")
|
||||
;
|
||||
}
|
||||
delete temp;
|
||||
head=new ListUnit;
|
||||
head->next=NULL;
|
||||
|
||||
temp=head;
|
||||
while(SourceTemp->next)
|
||||
{
|
||||
SourceTemp=SourceTemp->next;
|
||||
temp->next=new ListUnit;
|
||||
temp=temp->next;
|
||||
temp->Type=SourceTemp->Type;
|
||||
if(temp->Type=="int")
|
||||
{
|
||||
temp->data=new int;
|
||||
*((int *)temp->data)=*((int *)SourceTemp->data);
|
||||
}
|
||||
if(temp->Type=="float")
|
||||
{
|
||||
temp->data=new float;
|
||||
*((float *)temp->data)=*((float *)SourceTemp->data);
|
||||
}
|
||||
if(temp->Type=="double")
|
||||
{
|
||||
temp->data=new double;
|
||||
*((double *)temp->data)=*((double *)SourceTemp->data);
|
||||
}
|
||||
if(temp->Type=="char")
|
||||
{
|
||||
temp->data=new char;
|
||||
*((char *)temp->data)=*((char *)SourceTemp->data);
|
||||
}
|
||||
if(temp->Type=="long long int")
|
||||
{
|
||||
temp->data=new long long int;
|
||||
*((long long int *)temp->data)=*((long long int *)SourceTemp->data);
|
||||
}
|
||||
if(temp->Type=="string")
|
||||
{
|
||||
temp->data=new std::string;
|
||||
*((std::string *)temp->data)=*((std::string *)SourceTemp->data);
|
||||
}
|
||||
if(temp->Type=="array")
|
||||
{
|
||||
temp->data=new NasalList;
|
||||
*((NasalList *)temp->data)=*((NasalList *)SourceTemp->data);
|
||||
}
|
||||
if(temp->Type=="hash")
|
||||
;
|
||||
temp->next=NULL;
|
||||
}
|
||||
return *this;
|
||||
}
|
||||
};
|
||||
|
||||
}
|
||||
|
|
|
@ -5,6 +5,7 @@
|
|||
#include<cstring>
|
||||
#include "nasal_hash.h"
|
||||
#include "nasal_list.h"
|
||||
|
||||
namespace nasal
|
||||
{
|
||||
|
||||
|
@ -28,6 +29,14 @@ void PrintVar(long long int Var)
|
|||
{
|
||||
std::cout<<Var;
|
||||
}
|
||||
void PrintVar(NasalHash &Var)
|
||||
{
|
||||
Var.PrintHash();
|
||||
}
|
||||
void PrintVar(NasalList &Var)
|
||||
{
|
||||
Var.PrintList();
|
||||
}
|
||||
|
||||
|
||||
void PrintString(std::string &PrintInfo)
|
||||
|
@ -64,7 +73,7 @@ void PrintString(std::string &PrintInfo)
|
|||
break;
|
||||
default:
|
||||
//error occurred
|
||||
std::cout<<std::endl<<"[Error]: Incorrect escape character \'"<<PrintInfo[i]<<PrintInfo[i+1]<<"\' .";
|
||||
std::cout<<"[Error]: Incorrect escape character \'"<<PrintInfo[i]<<PrintInfo[i+1]<<"\' .";
|
||||
++i;
|
||||
break;
|
||||
}
|
||||
|
@ -72,7 +81,7 @@ void PrintString(std::string &PrintInfo)
|
|||
else if(PrintInfo[i]=='\\' && i+1>=(int)PrintInfo.length())
|
||||
{
|
||||
//error occurred
|
||||
std::cout<<std::endl<<"[Error]: Missing character after \'\\\'";
|
||||
std::cout<<"[Error]: Missing character after \'\\\'";
|
||||
}
|
||||
else
|
||||
std::cout<<PrintInfo[i];
|
||||
|
@ -114,7 +123,7 @@ void PrintString(const char *PrintInfo)
|
|||
break;
|
||||
default:
|
||||
//error occurred
|
||||
std::cout<<std::endl<<"[Error]: Incorrect escape character \'"<<PrintInfo[i]<<PrintInfo[i+1]<<"\' .";
|
||||
std::cout<<"[Error]: Incorrect escape character \'"<<PrintInfo[i]<<PrintInfo[i+1]<<"\' ."<<std::endl;
|
||||
++i;
|
||||
break;
|
||||
}
|
||||
|
@ -122,7 +131,7 @@ void PrintString(const char *PrintInfo)
|
|||
else if(PrintInfo[i]=='\\' && i+1>=strlen(PrintInfo))
|
||||
{
|
||||
//error occurred
|
||||
std::cout<<std::endl<<"[Error]: Missing character after \'\\\'";
|
||||
std::cout<<"[Error]: Missing character after \'\\\'"<<std::endl;
|
||||
}
|
||||
else
|
||||
std::cout<<PrintInfo[i];
|
||||
|
|
Loading…
Reference in New Issue