coriolis/crlcore/src/LibraryManager/CellDatas.cpp

124 lines
3.0 KiB
C++

// -*- C++ -*-
//
// This file is part of the Coriolis Software.
// Copyright (c) UPMC 2015-2016, All Rights Reserved
//
// +-----------------------------------------------------------------+
// | C O R I O L I S |
// | Alliance / Hurricane Interface |
// | |
// | Author : Jean-Paul CHAPUT |
// | E-mail : Jean-Paul.Chaput@lip6.fr |
// | =============================================================== |
// | C++ Module : "./CellDatas.cpp" |
// +-----------------------------------------------------------------+
#include <iostream>
#include "hurricane/Error.h"
#include "hurricane/Cell.h"
#include "crlcore/AllianceFramework.h"
#include "crlcore/Catalog.h"
#include "crlcore/CellDatas.h"
namespace CRL {
using namespace std;
using Hurricane::Error;
// -------------------------------------------------------------------
// Class : "CellLoaders".
CellLoaders* CellLoaders::_singleton = NULL;
unsigned int CellLoaders::_loaderBit = 16;
unsigned int CellLoaders::_loaderBitMask = 0xFFFF0000;
CellLoaders* CellLoaders::get ()
{
if (not _singleton) _singleton = new CellLoaders ();
return _singleton;
}
CellLoaders::CellLoaders ()
: _loaders()
{ }
CellLoaders::~CellLoaders ()
{ for ( auto iloader : _loaders ) delete iloader; }
unsigned int CellLoaders::lmask () { return _loaderBitMask; }
const CellLoader* CellLoaders::getLoader ( string format ) const
{
CellLoader key ( format, "", CellLoader::NoFlags, 0 );
auto iloader = _loaders.find( &key );
if (iloader == _loaders.end()) return NULL;
return *iloader;
}
const CellLoader* CellLoaders::getLoader ( unsigned int bit ) const
{
for ( auto iloader : _loaders ) {
if (iloader->getFlags() & bit) return iloader;
}
return NULL;
}
void CellLoaders::addLoader ( CellLoader* loader )
{
if (getLoader(loader->getFormat())) {
cerr << Error( "CellLoaders::addLoader(): Attemp to add multiple loaders for format <%s>."
, loader->getFormat().c_str()
) << endl;
return;
}
loader->setFlags( (1 << _loaderBit++) );
_loaders.insert( loader );
}
// -------------------------------------------------------------------
// Class : "CellDatas".
Utilities::Path CellDatas::_libraryPath;
CellDatas::CellDatas ( string name )
: _name (name)
, _flags (0)
, _activeFlags(0)
, _cell (NULL)
, _state (NULL)
{ }
CellDatas::CellDatas ( Cell* cell )
: _name ()
, _flags (0)
, _activeFlags(0)
, _cell (cell)
, _state (NULL)
{
if (cell) {
_name = getString(_cell->getName());
_state = CatalogExtension::get( cell );
}
else
_name = "[ERROR] NULL Cell";
}
} // CRL namespace.