#include "TokenComponentBundledEdges.h" TokenComponentBundledEdges::Direction TokenComponentBundledEdges::opposite(Direction direction) { if (direction == DIRECTION_FORWARD) { return DIRECTION_BACKWARD; } else if (direction == DIRECTION_BACKWARD) { return DIRECTION_FORWARD; } return direction; } TokenComponentBundledEdges::TokenComponentBundledEdges(): m_direction(DIRECTION_INVALID) {} TokenComponentBundledEdges::~TokenComponentBundledEdges() {} std::shared_ptr TokenComponentBundledEdges::copy() const { return std::make_shared(*this); } int TokenComponentBundledEdges::getBundledEdgesCount() const { return static_cast(m_ids.size()); } std::set TokenComponentBundledEdges::getBundledEdgesIds() const { std::set ids; for (const std::pair& p: m_ids) { ids.insert(p.first); } return ids; } void TokenComponentBundledEdges::addBundledEdgesId(Id id, bool forward) { m_ids.emplace(id, forward ? DIRECTION_FORWARD : DIRECTION_BACKWARD); m_direction = DIRECTION_INVALID; } void TokenComponentBundledEdges::removeBundledEdgesId(Id id) { m_ids.erase(id); m_direction = DIRECTION_INVALID; } TokenComponentBundledEdges::Direction TokenComponentBundledEdges::getDirection() { if (m_direction != DIRECTION_INVALID) { return m_direction; } m_direction = DIRECTION_NONE; for (const std::pair& p: m_ids) { if (m_direction == DIRECTION_NONE) { m_direction = p.second; } else if (m_direction != p.second) { m_direction = DIRECTION_NONE; break; } } return m_direction; }