8#include <kernel/adjacency/coloring.hpp> 
    9#include <kernel/adjacency/graph.hpp> 
   14#include <unordered_set> 
   32      _num_colors(num_colors)
 
   43      std::unordered_set<Index> colors;
 
   44      for (
Index i(0) ; i < num_nodes ; ++i)
 
   46        colors.insert(coloring[i]);
 
   52      for(
Index i(0); i< num_nodes; i++)
 
   62      const IndexVector& coloring) :
 
   63      _num_colors(num_colors),
 
   72      Index num_nodes_domain = graph.get_num_nodes_domain();
 
   76      if(num_nodes_domain == 
Index(0))
 
   80      _coloring = IndexVector(num_nodes_domain);
 
   89      std::vector<Index> col_aux(mnc);
 
   92      std::vector<Index> col_num(mnc, 
Index(0));
 
   98      Index min_color_index;
 
  101      for(
Index i(0); i < num_nodes_domain; ++i)
 
  104        for(
Index j(0); j < mnc; ++j)
 
  110        lower_bound = domain_ptr[i];
 
  111        upper_bound = domain_ptr[i+1];
 
  112        for(
Index j(lower_bound); j < upper_bound; ++j)
 
  124        min_color_uses = num_nodes_domain + 1;
 
  127        min_color_index = num_nodes_domain + 1;
 
  134            if(col_num[j] < min_color_uses)
 
  136              min_color_uses = col_num[j];
 
  143        if(min_color_index != num_nodes_domain +1)
 
  147          ++col_num[min_color_index];
 
  164      Index num_nodes_domain = graph.get_num_nodes_domain();
 
  168      if(num_nodes_domain == 
Index(0))
 
  172      _coloring = IndexVector(num_nodes_domain);
 
  181      std::vector<Index> col_aux(mnc);
 
  184      std::vector<Index> col_num(mnc, 
Index(0));
 
  189      Index min_color_uses;
 
  190      Index min_color_index;
 
  196      for(
Index j(0); j < num_nodes_domain; ++j)
 
  202      for(
Index k(0); k < num_nodes_domain; ++k)
 
  208        for(
Index j(0); j < mnc; ++j)
 
  214        lower_bound = domain_ptr[i];
 
  215        upper_bound = domain_ptr[i+1];
 
  216        for(
Index j(lower_bound); j < upper_bound; ++j)
 
  218          if(
_coloring[image_idx[j]] != num_nodes_domain + 1)
 
  228        min_color_uses = num_nodes_domain + 1;
 
  231        min_color_index = num_nodes_domain + 1;
 
  238            if(col_num[j] < min_color_uses)
 
  240              min_color_uses = col_num[j];
 
  247        if(min_color_index != num_nodes_domain +1)
 
  251          ++col_num[min_color_index];
 
  265      _num_colors(other._num_colors),
 
  266      _coloring(std::forward<IndexVector>(other._coloring))
 
  268      other._num_colors = 
Index(0);
 
  269      other._coloring.clear();
 
  279      _num_colors = other._num_colors;
 
  280      _coloring = std::forward<IndexVector>(other._coloring);
 
  282      other._num_colors = 
Index(0);
 
  283      other._coloring.clear();
 
  299      domain_ptr[0] = 
Index(0);
 
  316            image_idx[idx_counter] = j;
 
  320        domain_ptr[i+1] = idx_counter;
 
Coloring object implementation.
IndexVector _coloring
coloring vector
Graph create_partition_graph() const
Creates a color partition graph.
Index _num_colors
total number of colors used
Index get_num_nodes() const
Returns the total number of nodes.
virtual ~Coloring()
virtual destructor
Coloring & operator=(Coloring &&other) noexcept
move-assign operator
Index get_max_color() const
Returns the maximum color index.
Coloring()
Default constructor.
Adjacency Graph implementation.
Index * get_domain_ptr()
Returns the domain pointer array.
Index * get_image_idx()
Returns the image node index array.
Index degree(Index domain_node) const
Returns the degree of a domain node.
std::uint64_t Index
Index data type.