Пример #1
0
bool Store::anyRecipeReferences(int id) {
  vector<Food> *v = getInSortedOrder();
  for (int i = 0; i < v->size(); i++) {
    Food food = v->operator[](i);
    if (food.isRecipe()) {
      vector<int> ingredients = food.getIngredients();
      for (int j = 0; j < ingredients.size(); j++) {
        if (ingredients[j] == id) {
          delete v;
          return true;
        }
      }
    }
  }
  delete v;
  return false;
}
Пример #2
0
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);
    }
  }
}