Esempio n. 1
0
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;
}
Esempio n. 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);
    }
  }
}
Esempio n. 3
0
string nodeFoodAsString(BSTNode<Food> *node, string bef) {
  stringstream stream;
  Food food = node->getData();
  stream << bef << food.getId() << " " << food.getName();
  return stream.str();
}