forked from mirror/toddcox-faster
Un-template groups.
Templating the groups doesn't improve performance that much, but it severely hinders usability. Switch things to be dynamically sized so that different ranked groups are the same type. Could also now separate headers and implementation... but will probably leave it for now.
This commit is contained in:
@@ -21,11 +21,10 @@ std::vector<unsigned int> parse_vec(const std::string &part) {
|
||||
return res;
|
||||
}
|
||||
|
||||
template<unsigned int N>
|
||||
int compute(
|
||||
const tc::Group<N> &group,
|
||||
size_t compute(
|
||||
const tc::Group &group,
|
||||
const std::vector<unsigned int> &vgens
|
||||
) {
|
||||
auto table = tc::solve<N>(group, vgens);
|
||||
auto table = tc::solve(group, vgens);
|
||||
return table.order();
|
||||
}
|
||||
|
||||
@@ -7,34 +7,10 @@ int main(int argc, char **argv) {
|
||||
auto vgens = parse_vec(argv[2]);
|
||||
auto target = std::stoul(argv[3]);
|
||||
|
||||
int order;
|
||||
switch (vsymbol.size()) {
|
||||
case 0: {
|
||||
Eigen::Vector<unsigned int, 0> symbol(vsymbol.data());
|
||||
order = compute<1>(tc::schlafli<1>(symbol), vgens);
|
||||
break;
|
||||
}
|
||||
case 1: {
|
||||
Eigen::Vector<unsigned int, 1> symbol(vsymbol.data());
|
||||
order = compute<2>(tc::schlafli<2>(symbol), vgens);
|
||||
break;
|
||||
}
|
||||
case 2: {
|
||||
Eigen::Vector<unsigned int, 2> symbol(vsymbol.data());
|
||||
order = compute<3>(tc::schlafli<3>(symbol), vgens);
|
||||
break;
|
||||
}
|
||||
case 3: {
|
||||
Eigen::Vector<unsigned int, 3> symbol(vsymbol.data());
|
||||
order = compute<4>(tc::schlafli<4>(symbol), vgens);
|
||||
break;
|
||||
}
|
||||
case 4: {
|
||||
Eigen::Vector<unsigned int, 4> symbol(vsymbol.data());
|
||||
order = compute<5>(tc::schlafli<5>(symbol), vgens);
|
||||
break;
|
||||
}
|
||||
}
|
||||
tc::Symbol symbol(vsymbol.size());
|
||||
symbol << Eigen::Map<tc::Symbol>(vsymbol.data(), vsymbol.size());
|
||||
tc::Group group = tc::schlafli(symbol);
|
||||
auto order = compute(group, vgens);
|
||||
|
||||
std::cout << "Order: " << order << ":" << target << std::endl;
|
||||
return order != target;
|
||||
|
||||
@@ -9,31 +9,29 @@ int main(int argc, char **argv) {
|
||||
|
||||
unsigned int order;
|
||||
|
||||
tc::Group group(0);
|
||||
|
||||
if (name == "E6") {
|
||||
auto group = tc::group::E<6>();
|
||||
order = compute<6>(group, vgens);
|
||||
group = tc::group::E(6);
|
||||
}
|
||||
if (name == "E7") {
|
||||
auto group = tc::group::E<7>();
|
||||
order = compute<7>(group, vgens);
|
||||
group = tc::group::E(7);
|
||||
}
|
||||
if (name == "E8") {
|
||||
auto group = tc::group::E<8>();
|
||||
order = compute<8>(group, vgens);
|
||||
group = tc::group::E(8);
|
||||
}
|
||||
if (name == "B6") {
|
||||
auto group = tc::group::B<6>();
|
||||
order = compute<6>(group, vgens);
|
||||
group = tc::group::B(6);
|
||||
}
|
||||
if (name == "B7") {
|
||||
auto group = tc::group::B<7>();
|
||||
order = compute<7>(group, vgens);
|
||||
group = tc::group::B(7);
|
||||
}
|
||||
if (name == "B8") {
|
||||
auto group = tc::group::B<8>();
|
||||
order = compute<8>(group, vgens);
|
||||
group = tc::group::B(8);
|
||||
}
|
||||
|
||||
order = compute(group, vgens);
|
||||
|
||||
std::cout << "Order: " << order << ":" << target << std::endl;
|
||||
return order != target;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user