#include "zm_image_analyser.h"



/*!\fn ImageAnalyser::ImageAnalyser(const ImageAnalyser& source)
 * \param source is the object to copy
 */
ImageAnalyser::ImageAnalyser(const ImageAnalyser& source) {
  m_Detectors = source.m_Detectors;
}



/*!\fn ImageAnalyser::operator=(const ImageAnalyser& source)
 * \param source is the object to copy
 */
ImageAnalyser& ImageAnalyser::operator=(const ImageAnalyser& source) {
  m_Detectors = source.m_Detectors;
  return *this;
}



ImageAnalyser::~ImageAnalyser() {
  for(DetectorsList::reverse_iterator It = m_Detectors.rbegin();
      It != m_Detectors.rend();
      ++It)
    delete *It;
}



/*!\fn ImageAnalyser::DoDetection(const Image &comp_image, Zone** zones, int n_numZones, Event::StringSetMap noteSetMap, std::string& det_cause)
 * \param comp_image is the image to analyse
 * \param zones is the zones array to analyse
 * \param n_numZones is the number of zones
 * \param noteSetMap is the map of events descriptions
 * \param det_cause is a string describing detection cause
 */
int ImageAnalyser::DoDetection(const Image &comp_image, Zone** zones, int n_numZones, Event::StringSetMap noteSetMap, std::string& det_cause) {
  Event::StringSet zoneSet;
  int score = 0;

  for(DetectorsList::iterator It = m_Detectors.begin();
      It != m_Detectors.end();
      ++It) {
    int detect_score = (*It)->Detect(comp_image, zones, n_numZones, zoneSet);
    if (detect_score) {
      score += detect_score;
      noteSetMap[(*It)->getDetectionCause()] = zoneSet;
      if (det_cause.length())
        det_cause += ", ";
      det_cause += (*It)->getDetectionCause();
    }
  }
  return score;
}

