//
// This file is part of the Coriolis Project.
// Copyright (C) Laboratoire LIP6 - Departement ASIM
// Universite Pierre et Marie Curie
//
// Main contributors :
//        Christophe Alexandre   <Christophe.Alexandre@lip6.fr>
//        Sophie Belloeil             <Sophie.Belloeil@lip6.fr>
//        Hugo Clément                   <Hugo.Clement@lip6.fr>
//        Jean-Paul Chaput           <Jean-Paul.Chaput@lip6.fr>
//        Damien Dupuis                 <Damien.Dupuis@lip6.fr>
//        Christian Masson           <Christian.Masson@lip6.fr>
//        Marek Sroka                     <Marek.Sroka@lip6.fr>
// 
// The Coriolis Project  is free software;  you can  redistribute it and/or
// modify  it  under the  terms  of  the  GNU  General  Public License  as
// published by  the Free  Software Foundation; either  version 2  of  the
// License, or (at your option) any later version.
// 
// The Coriolis Project  is distributed in the hope that it will be useful,
// but  WITHOUT  ANY  WARRANTY;  without  even  the  implied  warranty  of
// MERCHANTABILITY  or  FITNESS  FOR A  PARTICULAR PURPOSE.   See  the GNU
// General Public License for more details.
// 
// You should have received a copy  of  the  GNU  General  Public  License
// along with  the Coriolis Project;  if  not,  write to the  Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
//
//
// License-Tag
//
//
// Date   : 29/01/2004
// Author : Hugo Clément                  <Hugo.Clement@lip6.fr>
//
// Authors-Tag 


#include "nimbus/NimbusEngine.h"

namespace Nimbus {

  using namespace Hurricane;

    /*
     * ********************************************************************
     * FrontLine implementation
     *
     */

    FrontLine::FrontLine ()
        : _rootFences()
        {
        }

    FrontLine::~FrontLine ()
    {
    }

    FrontLine* FrontLine::create ()
    {
        FrontLine* frontline = new FrontLine ();
        if (!frontline) throw Error("unable to create a frontline");
        frontline->_postCreate ();
        return frontline;
    }

    void FrontLine::destroy ()
    {
        throw Error("Deletion of FrontLine undefined yet");
        return;
    }

    void FrontLine::_preDestroy ()
    {
        return;
    }

    void FrontLine::_postCreate ()
    {
        return;
    }

    void FrontLine::addRootFence (Fence* fence)
    {
        // We may add some sanity checks here
        // but we don't because FrontLine are created
        // by an already consistency checked routine
        _rootFences.push_back (fence);
        fence->setFrontLine(this);
        return;
    }

    void FrontLine::moveTo (DbU::Unit target)
    {
        for (
                vector<Fence*>::iterator fit = _rootFences.begin() ;
                fit != _rootFences.end() ;
                fit++
            )
        {
            (*fit)->_moveTo (target);
        }
        return;
    }
                

} // namespace Nimbus

#if 0
Slot* getSlot (const string& name, Nimbus::FrontLine* frontline)
{
    return new StandardSlot<Nimbus::FrontLine>(name, frontline);
}
#endif
