code cleanup

This commit is contained in:
Martin Brodbeck 2018-07-20 11:52:26 +02:00
parent 74719b762f
commit 6000bb3ef2
17 changed files with 65 additions and 67 deletions

View file

@ -10,7 +10,7 @@ set(CMAKE_CXX_STANDARD_REQUIRED ON)
if(MSVC) if(MSVC)
add_compile_options(/W4 /WX) add_compile_options(/W4 /WX)
else() else()
add_compile_options(-Wall -Wpedantic) add_compile_options(-Wall -Wextra -pedantic -Woverloaded-virtual -Wredundant-decls -Wshadow)
endif() endif()
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin) set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)

View file

@ -1,6 +1,6 @@
#include "article.h" #include "article.h"
Article::Article() : Entity() {} //Article::Article() : Entity() {}
// Article::Article(std::shared_ptr<Seller> sellerPtr) : Entity() { sellerPtr_ = sellerPtr; } // Article::Article(std::shared_ptr<Seller> sellerPtr) : Entity() { sellerPtr_ = sellerPtr; }
@ -20,8 +20,6 @@ std::string Article::getDescription() { return description_; }
Seller* Article::getSeller() { return sellerPtr_; } Seller* Article::getSeller() { return sellerPtr_; }
int Article::getPrice() { return price_; } int Article::getPrice() const { return price_; }
int Article::getArticleNo() { int Article::getArticleNo() { return articleNo_; }
return articleNo_;
}

View file

@ -14,20 +14,20 @@ class Sale;
class Article : public Entity class Article : public Entity
{ {
public: public:
Article(); Article() = default;
//Article(std::shared_ptr<Seller> sellerPtr); //virtual ~Article() = default;
void setArticleNo(int articleNo); void setArticleNo(int articleNo);
void setPrice(int price); void setPrice(int price);
void setDescription(const std::string& description); void setDescription(const std::string& description);
bool isSold(); bool isSold();
void setSale(Sale* salePtr); void setSale(Sale* salePtr);
//void setSeller(std::shared_ptr<Seller> sellerPtr);
void setSeller(Seller* sellerPtr); void setSeller(Seller* sellerPtr);
int getArticleNo(); int getArticleNo();
std::string getDescription(); std::string getDescription();
Seller* getSeller(); Seller* getSeller();
int getPrice(); int getPrice() const;
private: private:
Seller* sellerPtr_{}; Seller* sellerPtr_{};

View file

@ -5,7 +5,7 @@
#include <boost/uuid/uuid_generators.hpp> #include <boost/uuid/uuid_generators.hpp>
#include <boost/uuid/uuid_io.hpp> #include <boost/uuid/uuid_io.hpp>
Entity::~Entity() {} Entity::~Entity() = default;
void Entity::createUuid() void Entity::createUuid()
{ {
@ -19,7 +19,7 @@ void Entity::setUuidFromString(const std::string& uuidString)
uuid_ = generator(uuidString); uuid_ = generator(uuidString);
} }
inline Entity::State Entity::getState() const Entity::State Entity::getState() const
{ {
return state_; return state_;
} }

View file

@ -11,6 +11,7 @@ class Entity
public: public:
enum class State { NEW, UPDATE, DELETE, OK }; enum class State { NEW, UPDATE, DELETE, OK };
//Entity() = default;
virtual ~Entity() = 0; virtual ~Entity() = 0;
void createUuid(); void createUuid();

View file

@ -22,15 +22,13 @@ void Marketplace::loadFromDb()
db.loadSellers(sellers_); db.loadSellers(sellers_);
} }
std::vector<std::unique_ptr<Seller>>& Marketplace::getSellers() { return sellers_; } SellersVec& Marketplace::getSellers() { return sellers_; }
int Marketplace::getNextSellerNo() int Marketplace::getNextSellerNo()
{ {
auto iter = std::max_element( auto iter = std::max_element(
sellers_.begin(), sellers_.end(), sellers_.begin(), sellers_.end(),
[](const std::unique_ptr<Seller>& a, const std::unique_ptr<Seller>& b) -> bool { [](const auto& a, const auto& b) -> bool { return a->getSellerNo() < b->getSellerNo(); });
return a->getSellerNo() < b->getSellerNo();
});
if (iter == sellers_.end()) if (iter == sellers_.end())
return 1; return 1;
return (*iter)->getSellerNo() + 1; return (*iter)->getSellerNo() + 1;
@ -43,7 +41,4 @@ int Marketplace::getNumSellersDelete()
return count; return count;
} }
void Marketplace::sortSellers() void Marketplace::sortSellers() { std::sort(sellers_.begin(), sellers_.end()); }
{
std::sort(sellers_.begin(), sellers_.end());
}

