bool Store::addFood(Food food) { if (food.getId() != getNextId()) { throw "Food has invalid id #"; return false; } bst->insert(food); hashBrownTable.insertItem(food.getId(), bst->get(food)); numFoods++; maxId++; return true; }
void Store::initializeFoods() { vector<Food> *foods = fileIO->load(filename); std::cout << "size of foods: " << foods->size() << "\n"; for (int i = 0; i < foods->size(); i++) { Food food = foods->operator[](i); bst->insert(food); if (food.getId() > maxId) { maxId = food.getId(); } numFoods++; } for (int i = 0; i < foods->size(); i++) { Food food = foods->operator[](i); if (foodWithIdExists(food.getId())) { std::stringstream s; s << "Food " << food.getName() << " referencing duplicate ID " << food.getId(); throw s.str(); } hashBrownTable.insertItem(food.getId(), bst->get(food)); } // check nutrients for (int i = 0; i < foods->size(); i++) { // has to work with BST Food food = foods->operator[](i); if (food.isRecipe()) { vector<int> ingredients = food.getIngredients(); vector<Food> ingredientsFood; for (int i = 0; i < ingredients.size(); i++) { int id = ingredients[i]; if (!foodWithIdExists(id)) { std::stringstream s; s << "Food " << food.getName() << " referencing invalid id " << id; throw s.str(); } else { ingredientsFood.push_back(getById(id)); } } food.calculateNutrients(ingredientsFood); } } }
string nodeFoodAsString(BSTNode<Food> *node, string bef) { stringstream stream; Food food = node->getData(); stream << bef << food.getId() << " " << food.getName(); return stream.str(); }