diff --git a/QtRocket.cpp b/QtRocket.cpp index 6e9b60a..703ea20 100644 --- a/QtRocket.cpp +++ b/QtRocket.cpp @@ -95,7 +95,7 @@ int QtRocket::run(int argc, char* argv[]) return 0; } -void QtRocket::addMotorModels(std::vector& m) +void QtRocket::addMotorModels(std::vector& m) { for(const auto& i : m) { diff --git a/QtRocket.h b/QtRocket.h index c773f29..f96fd78 100644 --- a/QtRocket.h +++ b/QtRocket.h @@ -41,7 +41,7 @@ public: std::shared_ptr getAtmosphereModel() { return atmosphere; } - void addMotorModels(std::vector& m); + void addMotorModels(std::vector& m); void addRocket(std::shared_ptr r) { rocket = r; } @@ -58,7 +58,7 @@ private: static QtRocket* instance; // Motor "database(s)" - std::vector motorModels; + std::vector motorModels; utils::Logger* logger; diff --git a/gui/MainWindow.cpp b/gui/MainWindow.cpp index 540fed2..68245d1 100644 --- a/gui/MainWindow.cpp +++ b/gui/MainWindow.cpp @@ -143,7 +143,7 @@ void MainWindow::on_loadRSE_button_clicked() QComboBox* engineSelector = ui->rocketPartButtons->findChild(QString("engineSelectorComboBox")); - const std::vector& motors = loader.getMotors(); + const std::vector& motors = loader.getMotors(); for(const auto& motor : motors) { std::cout << "Adding: " << motor.commonName << std::endl; diff --git a/gui/ThrustCurveMotorSelector.cpp b/gui/ThrustCurveMotorSelector.cpp index 4e37a79..6f29ea6 100644 --- a/gui/ThrustCurveMotorSelector.cpp +++ b/gui/ThrustCurveMotorSelector.cpp @@ -56,7 +56,7 @@ void ThrustCurveMotorSelector::on_searchButton_clicked() c.addCriteria("manufacturer", manufacturer); c.addCriteria("impulseClass", impulseClass); - std::vector motors = tcApi->searchMotors(c); + std::vector motors = tcApi->searchMotors(c); for(const auto& i : motors) { diff --git a/model/MotorCase.h b/model/MotorCase.h index efa2afc..5e965fa 100644 --- a/model/MotorCase.h +++ b/model/MotorCase.h @@ -1,6 +1,8 @@ #ifndef MODEL_MOTORCASE_H #define MODEL_MOTORCASE_H +namespace model +{ class MotorCase { public: @@ -11,4 +13,5 @@ private: }; +} // namespace model #endif // MODEL_MOTORCASE_H diff --git a/model/MotorModel.cpp b/model/MotorModel.cpp index 2442a4d..8e79192 100644 --- a/model/MotorModel.cpp +++ b/model/MotorModel.cpp @@ -1,4 +1,7 @@ -#include "MotorModel.h" +#include "model/MotorModel.h" + +namespace model +{ MotorModel::MotorModel() { @@ -9,3 +12,5 @@ MotorModel::~MotorModel() { } + +} // namespace model diff --git a/model/MotorModel.h b/model/MotorModel.h index 00424f1..7bc5593 100644 --- a/model/MotorModel.h +++ b/model/MotorModel.h @@ -16,6 +16,9 @@ // qtrocket theaders #include "ThrustCurve.h" +namespace model +{ + /** * @brief The MotorModel class * @@ -134,6 +137,14 @@ public: else return std::string("OOP"); } + + static AVAILABILITY toEnum(const std::string& name) + { + if(name == "regular") + return AVAILABILITY::REGULAR; + else + return AVAILABILITY::OOP; + } }; /** @@ -171,6 +182,22 @@ public: else // UNK - Unknown return std::string("Unkown"); } + static CERTORG toEnum(const std::string& name) + { + if(name == "AMRS") + return CERTORG::AMRS; + else if(name == "CAR") + return CERTORG::CAR; + else if(name == "NAR") + return CERTORG::NAR; + else if(name == "TRA") + return CERTORG::TRA; + else if(name == "UNC") + return CERTORG::UNC; + else // Unknown + return CERTORG::UNK; + + } }; /** @@ -202,6 +229,17 @@ public: else return std::string("Hybrid"); } + static MOTORTYPE toEnum(const std::string& name) + { + if(name == "SU" || + name == "Single Use") + return MOTORTYPE::SU; + else if(name == "Hybrid") + return MOTORTYPE::HYBRID; + else if(name == "reload" || + name == "Reload") + return MOTORTYPE::RELOAD; + } }; /** @@ -245,6 +283,24 @@ public: return std::string("Unknown"); } } + static MOTORMANUFACTURER toEnum(const std::string& name) + { + if(name == "AeroTech" || + name == "Aerotech") + return MOTORMANUFACTURER::AEROTECH; + else if(name == "AMW") + return MOTORMANUFACTURER::AMW; + else if(name == "Cesaroni") + return MOTORMANUFACTURER::CESARONI; + else if(name == "Estes") + return MOTORMANUFACTURER::ESTES; + else if(name == "Loki") + return MOTORMANUFACTURER::LOKI; + else if(name == "Apogee") + return MOTORMANUFACTURER::APOGEE; + else + return MOTORMANUFACTURER::UNKNOWN; + } }; /// TODO: make these MotorModel members private. Public just for testing @@ -279,4 +335,6 @@ public: }; +} // namespace model + #endif // MODEL_MOTORMODEL_H diff --git a/model/MotorModelDatabase.h b/model/MotorModelDatabase.h index 2588313..157a7d1 100644 --- a/model/MotorModelDatabase.h +++ b/model/MotorModelDatabase.h @@ -34,7 +34,7 @@ public: * @param manufacturer The manufacturer to search for * @return vector of MotorModels from a given manufacturer */ - std::vector findMotorsByManufacturer(const std::string& manufacturer); + std::vector findMotorsByManufacturer(const std::string& manufacturer); /** * @brief findMotersByImpulseClass returns a vector of MotorModels with a given @@ -42,11 +42,11 @@ public: * @param imClass Impulse class to search for * @return vector of MotorModels with a given Impulse class */ - std::vector findMotersByImpulseClass(const std::string& imClass); + std::vector findMotersByImpulseClass(const std::string& imClass); private: - std::vector motors; + std::vector motors; }; diff --git a/utils/RSEDatabaseLoader.cpp b/utils/RSEDatabaseLoader.cpp index 80581b2..47851fc 100644 --- a/utils/RSEDatabaseLoader.cpp +++ b/utils/RSEDatabaseLoader.cpp @@ -35,23 +35,18 @@ RSEDatabaseLoader::~RSEDatabaseLoader() void RSEDatabaseLoader::buildAndAppendMotorModel(boost::property_tree::ptree& v) { - MotorModel mm; - mm.availability = MotorModel::MotorAvailability(MotorModel::AVAILABILITY::REGULAR); + model::MotorModel mm; + mm.availability = model::MotorModel::MotorAvailability(model::MotorModel::AVAILABILITY::REGULAR); mm.avgThrust = v.get(".avgThrust", 0.0); mm.burnTime = v.get(".burn-time", 0.0); - mm.certOrg = MotorModel::CertOrg(MotorModel::CERTORG::UNK); + mm.certOrg = model::MotorModel::CertOrg(model::MotorModel::CERTORG::UNK); mm.commonName = v.get(".code", ""); // mm.delays = extract vector from csv list // mm.designation = What is this? - // This is in the form of dia="18.", or dia="38." - { - std::string dia = v.get(".dia", ""); - dia = dia.substr(0, dia.length() - 1); - mm.diameter = std::stoi(dia); - } + mm.diameter = v.get(".dia", 0.0); // impulse class is the motor letter designation. extract from the first character // of the commonName since it isn't given explicity in the RSE file mm.impulseClass = mm.commonName[0]; @@ -59,38 +54,12 @@ void RSEDatabaseLoader::buildAndAppendMotorModel(boost::property_tree::ptree& v) // infoUrl not present in RSE file mm.infoUrl = ""; mm.length = v.get(".len", 0.0); - { - std::string manufacturer = v.get(".mfg", ""); - MotorModel::MotorManufacturer manu(MotorModel::MOTORMANUFACTURER::UNKNOWN); - if(manufacturer == "Aerotech") - manu = MotorModel::MOTORMANUFACTURER::AEROTECH; - else if(manufacturer == "Animal Motor Works") - manu = MotorModel::MOTORMANUFACTURER::AMW; - else if(manufacturer == "Apogee") - manu = MotorModel::MOTORMANUFACTURER::APOGEE; - mm.manufacturer = manu; - } + mm.manufacturer = model::MotorModel::MotorManufacturer::toEnum(v.get(".mfg", "")); mm.maxThrust = v.get(".peakThrust", 0.0); mm.propWeight = v.get(".propWt", 0.0); mm.totalImpulse = v.get(".Itot", 0.0); - { - std::string type = v.get(".Type"); - MotorModel::MotorType mt(MotorModel::MOTORTYPE::SU); - if(type.compare("reloadable") == 0) - { - mt = MotorModel::MOTORTYPE::RELOAD; - } - else if(type.compare("hybrid") == 0) - { - mt = MotorModel::MOTORTYPE::HYBRID; - } - else - { - // single use, which is default - } - mm.type = mt; - } + mm.type = model::MotorModel::MotorType::toEnum(v.get(".Type")); // Now get the thrust data std::vector> thrustData; @@ -100,23 +69,6 @@ void RSEDatabaseLoader::buildAndAppendMotorModel(boost::property_tree::ptree& v) double fdata = w.second.get(".f"); thrustData.push_back(std::make_pair(tdata, fdata)); } - /* - std::cout << "\n--------------------------------------------\n"; - std::cout << "name: " << mm.commonName << std::endl; - std::cout << "impulseClass: " << mm.impulseClass << std::endl; - std::cout << "length: " << mm.length << std::endl; - std::cout << "manufacturer: " << mm.manufacturer << std::endl; - std::cout << "maxThrust: " << mm.maxThrust << std::endl; - std::cout << "propWeight: " << mm.propWeight << std::endl; - std::cout << "totalImpulse: " << mm.totalImpulse << std::endl; - std::cout << "--------------------------------------------\n"; - - std::cout << "thrust data:\n"; - for(const auto& i : thrustData) - { - std::cout << "(" << i.first << ", " << i.second << ")\n"; - } - */ motors.emplace_back(std::move(mm)); } diff --git a/utils/RSEDatabaseLoader.h b/utils/RSEDatabaseLoader.h index c9de1c6..15a3b79 100644 --- a/utils/RSEDatabaseLoader.h +++ b/utils/RSEDatabaseLoader.h @@ -23,10 +23,10 @@ public: RSEDatabaseLoader(const std::string& filename); ~RSEDatabaseLoader(); - const std::vector& getMotors() const { return motors; } + const std::vector& getMotors() const { return motors; } private: - std::vector motors; + std::vector motors; void buildAndAppendMotorModel(boost::property_tree::ptree& v); diff --git a/utils/ThrustCurveAPI.cpp b/utils/ThrustCurveAPI.cpp index 800495c..8778d92 100644 --- a/utils/ThrustCurveAPI.cpp +++ b/utils/ThrustCurveAPI.cpp @@ -26,7 +26,7 @@ ThrustCurveAPI::~ThrustCurveAPI() } -MotorModel ThrustCurveAPI::getMotorData(const std::string& motorId) +model::MotorModel ThrustCurveAPI::getMotorData(const std::string& motorId) { std::stringstream endpoint; endpoint << hostname << "download.json?motorId=" << motorId << "&data=samples"; @@ -35,7 +35,7 @@ MotorModel ThrustCurveAPI::getMotorData(const std::string& motorId) std::string res = curlConnection.get(endpoint.str(), extraHeaders); /// TODO: fix this - MotorModel mm; + model::MotorModel mm; return mm; } @@ -62,17 +62,17 @@ ThrustcurveMetadata ThrustCurveAPI::getMetadata() std::string org = (*iter)["abbrev"].asString(); if(org == "AMRS") - ret.certOrgs.emplace_back(MotorModel::CERTORG::AMRS); + ret.certOrgs.emplace_back(model::MotorModel::CERTORG::AMRS); else if(org == "CAR") - ret.certOrgs.emplace_back(MotorModel::CERTORG::CAR); + ret.certOrgs.emplace_back(model::MotorModel::CERTORG::CAR); else if(org == "NAR") - ret.certOrgs.emplace_back(MotorModel::CERTORG::NAR); + ret.certOrgs.emplace_back(model::MotorModel::CERTORG::NAR); else if(org == "TRA") - ret.certOrgs.emplace_back(MotorModel::CERTORG::TRA); + ret.certOrgs.emplace_back(model::MotorModel::CERTORG::TRA); else if(org == "UNC") - ret.certOrgs.emplace_back(MotorModel::CERTORG::UNC); + ret.certOrgs.emplace_back(model::MotorModel::CERTORG::UNC); else - ret.certOrgs.emplace_back(MotorModel::CERTORG::UNK); + ret.certOrgs.emplace_back(model::MotorModel::CERTORG::UNK); } for(Json::ValueConstIterator iter = jsonResult["diameters"].begin(); iter != jsonResult["diameters"].end(); @@ -98,11 +98,11 @@ ThrustcurveMetadata ThrustCurveAPI::getMetadata() { std::string type = (*iter)["types"].asString(); if(type == "SU") - ret.types.emplace_back(MotorModel::MOTORTYPE::SU); + ret.types.emplace_back(model::MotorModel::MOTORTYPE::SU); else if(type == "reload") - ret.types.emplace_back(MotorModel::MOTORTYPE::RELOAD); + ret.types.emplace_back(model::MotorModel::MOTORTYPE::RELOAD); else - ret.types.emplace_back(MotorModel::MOTORTYPE::HYBRID); + ret.types.emplace_back(model::MotorModel::MOTORTYPE::HYBRID); } } catch(const std::exception& e) @@ -119,9 +119,9 @@ ThrustcurveMetadata ThrustCurveAPI::getMetadata() } -std::vector ThrustCurveAPI::searchMotors(const SearchCriteria& c) +std::vector ThrustCurveAPI::searchMotors(const SearchCriteria& c) { - std::vector retVal; + std::vector retVal; std::string endpoint = hostname; endpoint += "search.json?"; for(const auto& i : c.criteria) @@ -148,14 +148,14 @@ std::vector ThrustCurveAPI::searchMotors(const SearchCriteria& c) iter != jsonResult["results"].end(); ++iter) { - MotorModel mm; + model::MotorModel mm; mm.commonName = (*iter)["commonName"].asString(); std::string availability = (*iter)["availability"].asString(); if(availability == "regular") - mm.availability = MotorModel::MotorAvailability(MotorModel::AVAILABILITY::REGULAR); + mm.availability = model::MotorModel::MotorAvailability(model::MotorModel::AVAILABILITY::REGULAR); else - mm.availability = MotorModel::MotorAvailability(MotorModel::AVAILABILITY::OOP); + mm.availability = model::MotorModel::MotorAvailability(model::MotorModel::AVAILABILITY::OOP); mm.avgThrust = (*iter)["avgThrustN"].asDouble(); mm.burnTime = (*iter)["burnTimeS"].asDouble(); @@ -167,7 +167,7 @@ std::vector ThrustCurveAPI::searchMotors(const SearchCriteria& c) mm.length = (*iter)["length"].asDouble(); std::string manu = (*iter)["manufacturer"].asString(); if(manu == "AeroTech") - mm.manufacturer = MotorModel::MOTORMANUFACTURER::AEROTECH; + mm.manufacturer = model::MotorModel::MOTORMANUFACTURER::AEROTECH; //mm.manufacturer = (*iter)["manufacturer"].asString(); mm.maxThrust = (*iter)["maxThrustN"].asDouble(); mm.motorIdTC = (*iter)["motorId"].asString(); @@ -179,11 +179,11 @@ std::vector ThrustCurveAPI::searchMotors(const SearchCriteria& c) std::string type = (*iter)["type"].asString(); if(type == "SU") - mm.type = MotorModel::MotorType(MotorModel::MOTORTYPE::SU); + mm.type = model::MotorModel::MotorType(model::MotorModel::MOTORTYPE::SU); else if(type == "reload") - mm.type = MotorModel::MotorType(MotorModel::MOTORTYPE::RELOAD); + mm.type = model::MotorModel::MotorType(model::MotorModel::MOTORTYPE::RELOAD); else - mm.type = MotorModel::MotorType(MotorModel::MOTORTYPE::HYBRID); + mm.type = model::MotorModel::MotorType(model::MotorModel::MOTORTYPE::HYBRID); retVal.push_back(mm); } diff --git a/utils/ThrustCurveAPI.h b/utils/ThrustCurveAPI.h index 96cfe89..eb63946 100644 --- a/utils/ThrustCurveAPI.h +++ b/utils/ThrustCurveAPI.h @@ -31,11 +31,11 @@ public: ThrustcurveMetadata& operator=(ThrustcurveMetadata&&) = default; //private: - std::vector certOrgs; + std::vector certOrgs; std::vector diameters; std::vector impulseClasses; std::map manufacturers; - std::vector types; + std::vector types; }; @@ -73,7 +73,7 @@ public: * @brief getThrustCurve will download the thrust data for the given Motor using the motorId * @param m MotorModel to populate */ - MotorModel getMotorData(const std::string& motorId); + model::MotorModel getMotorData(const std::string& motorId); /** @@ -82,7 +82,7 @@ public: ThrustcurveMetadata getMetadata(); - std::vector searchMotors(const SearchCriteria& c); + std::vector searchMotors(const SearchCriteria& c);