//: C06:CalcInventory.cpp
// Z knihy "Myslíme v jazyce C++, část 2" od Bruce Eckela a Chucka Allisona.
// (c) 1995-2004 MindView, Inc. Všechna práva vyhrazena.
// Přečtěte si podmínky používání zdrojových kódů umístěné v souboru 
// 'Licence.txt' dodávaném spolu s balíčkem kódu dostupným na www.MindView.net.
// Další použití operátoru for_each().
#include <algorithm>
#include <ctime>
#include <vector>
#include "Inventory.h"
#include "PrintSequence.h"
using namespace std;

// Ke shromažďování celků z katalogu:
class KatalogCelkem {
  int mnozstvi;
  int hodnota;
public:
  KatalogCelkem() : mnozstvi(0), hodnota(0) {}
  void operator()(const Katalog& kat) {
    mnozstvi += kat.getMnozstvi();
    hodnota += kat.getMnozstvi() * kat.getHodnota();
  }
  friend ostream&
  operator<<(ostream& os, const KatalogCelkem& ia) {
    return os << "total mnozstvi: " << ia.mnozstvi
              << ", total hodnota: " << ia.hodnota;
  }
};

int main() {
  vector<Katalog> vk;
  srand(time(0));  // generátor náhodných čísel
  generate_n(back_inserter(vk), 15, KatalogGen());
  print(vk.begin(), vk.end(), "vk");
  KatalogCelkem ia = for_each(vk.begin(),vk.end(), KatalogCelkem());
  cout << ia << endl;
} ///:~
