coord.cpp 2.92 KB
#include <iostream>
#include <algorithm>
#include <iterator>
#include <set>

#include "coord.h"


Coord::Coord()
{
    coord_ = std::vector< std::pair < int, int > > ();
}

Coord::Coord(std::vector< std::pair < int, int > > coord) : coord_(coord)
{
}

Coord::Coord(const Coord & coord) : coord_(coord.get_coord_())
{
}

void Coord::addCoord(std::pair< int,int > p)
{
    coord_.push_back(p);
}

void Coord::addCoord(Coord coord)
{
    for (unsigned int i = 0 ; i < coord.size(); i++)
        coord_.push_back(coord.get_coord(i));
}

std::vector< std::pair < int, int > >::const_iterator Coord::begin() const
{
    return coord_.begin();
}

std::vector< std::pair < int, int > >::iterator Coord::begin()
{
    return coord_.begin();
}

std::vector< std::pair < int, int > >::const_iterator Coord::end() const
{
    return coord_.end();
}

std::vector< std::pair < int, int > >::iterator Coord::end()
{
    return coord_.end();
}

bool Coord::empty() const
{
    return coord_.empty();
}

bool Coord::empty()
{
    return coord_.empty();
}

void Coord::erase(std::vector< std::pair< int, int > >::iterator it)
{
    coord_.erase(it);
}

void Coord::erase_duplicates()
{
    std::set< std::pair <int, int> > s;
    for( unsigned int i = 0; i < coord_.size(); i++ )
        s.insert( coord_[i] );
    coord_.assign( s.begin(), s.end() );
}

int Coord::find_coord(std::pair< int,int > p) const
{
    std::vector< std::pair< int,int > >::const_iterator it = std::find(coord_.begin(), coord_.end(), p);
    int r = -1;
    if(it != coord_.end())
        r = std::distance(coord_.begin(), it);
    return r;
}

std::vector< int > Coord::find_coord_with_i( int i ) const
{
    std::vector< int > res = std::vector< int > ();
    for(unsigned int j = 0; j < coord_.size(); j++)
    {
        if(coord_[j].first == i or coord_[j].second == i)
                res.push_back(j);
    }
    return res;
}

std::vector< int > Coord::find_coord_with_i_at_first( int i ) const
{
    std::vector< int > res = std::vector< int > ();
    for(unsigned int j = 0; j < coord_.size(); j++)
    {
        if(coord_[j].first == i)
                res.push_back(j);
    }
    return res;
}

std::vector< int > Coord::find_coord_with_i_at_second( int i ) const
{
    std::vector< int > res = std::vector< int > ();
    for(unsigned int j = 0; j < coord_.size(); j++)
    {
        if(coord_[j].second == i)
                res.push_back(j);
    }
    return res;
}


std::vector< std::pair < int, int > > Coord::get_coord_() const
{
    return coord_;
}

std::pair< int,int > Coord::get_coord(unsigned int i) const
{
    return coord_[i];
}

int Coord::get_coordF(unsigned int i) const
{
    return coord_[i].first;
}

int Coord::get_coordS(unsigned int i) const
{
    return coord_[i].second;
}

size_t Coord::size() const
{
    return coord_.size();
}

void Coord::clear()
{
    coord_.clear();
}

void Coord::sort()
{
    std::sort(coord_.begin(), coord_.end());
}

void Coord::pop_back()
{
    coord_.pop_back();
}