diff --git a/librerie/exercise2/main b/librerie/exercise2/main index 8fee996..7ad6b62 100755 Binary files a/librerie/exercise2/main and b/librerie/exercise2/main differ diff --git a/librerie/exercise2/main.cpp b/librerie/exercise2/main.cpp index f16a768..a25e136 100755 --- a/librerie/exercise2/main.cpp +++ b/librerie/exercise2/main.cpp @@ -19,7 +19,7 @@ int main() { std::cout << "Lasd Libraries 2020" << std::endl; - lasdtest(); // To call in the menu of your library test! - //menu(); + lasdtest(); + menu(); return 0; } diff --git a/librerie/exercise2/queue/lst/queuelst.cpp b/librerie/exercise2/queue/lst/queuelst.cpp index 41a13df..9153b80 100755 --- a/librerie/exercise2/queue/lst/queuelst.cpp +++ b/librerie/exercise2/queue/lst/queuelst.cpp @@ -1,27 +1,17 @@ namespace lasd { -/* ************************************************************************** */ template -QueueLst::QueueLst(const LinearContainer& linear){ - for(ulong i=0; i::QueueLst(const LinearContainer& linear) + : List(linear) {} template -QueueLst::QueueLst(const QueueLst& copyFrom){ - for(ulong i=0; i::QueueLst(const QueueLst& copyFrom) + : List(copyFrom) {} template -QueueLst::QueueLst(QueueLst&& moveFrom) noexcept{ - std::swap(head,moveFrom.head); - std::swap(tail,moveFrom.tail); - std::swap(size,moveFrom.size); -} +QueueLst::QueueLst(QueueLst&& moveFrom) noexcept + : List(std::move(moveFrom)) {} template QueueLst::~QueueLst(){ @@ -30,11 +20,6 @@ QueueLst::~QueueLst(){ template QueueLst& QueueLst::operator=(const QueueLst& toCopy){ - // QueueLst* tmp = new QueueLst(toCopy); - // std::swap(*this, *tmp); - // delete tmp; - // return *this; - List::operator=(toCopy); return *this; } @@ -62,7 +47,7 @@ template template void QueueLst::Enqueue(Data&& data){ - List::InsertAtBack(data); + List::InsertAtBack(std::move(data)); } template @@ -84,6 +69,5 @@ template void QueueLst::Clear(){ List::Clear(); } -/* ************************************************************************** */ } diff --git a/librerie/exercise2/queue/vec/queuevec.cpp b/librerie/exercise2/queue/vec/queuevec.cpp index 1087e79..1b96485 100755 --- a/librerie/exercise2/queue/vec/queuevec.cpp +++ b/librerie/exercise2/queue/vec/queuevec.cpp @@ -1,7 +1,6 @@ namespace lasd { -/* ************************************************************************** */ template QueueVec::QueueVec(){ size = 4; @@ -12,7 +11,7 @@ QueueVec::QueueVec(){ template QueueVec::QueueVec(const LinearContainer& linear){ - size = linear.Size()+1; + size = linear.Size()+1; // 1 free cell Elements = new Data[size]; //forse da espandere for(ulong i=0 ; i::QueueVec(const QueueVec& toCopy){ template QueueVec::QueueVec(QueueVec&& toMove) noexcept{ - /* - we initialize size=4 so the swapped vector won't be in an - inconsistent state (size=0 can never be accettable) - */ + /* we initialize size=4 so the swapped vector won't be in an + inconsistent state (size=0 can never be acceptable) */ size = 4; std::swap(Elements, toMove.Elements); std::swap(rear, toMove.rear); @@ -51,7 +48,7 @@ QueueVec::QueueVec(QueueVec&& toMove) noexcept{ template QueueVec::~QueueVec(){ - //vector destructor will be called automatically i hope + //vector destructor will be automatically called I hope } template @@ -64,6 +61,8 @@ QueueVec& QueueVec::operator=(const QueueVec& toCopy){ template QueueVec& QueueVec::operator=(QueueVec&& toMove) noexcept{ + /* here we do not need size=4 since the QueueVec with at least size=4 + exists already */ std::swap(Elements, toMove.Elements); std::swap(size, toMove.size); std::swap(rear, toMove.rear); @@ -115,7 +114,7 @@ void QueueVec::Enqueue(Data&& data){ template Data& QueueVec::Head() const{ if(Size()<=0){ - throw std::length_error("Queuevec is empty!"); + throw std::length_error("Queue is empty!"); } return Elements[front]; } @@ -123,7 +122,7 @@ Data& QueueVec::Head() const{ template void QueueVec::Dequeue(){ if(Size() <= 0){ - throw std::length_error("Queuevec is empty!"); + throw std::length_error("Queue is empty!"); } front = (front + 1) % size; if(Size() < size/4){ @@ -192,6 +191,5 @@ void QueueVec::Reduce(){ rear = i; size *= 2; } -/* ************************************************************************** */ } diff --git a/librerie/exercise2/stack/lst/stacklst.cpp b/librerie/exercise2/stack/lst/stacklst.cpp index 5835396..f1f24d8 100755 --- a/librerie/exercise2/stack/lst/stacklst.cpp +++ b/librerie/exercise2/stack/lst/stacklst.cpp @@ -5,34 +5,16 @@ namespace lasd { // Constructors template -StackLst::StackLst(const LinearContainer& linear){ - for(long int i=(long int)linear.Size()-1 ; i>=0 ; --i){ // è possibile usare il costruttore di List? - Push(linear[i]); - } -} -/* -PROVARE -template -StackLst(const LinearContainer& linear) : List(linear){ -return; -} -*/ -template -StackLst::StackLst(const StackLst& stcklist){ -for(long int i=(long int)stcklist.Size()-1 ; i>=0 ; i--){ - Push(stcklist[i]); - } -} -/* -PROVARE -StackLst(const StackLst& stcklist) : List(stcklist){} -*/ +StackLst::StackLst(const LinearContainer& linear) + : List(linear){} template -StackLst::StackLst(StackLst&& stcklist) noexcept{ - std::swap(size, stcklist.size); - std::swap(head, stcklist.head); -} +StackLst::StackLst(const StackLst& stcklist) + : List(stcklist){} + +template +StackLst::StackLst(StackLst&& stcklist) noexcept + : List(std::move(stcklist)){} // Destructor template @@ -42,19 +24,13 @@ StackLst::~StackLst(){ template StackLst& StackLst::operator=(const StackLst& copyFrom){ - if(*this != copyFrom){ - Clear(); - for(long int i=(long int)copyFrom.Size()-1 ; i>=0 ; --i){ - Push(copyFrom[i]); - } - } + List::operator=(copyFrom); return *this; } template StackLst& StackLst::operator=(StackLst&& moveFrom) noexcept{ - std::swap(size, moveFrom.size); - std::swap(head, moveFrom.head); + List::operator=(std::move(moveFrom)); return *this; } diff --git a/librerie/exercise2/stack/vec/stackvec.cpp b/librerie/exercise2/stack/vec/stackvec.cpp index fa9e735..f2471af 100755 --- a/librerie/exercise2/stack/vec/stackvec.cpp +++ b/librerie/exercise2/stack/vec/stackvec.cpp @@ -10,6 +10,12 @@ StackVec::StackVec(){ Elements = new Data[size]; } +template +StackVec::StackVec(const LinearContainer& linear) + : Vector(linear){ + stackSize = linear.Size(); // the array is full +} +/* template StackVec::StackVec(const LinearContainer& linear){ // si può richiamare il costruttore della classe Vector Elements = new Data[linear.Size()]; // espandere di un po' forse @@ -19,6 +25,7 @@ StackVec::StackVec(const LinearContainer& linear){ // si può richia size = linear.Size(); stackSize = linear.Size(); } +*/ template StackVec::StackVec(const StackVec& stckvec){// si può richiamare il costruttore della classe Vector diff --git a/librerie/exercise2/zmytest/test.cpp b/librerie/exercise2/zmytest/test.cpp index 8b1375e..d590012 100755 --- a/librerie/exercise2/zmytest/test.cpp +++ b/librerie/exercise2/zmytest/test.cpp @@ -2,56 +2,131 @@ #include #include #include "../zlasdtest/test.hpp" + using namespace lasd; void menu(){ -/* - QueueVec q1; - q1.Enqueue(4); - q1.Enqueue(0); - q1.Enqueue(3); - q1.Enqueue(1); - q1.Enqueue(2); - q1.HeadNDequeue(); - q1.Enqueue(5); - - QueueVec q2; - q2 = std::move(q1); - - QueueVec q3(std::move(q1)); - std::cout< q1; - q1.Enqueue(4); - q1.Enqueue(0); - q1.Enqueue(3); - q1.Enqueue(1); - q1.Enqueue(2); + /* + Vector v(5); + v[0] = 0; + v[1] = 1; + v[2] = 2; + v[3] = 3; - // QueueLst* tmp = new QueueLst(q1); - // (*tmp).HeadNDequeue(); - // (*tmp).HeadNDequeue(); - // (*tmp).HeadNDequeue(); - // (*tmp).HeadNDequeue(); - // (*tmp).HeadNDequeue(); + StackVec sv; + sv.Push(0); + sv.Push(1); + sv.Push(2); + sv.Push(3); + StackVec sv2(sv); + if(sv2 == v) std::cout<<"OK"; + else std::cout<<"NO"; +*/ - // QueueLst q2; - // q2 = std::move(q1); - // - // q2.HeadNDequeue(); - // q2.HeadNDequeue(); - // q2.HeadNDequeue(); - // q2.HeadNDequeue(); - // q2.HeadNDequeue(); - - - QueueVec quevec; - quevec.Enqueue(0); - quevec.Enqueue(1); - QueueVec newquevec = quevec; - - if(quevec == newquevec) std::cout<<"uguali"; + QueueLst q; + int a =3; + q.Enqueue(std::move(a)); } + +/* +void menu(){ + + + unsigned short int choice; + DataStructure chosenDataStructure; + DataType chosenDataType; + Implementation chosenImplementation; + do{ + std::cout<<"1. Use your tests (to be used by the professor)"<>std::ws; + std::cin>>choice; + }while(choice!=1 && choice!=2); + switch(choice){ + case 1: + lasdtest(); + break; + case 2: + chosenDataStructure = ChooseDataStructure(); + chosenDataType = ChooseDataType(); + chosenImplementation = ChooseImplementation(); + UseChosenType(chosenDataStructure,chosenDataType, chosenImplementation); + break; + default: + std::cout<<"An error has occurred"<>std::ws; + std::cin>>choice; + }while(choice!=1 && choice!=2); + if(choice == 1) + return DataStructure::stack; + else if(choice == 2) + return DataStructure::queue; +} +DataType ChooseDataType(){ + unsigned short int choice; + do{ + std::cout<<"Choose a data type:"<>std::ws; + std::cin>>choice; + }while(!(choice>0 && choice<4)); + if(choice==1) + return DataType::integer; + else if(choice==2) + return DataType::ffloat; + else if(choice==3) + return DataType::sstring; +} +Implementation ChooseImplementation(){ + unsigned short int choice; + do{ + std::cout<<"Choose an implementation:"<>std::ws; + std::cin>>choice; + }while(!(choice>0 && choice<4)); + if(choice==1) + return Implementation::vector; + else if(choice==2) + return Implementation::list; +} + +void UseChosenType(DataStructure chosenDataStructure, DataType chosenDataType, Implementation chosenImplementation){ + if(chosenDataStructure == DataStructure::stack){ + if(chosenImplementation == Implementation::vector){ + if(chosenDataType == DataType::integer){ + lasd::StackVec myvec; + myvec = generateVectorOfIntegers(); + VectorIntegerFunctions(myvec); + }else if(chosenDataType == DataType::ffloat){ + lasd::StackVec myvec; + myvec = generateVectorOfFloat(); + VectorFloatFunctions(myvec); + }else if(chosenDataType == DataType::sstring){ + lasd::StackVec myvec; + myvec = generateVectorOfStrings(); + VectorStringFunctions(myvec); + } + } + } + +} +*/ diff --git a/librerie/exercise2/zmytest/test.hpp b/librerie/exercise2/zmytest/test.hpp index a9b4a24..cd36c25 100755 --- a/librerie/exercise2/zmytest/test.hpp +++ b/librerie/exercise2/zmytest/test.hpp @@ -11,8 +11,13 @@ #include"../stack/lst/stacklst.hpp" #include"../stack/vec/stackvec.hpp" /* ************************************************************************** */ - +enum class DataStructure{stack,queue}; +enum class DataType{integer,ffloat,sstring}; +enum class Implementation{vector,list}; void menu(); +DataType ChooseDataType(); //choose data type +DataStructure ChooseDataStructure(); +void UseChosenType(DataStructure, DataType); /* ************************************************************************** */ #include"test.cpp"