diff --git a/src/services/Surplus.cpp b/src/services/Surplus.cpp index d08bf0a..ace82f5 100644 --- a/src/services/Surplus.cpp +++ b/src/services/Surplus.cpp @@ -2,7 +2,6 @@ // Created by StanislausCichocki on 10.03.2025. // -#define VALUE_COUNT (4*24*365) #include "Surplus.h" #include "../model/Building.h" #include @@ -11,44 +10,61 @@ #include -void Surplus::CalculateSurplus(std::vector>& communities) +void Surplus::CalculateSurplus() { - std::vector consumptionAvailable(VALUE_COUNT, 0.0); - std::vector generationAvailable(VALUE_COUNT, 0.0); auto iterateFunc = Community::iterateBuildings(communities); auto modifyCommunity = [](Community& c) { std::cout << "Processing Community\n"; }; - auto modifyBuilding = [](Building::Base& building) + auto modifyBuilding = [this](Building::Base& building) { std::cout << "Processing Building\n"; CalculateBuildingSurplus(building); }; iterateFunc(modifyCommunity)(modifyBuilding); + + //TODO Calculate Relative Values } void Surplus::CalculateBuildingSurplus(Building::Base& building) { - std::vector ownCoverage(VALUE_COUNT, 0.0f); - std::vector neededConsumption(VALUE_COUNT, 0.0f); - std::vector neededGeneration(VALUE_COUNT, 0.0f); - std::vector ownUsage(VALUE_COUNT, 0.0f); + std::vector> ownCoverage; + std::vector> neededConsumption; + std::vector> neededGeneration; + std::vector> ownUsage; const auto& consumption = building.metadata()->consumption_profile(); const auto& generation = building.metadata()->generation_profile(); + ownCoverage.reserve(consumption.size()); + neededConsumption.reserve(consumption.size()); + neededGeneration.reserve(consumption.size()); + ownUsage.reserve(consumption.size()); + std::transform(consumption.begin(), consumption.end(), - generation.begin(), ownCoverage.begin(), + generation.begin(), std::back_inserter(ownCoverage), [&](const std::unique_ptr& c, const std::unique_ptr& g) { - ownCoverage.push_back((c ? *c : 0.0f) - (g ? *g : 0.0f)); - neededConsumption.push_back((c && *c > 0.0f ? *c : 0.0f)); - neededGeneration.push_back((g && *g < 0.0f ? -*g : 0.0f)); - ownUsage.push_back((c ? *c : 0.0f) - (neededConsumption.back())); - return 0.0f; + auto own_cov = std::make_unique((c ? *c : 0.0f) - (g ? *g : 0.0f)); + ownCoverage.push_back(std::make_unique(*own_cov)); + + neededConsumption.push_back(std::make_unique(c && *c > 0.0f ? *c : 0.0f)); + neededGeneration.push_back(std::make_unique(g && *g < 0.0f ? -*g : 0.0f)); + ownUsage.push_back(std::make_unique((c ? *c : 0.0f) - *neededConsumption.back())); + + return std::move(own_cov); }); + building.values()->set_community_coverage(std::move(ownCoverage)); + building.values()->set_needed_con(std::move(neededGeneration)); + building.values()->set_needed_gen(std::move(neededGeneration)); + building.values()->set_own_usage(std::move(ownUsage)); + + + std::transform(generationAvailable.begin(), generationAvailable.end(), consumptionAvailable.begin(), + isGenBigger.begin(), [&](const float a, const float b) { return a > b; }); } + diff --git a/src/services/Surplus.h b/src/services/Surplus.h index d217533..bc1690f 100644 --- a/src/services/Surplus.h +++ b/src/services/Surplus.h @@ -4,7 +4,7 @@ #ifndef SURPLUS_H #define SURPLUS_H -#include +#define VALUE_COUNT (4*24*365) #include #include "../model/Community.h" #include @@ -16,15 +16,21 @@ class Surplus { private: std::vector>& communities; + std::vector consumptionAvailable; + std::vector generationAvailable; + std::vector isGenBigger; public: - Surplus(std::vector>& communities) : communities(communities) + Surplus(std::vector>& communities) : communities(communities), + consumptionAvailable(VALUE_COUNT, 0.0f), + generationAvailable(VALUE_COUNT, 0.0f), + isGenBigger((VALUE_COUNT, false)) { } - void static CalculateSurplus(std::vector>& communities); + void CalculateSurplus(); - void static CalculateBuildingSurplus(Building::Base&); + void CalculateBuildingSurplus(Building::Base&); }; diff --git a/tests/services/test_Surplus.cpp b/tests/services/test_Surplus.cpp index 8a0046b..3ff927b 100644 --- a/tests/services/test_Surplus.cpp +++ b/tests/services/test_Surplus.cpp @@ -10,6 +10,7 @@ TEST_CASE("Testing add function") { std::vector> communities; communities.push_back(Factory::create_test_community()); - Surplus::CalculateSurplus(communities); + Surplus surplus(communities); + surplus.CalculateSurplus(); CHECK(true); }