// Vorosweep - Copyright (C) 2010-2014 T. Mouton
//
// See the LICENSE.txt file for license information. Please report all
// bugs and problems to <thibaud.mouton@gmail.com>.

#include "statistics.h"

using namespace vorosweep;

const char *Statistic::entityname[] = {"ACTIVE_GENERATOR", "INACTIVE_GENERATOR", "POLYGON", "EDGE", "FACET"};

void Statistic::init_entities()
{
//   printf ( "entity size --> %d\n", ( int ) entity_count.size() );
  entity_count.insert ( std::pair<Statistic::entity, int> ( ACTIVE_GENERATOR, 0 ) );
  entity_count.insert ( std::pair<Statistic::entity, int> ( INACTIVE_GENERATOR, 0 ) );
  entity_count.insert ( std::pair<Statistic::entity, int> ( POLYGON, 0 ) );
  entity_count.insert ( std::pair<Statistic::entity, int> ( EDGE, 0 ) );
  entity_count.insert ( std::pair<Statistic::entity, int> ( FACET, 0 ) );
}

void Statistic::init_events()
{
  processed_events = 0;
  event_count.insert ( std::pair<Event::eventtype, int> ( Event::NEWBORDEREDGESWITCH, 0 ) );
  event_count.insert ( std::pair<Event::eventtype, int> ( Event::NEWEDGESWITCH, 0 ) );
  event_count.insert ( std::pair<Event::eventtype, int> ( Event::NEWFACETSWITCH, 0 ) );
  event_count.insert ( std::pair<Event::eventtype, int> ( Event::NEWGENERATOR, 0 ) );
  event_count.insert ( std::pair<Event::eventtype, int> ( Event::EDGE_EDGECRASH, 0 ) );
  event_count.insert ( std::pair<Event::eventtype, int> ( Event::EDGE_FACETCRASH, 0 ) );
  event_count.insert ( std::pair<Event::eventtype, int> ( Event::EDGE_BORDERCRASH, 0 ) );
  event_count.insert ( std::pair<Event::eventtype, int> ( Event::FACET_BORDERCRASH, 0 ) );
  event_count.insert ( std::pair<Event::eventtype, int> ( Event::EDGESWITCH, 0 ) );
  event_count.insert ( std::pair<Event::eventtype, int> ( Event::FACETSWITCH, 0 ) );
  event_count.insert ( std::pair<Event::eventtype, int> ( Event::BORDEREDGESWITCH, 0 ) );
}

void Statistic::report()
{
//   printf ( "entity size --> %d\n", ( int ) entity_count.size() );
  tprintf ( "Statistic report entities :\n" );
  for ( std::map<Statistic::entity, int>::iterator it = entity_count.begin(); it != entity_count.end(); it++ )
  {
    tprintf ( " %s : %d\n", entityname[it->first], it->second );
  }
  tprintf ( "Statistic report events :\n" );
  for ( std::map<Event::eventtype, int>::iterator it = event_count.begin(); it != event_count.end(); it++ )
  {
    tprintf ( " %s : %d\n", Event::eventtypename[it->first], it->second );
  }
}
