knotkit/dt_code.cpp
2017-07-01 11:38:53 +02:00

64 lines
1.7 KiB
C++

#include <knotkit.h>
dt_code::dt_code (const std::string &name_, const char *p)
: name(name_) {
std::cerr << "p = " << p << "\n";
unsigned n_crossings = alpha_to_int (*p++);
std::cerr << "n_crossings = " << std::to_string(n_crossings) << "\n";
unsigned n_components = alpha_to_int (*p++);
std::cerr << "n_componente = " << std::to_string(n_components) << "\n";
even_labels = basedvector<basedvector<int, 1>, 1> (n_components);
for (unsigned i = 1; i <= n_components; i ++) {
int num_even_labels = alpha_to_int(*p++);
even_labels[i] = basedvector<int, 1> (num_even_labels);
std::cerr << "even_labels[" << std::to_string(i) << "] has " << std::to_string(num_even_labels) << " elements." << "\n";
}
for (unsigned i = 1; i <= n_components; i ++) {
std::cerr << "Decoding component number " << std::to_string(i) << "\n";
for (unsigned j = 1; j <= even_labels[i].size (); j ++) {
even_labels[i][j] = alpha_to_int (*p++) * 2;
std::cerr << std::to_string(even_labels[i][j]) << " ";
}
std::cerr << "\n";
}
if (*p == '\n')
p++;
assert (*p == 0);
assert (num_crossings () == n_crossings);
}
unsigned
dt_code::num_crossings () const
{
unsigned n = 0;
for (unsigned i = 1; i <= even_labels.size (); i ++)
n += even_labels[i].size ();
return n;
}
void
dt_code::display_self () const
{
printf ("dt_code %s [", name.c_str ());
for (unsigned i = 1; i <= even_labels.size (); i ++)
{
if (i > 1)
printf (", ");
printf ("[");
for (unsigned j = 1; j <= even_labels[i].size (); j ++)
{
if (j > 1)
printf (", ");
printf ("%d", even_labels[i][j]);
}
printf ("]");
}
printf ("]\n");
}