Esempio n. 1
0
// 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);
}
Esempio n. 2
0
Universe::Universe(const Universe& univ)
		: _tables(univ.tables()) {
}