//Editor-Info: -*- C++ -*-
//
//Subject: SCOMS project / 
//
//File: 
//
//Version: $Revision: 1.4 $
//
//State: $State: Exp $
//
//Date: $Date: 1999/03/15 09:57:54 $
//
//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 <typeinfo>
#include <string>
//#include "pf/storage.h"
#include "ie/connectionidentifier.h"
#include "ie/iestrings.h"
#include <iostream.h>
#include "pf/debug.h"
#include <autoptr.h>
#include "iface/sigif/sigprimitive.h"


int main(void)
{
    debugOutputCout();
    
    sigPrimitive *msg1 = new sigPrimitive;
    sigPrimitive *msg2 = new sigPrimitive;
    
    string ieStr = ieConnectionIdentifierStr;
    string ieStr2("ieConnectionIdentifierStr2");
    
    debugUser("Phase 1");
    if(1) // to simulate local variable
    {
        // put IE
        ieConnectionIdentifier *ie = new ieConnectionIdentifier;
        //auto_ptr<pfIE> iePtr(ie);
        
        ie->setVPCI(1);
        ie->setVCI(5);
        
        //msg1->setIE(ieStr, iePtr);
        msg1->setIE(ieStr, ie);

        // put IE
        ieConnectionIdentifier *ie2 = new ieConnectionIdentifier;
        //auto_ptr<pfIE> iePtr2(ie2);
        
        ie2->setVPCI(2);
        ie2->setVCI(6);
        
        //msg1->setIE(ieStr2, iePtr2);
        msg1->setIE(ieStr2, ie2);
    }
    
    debugUser("Phase 2");
    try
    {
        if(1) // to simulate local variable
        {
            ieConnectionIdentifier *testIE =
                ieConnectionIdentifier :: narrow(msg1->getIE(ieStr));
            
            cout << "VPCI: " << testIE->getVPCI() << endl;
            cout << "VCI: " << testIE->getVCI() << endl;    
            
            testIE->setVPCI(10);
            testIE->setVCI(2);
        }
        
        debugUser("Phase 3");
        cout << "ieAvailable: " << msg1->ieAvailable(ieStr) << endl;
       
#if 0 
        pfIE *ieRef2 = msg1->adoptIE(ieStr);
        ieConnectionIdentifier *testIE2 =
            dynamic_cast<ieConnectionIdentifier *>(ieRef2);
        cout << "VPCI: " << testIE2->getVPCI() << endl;
        cout << "VCI: " << testIE2->getVCI() << endl;
     
#endif   
//#if 0
        msg2->adoptAll(msg1);
        pfIE *ieRef2 = msg2->adoptIE(ieStr2);
        ieConnectionIdentifier *testIE2 =
            dynamic_cast<ieConnectionIdentifier *>(ieRef2);
        cout << "VPCI: " << testIE2->getVPCI() << endl;
        cout << "VCI: " << testIE2->getVCI() << endl;

        pfIE *ieRef = msg2->adoptIE(ieStr);
        ieConnectionIdentifier *testIE =
            dynamic_cast<ieConnectionIdentifier *>(ieRef);
        cout << "VPCI: " << testIE->getVPCI() << endl;
        cout << "VCI: " << testIE->getVCI() << endl;
//#endif
        
        
        debugUser("Phase 4");
        cout << "ieAvailable: " << msg1->ieAvailable(ieStr) << endl;

        ieConnectionIdentifier *testIE3 =
            ieConnectionIdentifier :: narrow(msg1->getIE(ieStr));
        
        cout << "VPCI: " << testIE3->getVPCI() << endl;
        cout << "VCI: " << testIE3->getVCI() << endl;    
        
        testIE3->setVPCI(10);
        testIE3->setVCI(2);
        
    }
    catch(pfException &ex)
    {
        ex.printInfo();
    }

    return 0;
}