View file

@ -7,20 +7,29 @@
#include <vector> #include <vector>
namespace
{
using SellersVec = std::vector<std::unique_ptr<Seller>>;
using SalesVec = std::vector<std::unique_ptr<Sale>>;
} // namespace
struct Basket {
};
class Marketplace class Marketplace
{ {
public: public:
Marketplace(); Marketplace();
void storeToDb(bool onlyDelete = false); void storeToDb(bool onlyDelete = false);
void loadFromDb(); void loadFromDb();
std::vector<std::unique_ptr<Seller>>& getSellers(); SellersVec& getSellers();
int getNextSellerNo(); int getNextSellerNo();
int getNumSellersDelete(); int getNumSellersDelete();
void sortSellers(); void sortSellers();
private: private:
std::vector<std::unique_ptr<Seller>> sellers_; SellersVec sellers_;
std::vector<std::unique_ptr<Sale>> sales_; SalesVec sales_;
}; };
#endif #endif

View file

@ -2,26 +2,20 @@
#include <numeric> #include <numeric>
void Sale::addArticle(std::shared_ptr<Article> articlePtr) void Sale::addArticle(Article* articlePtr)
{ {
articlePtr->setSale(this); articlePtr->setSale(this);
articles_.push_back(articlePtr); articles_.push_back(articlePtr);
} }
std::vector<Article*> Sale::getArticles() std::vector<Article*>& Sale::getArticles() { return articles_; }
{
std::vector<Article*> articles(articles_.size());
for (const auto& article : articles_) {
articles.push_back(article.get());
}
return articles;
}
void Sale::removeArticle(const Article* articlePtr) void Sale::removeArticle(const Article* articlePtr)
{ {
auto it = std::find_if(articles_.begin(), articles_.end(), /* auto it = std::find_if(articles_.begin(), articles_.end(),
[&articlePtr](auto art) { return art.get() == articlePtr; }); [&articlePtr](auto art) { return art.get() == articlePtr; }); */
auto it = std::find(articles_.begin(), articles_.end(), articlePtr);
if (it != articles_.end()) { if (it != articles_.end()) {
(*it)->setSale(nullptr); (*it)->setSale(nullptr);
(*it)->setState( (*it)->setState(
@ -33,7 +27,7 @@ void Sale::removeArticle(const Article* articlePtr)
int Sale::sumInCents() int Sale::sumInCents()
{ {
int sum = std::accumulate(articles_.begin(), articles_.end(), 0, int sum = std::accumulate(articles_.begin(), articles_.end(), 0,
[](int a, std::shared_ptr<Article> b) { return a + b->getPrice(); }); [](int a, const Article* b) { return a + b->getPrice(); });
return sum; return sum;
} }

View file

@ -9,13 +9,15 @@
class Article; class Article;
using ArticlesVec = std::vector<Article*>;
class Sale : public Entity class Sale : public Entity
{ {
public: public:
void addArticle(std::shared_ptr<Article> articlePtr); void addArticle(Article* articlePtr);
void setTimestamp(const std::string& timestamp); void setTimestamp(const std::string& timestamp);
std::vector<Article*> getArticles(); ArticlesVec& getArticles();
std::string getTimestamp(); std::string getTimestamp();
int sumInCents(); int sumInCents();
@ -24,7 +26,7 @@ class Sale : public Entity
private: private:
std::string timestamp_{ std::string timestamp_{
boost::posix_time::to_iso_extended_string(boost::posix_time::second_clock::local_time())}; boost::posix_time::to_iso_extended_string(boost::posix_time::second_clock::local_time())};
std::vector<std::shared_ptr<Article>> articles_{}; ArticlesVec articles_{};
}; };
#endif #endif

View file

@ -1,10 +1,7 @@
#include "seller.h" #include "seller.h"
Seller::Seller() : Entity() {}
Seller::Seller(const std::string& firstName, const std::string& lastName, int sellerNo, Seller::Seller(const std::string& firstName, const std::string& lastName, int sellerNo,
int numArticlesOffered) int numArticlesOffered) : Entity()
: Entity()
{ {
firstName_ = firstName; firstName_ = firstName;
lastName_ = lastName; lastName_ = lastName;
@ -20,10 +17,10 @@ void Seller::setLastName(const std::string& lastName) { lastName_ = lastName; }
void Seller::setNumArticlesOffered(int number) { numArticlesOffered_ = number; } void Seller::setNumArticlesOffered(int number) { numArticlesOffered_ = number; }
void Seller::addArticle(std::shared_ptr<Article> article) void Seller::addArticle(std::unique_ptr<Article> article)
{ {
article->setSeller(this); article->setSeller(this);
articles_.push_back(article); articles_.push_back(std::move(article));
} }
std::string Seller::getFirstName() const { return firstName_; } std::string Seller::getFirstName() const { return firstName_; }
@ -35,7 +32,7 @@ int Seller::getSellerNo() const { return sellerNo_; }
std::vector<Article*> Seller::getArticles(bool onlySold) const std::vector<Article*> Seller::getArticles(bool onlySold) const
{ {
std::vector<Article*> articles; std::vector<Article*> articles;
for (const auto article : articles_) { for (const auto& article : articles_) {
if (onlySold && article->isSold()) { if (onlySold && article->isSold()) {
articles.push_back(article.get()); articles.push_back(article.get());
} else if (!onlySold) { } else if (!onlySold) {
@ -52,7 +49,7 @@ int Seller::numArticlesOffered() const { return numArticlesOffered_; }
void Seller::cleanupArticles() void Seller::cleanupArticles()
{ {
articles_.erase(std::remove_if(articles_.begin(), articles_.end(), articles_.erase(std::remove_if(articles_.begin(), articles_.end(),
[](const std::shared_ptr<Article>& article) { [](const auto& article) {
return article->getState() == Article::State::DELETE; return article->getState() == Article::State::DELETE;
}), }),
articles_.end()); articles_.end());

View file

@ -13,7 +13,8 @@ class Article;
class Seller : public Entity class Seller : public Entity
{ {
public: public:
Seller(); Seller() = default;
//virtual ~Seller() = default;
Seller(const std::string& firstName, const std::string& lastName, int sellerNo = 0, Seller(const std::string& firstName, const std::string& lastName, int sellerNo = 0,
int numArticlesOffered = 0); int numArticlesOffered = 0);
@ -21,7 +22,7 @@ class Seller : public Entity
void setFirstName(const std::string& firstName); void setFirstName(const std::string& firstName);
void setLastName(const std::string& lastName); void setLastName(const std::string& lastName);
void setNumArticlesOffered(int number); void setNumArticlesOffered(int number);
void addArticle(std::shared_ptr<Article> article); void addArticle(std::unique_ptr<Article> article);
void cleanupArticles(); void cleanupArticles();
std::string getFirstName() const; std::string getFirstName() const;
@ -40,7 +41,7 @@ class Seller : public Entity
int numArticlesOffered_{}; int numArticlesOffered_{};
std::string firstName_{}; std::string firstName_{};
std::string lastName_{}; std::string lastName_{};
std::vector<std::shared_ptr<Article>> articles_{}; std::vector<std::unique_ptr<Article>> articles_{};
}; };
#endif #endif

View file

@ -9,12 +9,12 @@ SellerModel::SellerModel(Marketplace* market, QObject* parent)
{ {
} }
int SellerModel::rowCount(const QModelIndex& parent) const int SellerModel::rowCount([[maybe_unused]] const QModelIndex& parent) const
{ {
return marketplace_->getSellers().size(); return marketplace_->getSellers().size();
} }
int SellerModel::columnCount(const QModelIndex& parent) const { return 5; } int SellerModel::columnCount([[maybe_unused]] const QModelIndex& parent) const { return 5; }
QVariant SellerModel::data(const QModelIndex& index, int role) const QVariant SellerModel::data(const QModelIndex& index, int role) const
{ {
@ -92,8 +92,8 @@ bool SellerModel::setData(const QModelIndex& index, const QVariant& value, int r
return false; return false;
auto iter = auto iter =
std::find_if(marketplace_->getSellers().begin(), marketplace_->getSellers().end(), std::find_if(marketplace_->getSellers().begin(), marketplace_->getSellers().end(),
[&value](const std::unique_ptr<Seller>& seller) { [&value](const std::unique_ptr<Seller>& s) {
return value.toInt() == seller->getSellerNo(); return value.toInt() == s->getSellerNo();
}); });
if (iter != marketplace_->getSellers().end()) { if (iter != marketplace_->getSellers().end()) {
emit duplicateSellerNo( emit duplicateSellerNo(

View file

@ -16,7 +16,7 @@ class SellerModel : public QAbstractTableModel
virtual QVariant data(const QModelIndex& index, int role = Qt::DisplayRole) const override; virtual QVariant data(const QModelIndex& index, int role = Qt::DisplayRole) const override;
virtual QVariant headerData(int section, Qt::Orientation orientation, int role) const override; virtual QVariant headerData(int section, Qt::Orientation orientation, int role) const override;
virtual Qt::ItemFlags flags(const QModelIndex& index) const override; virtual Qt::ItemFlags flags(const QModelIndex& index) const override;
virtual bool setData(const QModelIndex& index, const QVariant& value, int role = Qt::EditRole); virtual bool setData(const QModelIndex& index, const QVariant& value, int role = Qt::EditRole) override;
virtual bool insertRows(int row, int count, const QModelIndex& parent = QModelIndex()) override; virtual bool insertRows(int row, int count, const QModelIndex& parent = QModelIndex()) override;
virtual bool removeRows(int row, int count, const QModelIndex& parent = QModelIndex()) override; virtual bool removeRows(int row, int count, const QModelIndex& parent = QModelIndex()) override;

View file

@ -15,7 +15,7 @@ BOOST_AUTO_TEST_CASE(check_is_sold)
Article article{}; Article article{};
BOOST_TEST(article.isSold() == false); BOOST_TEST(article.isSold() == false);
auto salePtr = std::make_shared<Sale>(); auto salePtr = std::make_unique<Sale>();
article.setSale(salePtr.get()); salePtr->addArticle(&article);
BOOST_TEST(article.isSold() == true); BOOST_TEST(article.isSold() == true);
} }

View file

@ -30,11 +30,11 @@ BOOST_AUTO_TEST_CASE(store_sellers_succ)
auto b = std::make_unique<Seller>("Max", "Mustermann"); auto b = std::make_unique<Seller>("Max", "Mustermann");
b->createUuid(); b->createUuid();
b->setSellerNo(2); b->setSellerNo(2);
auto c = std::make_shared<Article>(); auto c = std::make_unique<Article>();
c->createUuid(); c->createUuid();
c->setPrice(500); c->setPrice(500);
c->setDescription("Test"); c->setDescription("Test");
b->addArticle(c); b->addArticle(std::move(c));
BOOST_TEST(a->getUuid() != b->getUuid()); BOOST_TEST(a->getUuid() != b->getUuid());
sellers.push_back(std::move(a)); sellers.push_back(std::move(a));
sellers.push_back(std::move(b)); sellers.push_back(std::move(b));

View file

@ -12,15 +12,15 @@ BOOST_AUTO_TEST_CASE(articles_sum)
const int NUM_ARTICLES = 30; const int NUM_ARTICLES = 30;
Seller seller("Max", "Mustermann", 1, NUM_ARTICLES); Seller seller("Max", "Mustermann", 1, NUM_ARTICLES);
std::vector<std::shared_ptr<Article>> articles{}; ArticlesVec articles{};
Sale sale{}; Sale sale{};
for(int i = 0; i < NUM_ARTICLES; ++i) for(int i = 0; i < NUM_ARTICLES; ++i)
{ {
auto art = std::make_shared<Article>(); auto art = std::make_unique<Article>();
art->setPrice((i+1) * 10); art->setPrice((i+1) * 10);
articles.push_back(art); articles.push_back(art.get());
seller.addArticle(art); seller.addArticle(std::move(art));
} }
for(int i = 0; i < 10; ++i) for(int i = 0; i < 10; ++i)
@ -37,7 +37,7 @@ BOOST_AUTO_TEST_CASE(remove_article) {
Sale sale{}; Sale sale{};
BOOST_TEST(art->isSold() == false); BOOST_TEST(art->isSold() == false);
sale.addArticle(art); sale.addArticle(art.get());
BOOST_TEST(art->isSold() == true); BOOST_TEST(art->isSold() == true);
sale.removeArticle(art.get()); sale.removeArticle(art.get());
BOOST_TEST(art->isSold() == false); BOOST_TEST(art->isSold() == false);

View file

@ -30,10 +30,11 @@ BOOST_AUTO_TEST_CASE(create_many)
} }
BOOST_AUTO_TEST_CASE(with_article) { BOOST_AUTO_TEST_CASE(with_article) {
Seller seller("Max", "Mustermann"); Seller seller{};
auto article = std::make_shared<Article>(); auto article = std::make_unique<Article>();
article->setDescription("Test article"); article->setDescription("Test article");
seller.addArticle(article); seller.addArticle(std::move(article));
BOOST_TEST((article == nullptr));
BOOST_TEST(seller.getArticles(false).at(0)->getDescription() == "Test article"); BOOST_TEST(seller.getArticles(false).at(0)->getDescription() == "Test article");
BOOST_TEST(seller.numArticlesSold() == 0); BOOST_TEST(seller.numArticlesSold() == 0);
} }