Пример #1
0
void Ingridients::writeFood(QJsonObject& json, Food& food) const {
    PRINT_DEBUG("Writing food" << food.getName());

    json["name"] = QString::fromStdString(food.getName());
    json["mass"] = static_cast<qint64>(food.getMass());
    json["price"] = static_cast<qint64>(food.getPrice());
    json["measureType"] = static_cast<int>(food.getUnitType());
    json["fats"] = static_cast<qint64>(food.getFats());
    json["proteins"] = static_cast<qint64>(food.getProteins());
    json["carbohydrates"] = static_cast<qint64>(food.getCarbohydrates());
    json["calories"] = static_cast<qint64>(food.getCalories());
}
Пример #2
0
Dish* Ingridients::readDish(const QJsonObject& json) {
    PRINT_DEBUG("Reading new dish");

    QJsonArray itemsList = json["items"].toArray();
    Food* newFood = readFood(itemsList[0].toObject()["food"].toObject());
    Dish* newDish = new Dish(json["name"].toString().toStdString(), newFood,
                             itemsList[0].toObject()["amount"].toInt());

    avaliableItems.push_back(newFood);
    newFood->addItemList(&avaliableItems);

    for ( int index = 1; index < itemsList.size(); index++ ) {
        newFood = readFood(itemsList[index].toObject()["food"].toObject());
        newDish->addFood(newFood, itemsList[index].toObject()["amount"].toInt());
        std::list<Item*>::iterator it;

        for ( it = avaliableItems.begin(); ; it++ ) {
            if ( !(*it)->getName().compare(newFood->getName()) ) {
                delete newFood;

                break;
            } else if ( it == avaliableItems.end() ) {
                avaliableItems.push_back(newFood);
                newFood->addItemList(&avaliableItems);
            }
        }
    }

    return newDish;
}
Пример #3
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);
    }
  }
}
Пример #4
0
vector<Food> *Store::getMatching(vector<string> keywords) {
  vector<Food> *foods = getInSortedOrder();
  vector<Food> *ret = new vector<Food>();
  for (int i = 0; i < foods->size(); i++) {
    Food food = foods->operator[](i);
    bool matching = false;
    for (int j = 0; j < keywords.size(); j++) {
      if (lower(food.getName()).find(keywords[j]) != -1) {
        matching = true;
      }
    }
    if (matching) {
      ret->push_back(food);
    }
  }
  delete foods;
  return ret;
}
Пример #5
0
void Ingridients::loadFood(const QJsonArray& jsonArray) {
    PRINT_DEBUG("Loading food");

    for ( int i = 0; i < jsonArray.size(); i++ ) {
        Food* newFood = readFood(jsonArray[i].toObject());
        std::list<Item*>::iterator it;

        for ( it = avaliableItems.begin(); ; it++ ) {
            if ( !(*it)->getName().compare(newFood->getName()) ) {
                delete newFood;

                break;
            } else if ( it == avaliableItems.end() ) {
                avaliableItems.push_back(newFood);
                newFood->addItemList(&avaliableItems);
            }
        }
    }
}
Пример #6
0
bool Food::operator==(const Food &other)
{
    return ( (this->getName() == other.getName()) && (this->getCatagroy() == other.getCatagroy()) );
}
Пример #7
0
string nodeFoodAsString(BSTNode<Food> *node, string bef) {
  stringstream stream;
  Food food = node->getData();
  stream << bef << food.getId() << " " << food.getName();
  return stream.str();
}