//Editor-Info: -*- C++ -*-
//
//Subject: SCOMS project / 
//
//File: 
//
//Version: $Revision: 1.3 $
//
//State: $State: Exp $
//
//Date: $Date: 1999/03/09 08:18:46 $
//
//Organisation:
//      Helsinki University of Technology
//      Laboratory of Telecommunications Software and Multimedia
//
//Author:
//      Sami Raatikainen
//
//Description:
//
//
//Copyright:
//      Copyright 1999 Helsinki University of Technology
//      ALL RIGHTS RESERVED BETWEEN JANUARY 1996 AND JUNE 1999.
//
//Licence:
//
//
//History: 

#include "iecontainer.h"
#include "exception.h"

pfIEcontainer :: pfIEcontainer(void)
{
    return;
}

pfIEcontainer :: pfIEcontainer(const pfIEcontainer &other_)
    : _parameters(other_._parameters)
{
    return;
}

pfIEcontainer :: ~pfIEcontainer(void)
{
    ieIterType iter = _parameters.begin();
    while (iter != _parameters.end())
    {
        delete (*iter).second;
        iter++;
    }
    return;
}

void pfIEcontainer :: setIE(const string name_, pfIE *value_)
{
    _parameters.insert(ieValueType(name_, value_));
    return;
}

void pfIEcontainer :: setIE(const string name_, auto_ptr<pfIE> &value_)
{
    _parameters.insert(ieValueType(name_, value_.release()));
    return;
}

pfIE *pfIEcontainer :: getIE(const string &name_) const
{
    ieConstIterType iter = _parameters.find(name_);
    if (iter == _parameters.end())
    {
        throw pfNameUndefinedException(name_, PF_EX_INFO);
    }
    return (*iter).second;
}

pfIE *pfIEcontainer :: adoptIE(const string name_)
{
    pfIE *ie = 0;
    ieIterType iter = _parameters.find(name_);
    if (iter == _parameters.end())
    {
        throw pfNameUndefinedException(name_, PF_EX_INFO);
    }
    ie = (*iter).second;
    _parameters.erase(name_);
    return ie;
}

void pfIEcontainer :: adoptAll(pfIEcontainer *other_)
{
    ieIterType iter = (*other_)._parameters.begin();
    while (iter != (*other_)._parameters.end())
    {
        //_parameters.insert(ieValueType((*iter).first, (*iter).second));
        _parameters.insert(*iter);
        other_->_parameters.erase(iter);
        iter++;
    }
    return;
}

void pfIEcontainer :: copyAll(pfIEcontainer *other_)
{
    ieIterType iter = (*other_)._parameters.begin();
    while (iter != (*other_)._parameters.end())
    {
        _parameters.insert(ieValueType(
            (*iter).first, ((*iter).second)->clone()));
        iter++;
    }
    return;
}

bool pfIEcontainer :: ieAvailable(const string &name_) const
{
    bool result = true;
    ieConstIterType iter = _parameters.find(name_);
    if (iter == _parameters.end())
    {
        result = false;
    }
    return result;
}
