//Editor-Info: -*- C++ -*-
//
//Subject: TOVE project / SW
//
//File: swport.cpp
//
//Version: $Revision: 1.13 $
//
//State: $State: Exp $
//
//Date: $Date: 1998/12/03 10:34:07 $
//
//Organisation:
//      Helsinki University of Technology
//      Laboratory of Telecommunications Software and Multimedia
//
//Author:
//      Timo Pärnänen
//
//Description:
//      See corresponding header file.
//
//Copyright:
//      Copyright 1999 Helsinki University of Technology
//      ALL RIGHTS RESERVED BETWEEN JANUARY 1996 AND JUNE 1999.
//
//Licence:
//
//
//History: 

#include "pf/debug.h"
#include "pf/error.h"
#include "swport.h"

swPort :: swPort(const string &portType_)
    : _portNumber(0),
      _portType(portType_),
      _linkMap()
{
    return;
}

swPort :: swPort(const swPort &other_)
    : _portNumber(other_._portNumber),
      _portType(other_._portType),
      _linkMap(other_._linkMap)
{
    return;
}

swPort :: ~swPort(void)
{
    return;
}

void swPort :: setPortNumber(pfUlong portNumber_)
{
    _portNumber = portNumber_;
    return;
}

string swPort :: getPortType(void)
{
    return _portType;
}

void swPort :: addUNIlink(pfUlong linkNumber_)
{
    (void)linkNumber_;
    THROW_PROTOCOL_ERROR_UNSPECIFIED;
    return;
}

void swPort :: addNNIlink(pfUlong linkNumber_,
                          pfUlong destinationPointCode_)
{
    (void)linkNumber_;
    (void)destinationPointCode_;
    THROW_PROTOCOL_ERROR_UNSPECIFIED;
    return;
}

void swPort :: removeLink(pfUlong linkNumber_)
{
    mapIterType iter = _linkMap.find(linkNumber_);
    if (iter != _linkMap.end())
    {
        swLink *link = ((*iter).second);
        delete link;
        link = 0;
        (void)_linkMap.erase(linkNumber_);
        debugUser("Link deleted");
    }
    return;
}

swLink *swPort :: findLink(pfUlong linkNumber_) const
{
    mapConstIterType iter = _linkMap.find(linkNumber_);       
    if (iter == _linkMap.end())
    {
        THROW_RESOURCE_UNAVAILABILITY_UNSPECIFIED;
    }
    swLink *link = ((*iter).second);    
    return link;
}

void swPort :: insertLink(pfUlong linkNumber_, swLink *link_)
{
    pair<mapIterType, bool> p;
    p = _linkMap.insert(mapType::value_type(linkNumber_, link_));
    
    if (p.second == 0)
    {
        THROW_RESOURCE_UNAVAILABILITY_UNSPECIFIED;
    }
    return;
}

ieConnectionInfo *swPort :: reserveResources(void)
{
    THROW_RESOURCE_UNAVAILABILITY_UNSPECIFIED;
    return 0;
}

ieConnectionInfo *swPort :: reserveResources(ieConnectionInfo *suggestedInfo_)
{
    (void)suggestedInfo_;
    THROW_RESOURCE_UNAVAILABILITY_UNSPECIFIED;
    return 0;
}

void swPort :: freeResources(ieConnectionInfo *info_)
{
    (void)info_;
    THROW_RESOURCE_UNAVAILABILITY_UNSPECIFIED;
    return;
}
