Library 5

bugfix
This commit is contained in:
Alessandro Ferro 2021-06-02 21:03:10 +02:00
parent 58699b7d2e
commit 0658e80cbd
5 changed files with 58 additions and 37 deletions

View File

@ -1,7 +1,7 @@
#! /bin/bash
g++-10 -g -o main \
g++ -g -o main \
zlasdtest/exercise1/simpletest.cpp zlasdtest/exercise1/fulltest.cpp \
zlasdtest/exercise2/simpletest.cpp zlasdtest/exercise2/fulltest.cpp \
zlasdtest/exercise3/simpletest.cpp zlasdtest/exercise3/fulltest.cpp \

View File

@ -61,18 +61,27 @@ MatrixCSR<Data>::~MatrixCSR(){
}
template <typename Data>
MatrixCSR<Data>& MatrixCSR<Data>::operator=(const MatrixCSR& toCopy){
MatrixCSR<Data>* tmp = new MatrixCSR<Data>(toCopy);
std::swap(*this, *tmp);
delete tmp;
MatrixCSR<Data>& MatrixCSR<Data>::operator=(const MatrixCSR<Data>& toCopy){
MatrixCSR<Data> tmp(toCopy);
std::swap(tmp, *this);
return *this;
}
template <typename Data>
MatrixCSR<Data>& MatrixCSR<Data>::operator=(MatrixCSR&& toMove) noexcept{
MatrixCSR<Data>* tmp = new MatrixCSR<Data>(std::move(toMove));
std::swap(*this, *tmp);
delete tmp;
MatrixCSR<Data>& MatrixCSR<Data>::operator=(MatrixCSR<Data>&& toMove) noexcept{
Clear();
std::swap(rows, toMove.rows);
std::swap(columns, toMove.columns);
std::swap(size, toMove.size);
std::swap(head, toMove.head);
std::swap(R, toMove.R);
toMove.R.Resize(1);
toMove.R[0] = &toMove.head;
Node** oldHead = R[0];
for(ulong i=0 ; i<R.Size() && R[i]==oldHead; ++i){
R[i] = &head;
}
return *this;
}
@ -151,15 +160,12 @@ void MatrixCSR<Data>::ColumnResize(const ulong& new_column_size){
prev = &( (*(*ptr)).next );
ptr = &( (*(*ptr)).next);
}else{
std::cout<<"\n\nSto cancellando "<<((*ptr)->value).first<<"\n\n";
toDelete = *ptr;
toModify = &( (*(*ptr)).next );
*ptr = (*(*ptr)).next;
delete toDelete;
--size;
//debug();
for(ulong j=i+1 ; j<R.Size() ; ++j){
if(R[j] == toModify){
R[j] = prev;
@ -275,26 +281,26 @@ template <typename Data>
void MatrixCSR<Data>::debug(){
std::cout<<std::endl;
// std::cout<<"rows: "<<rows<<" columns: "<<columns<<" size: "<<size<<"\n\n";
// Node* tmp = head;
//
// while(tmp!=nullptr){
// std::cout<<(tmp->value).first<<"|"<< (tmp->value).second;
// std::cout<<std::endl;
// std::cout<<&(tmp->next);
//
// std::cout<<std::endl;
// std::cout<<std::endl;
//
// tmp = tmp->next;
// }
//
// std::cout << "R VECTOR:" << '\n';
// for(ulong i=0; i<R.Size();++i){
// std::cout << R[i] << '\n';
// }
// std::cout<<std::endl;
// std::cout<<std::endl;
std::cout<<"rows: "<<rows<<" columns: "<<columns<<" size: "<<size<<"\n\n";
Node* tmp = head;
while(tmp!=nullptr){
std::cout<<(tmp->value).first<<"|"<< (tmp->value).second;
std::cout<<std::endl;
std::cout<<&(tmp->next);
std::cout<<std::endl;
std::cout<<std::endl;
tmp = tmp->next;
}
std::cout << "R VECTOR:" << '\n';
for(ulong i=0; i<R.Size();++i){
std::cout << R[i] << '\n';
}
std::cout<<std::endl;
std::cout<<std::endl;
//// print
// for(int i=0; i<rows; ++i){

View File

@ -61,10 +61,10 @@ public: //CAMBIARE A PROTETTO !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
/* ************************************************************************ */
// Copy assignment
MatrixCSR& operator=(const MatrixCSR&);
MatrixCSR& operator=(const MatrixCSR<Data>&);
// Move assignment
MatrixCSR& operator=(MatrixCSR&&) noexcept;
MatrixCSR& operator=(MatrixCSR<Data>&&) noexcept;
/* ************************************************************************ */

View File

@ -78,7 +78,7 @@ void stestMatrixInt(Mat<long>& mat, uint& testnum, uint& testerr) {
SetCell<long>(loctestnum, loctesterr, mat, true, 1, 4, 8);
SetCell<long>(loctestnum, loctesterr, mat, true, 3, 4, 9); //33
//mat.debug();
SetColumnNumber(loctestnum, loctesterr, mat, true, 3); //34
SetColumnNumber(loctestnum, loctesterr, mat, true, 4);

View File

@ -6,6 +6,21 @@
#include<iostream>
using namespace std;
using namespace lasd;
void ciao (MatrixCSR<long>& a, MatrixCSR<long>& b)
{
std::cout << "A" << '\n';
MatrixCSR<long> c(std::move(a));
std::cout << "B" << '\n';
a=std::move(b);
a.debug();
std::cout << "C" << '\n';
b=std::move(c);
}
void menu(){
unsigned short int choice;
@ -38,7 +53,7 @@ void menu(){
mat.ColumnResize(2);
mat.debug();
MatrixCSR<long> copmat;
copmat = std::move(mat);
}
}