// NOTE: DOES NOT take ownership of table SimpleFuncGenerator::SimpleFuncGenerator(const FuncTable* ft, const std::vector<Pattern>& pattern, const std::vector<const DomElemContainer*>& vars, const Universe& univ, const std::vector<unsigned int>& firstocc) : _reset(true), _functable(ft), _universe(univ), _vars(vars), _rangevar(vars.back()) { Assert(pattern.back() == Pattern::OUTPUT); Assert(pattern.size()==_vars.size()); auto domainpattern = pattern; domainpattern.pop_back(); std::vector<SortTable*> outtabs; for (unsigned int n = 0; n < domainpattern.size(); ++n) { switch (domainpattern[n]) { case Pattern::OUTPUT: if (firstocc[n] == n) { _outvars.push_back(vars[n]); outtabs.push_back(univ.tables()[n]); _outpos.push_back(n); } break; case Pattern::INPUT: _invars.push_back(vars[n]); _inpos.push_back(n); break; } } _univgen = GeneratorFactory::create(_outvars, outtabs); _currenttuple.resize(domainpattern.size(), NULL); }
Universe::Universe(const Universe& univ) : _tables(univ.tables()) { }