* ./crlcore:

- New: The Measure extension (on any DBo) that allows to save measurement
        and print them later into a file. Mainly to supply gnuplot with datas.
          Obsoletes the "statsExtract.py" script from statistics, and much
        more reliable.
This commit is contained in:
Jean-Paul Chaput 2010-04-17 10:13:48 +00:00
parent b985e8c96f
commit 9a90f87c65
5 changed files with 296 additions and 3 deletions

View File

@ -34,6 +34,7 @@
crlcore/LefDefExtension.h crlcore/LefDefExtension.h
crlcore/Ioc.h crlcore/Ioc.h
crlcore/NetExtension.h crlcore/NetExtension.h
crlcore/Measures.h
crlcore/RoutingGauge.h crlcore/RoutingGauge.h
crlcore/RoutingLayerGauge.h crlcore/RoutingLayerGauge.h
crlcore/CellGauge.h crlcore/CellGauge.h
@ -92,7 +93,9 @@
toolbox/RoutingPads.cpp toolbox/RoutingPads.cpp
) )
set ( vst_driver_cpps alliance/vst/VstDriver.cpp ) set ( vst_driver_cpps alliance/vst/VstDriver.cpp )
set ( properties_cpps properties/NetExtension.cpp ) set ( properties_cpps properties/NetExtension.cpp
properties/Measures.cpp
)
# set ( liberty_cpps liberty/CellPath.cpp # set ( liberty_cpps liberty/CellPath.cpp
# liberty/LuTableTemplate.cpp # liberty/LuTableTemplate.cpp
# liberty/LibertyTechnology.cpp # liberty/LibertyTechnology.cpp

View File

@ -0,0 +1,157 @@
// -*- C++ -*-
//
// This file is part of the Coriolis Software.
// Copyright (c) UPMC/LIP6 2008-2010, All Rights Reserved
//
// ===================================================================
//
// $Id$
//
// x-----------------------------------------------------------------x
// | |
// | C O R I O L I S |
// | Alliance / Hurricane Interface |
// | |
// | Author : Jean-Paul Chaput |
// | E-mail : Jean-Paul.Chaput@lip6.fr |
// | =============================================================== |
// | C++ Header : "./Measures.h" |
// | *************************************************************** |
// | U p d a t e s |
// | |
// x-----------------------------------------------------------------x
#ifndef __STATISTICS_PROPERTY__
#define __STATISTICS_PROPERTY__
#include <string>
#include <sstream>
#include <iomanip>
#include <map>
#include "hurricane/Property.h"
namespace Hurricane {
class DBo;
}
namespace CRL {
using Hurricane::Name;
using Hurricane::StandardPrivateProperty;
using Hurricane::DBo;
// -------------------------------------------------------------------
// Class : "CRL::BaseMeasure".
class BaseMeasure {
public:
inline BaseMeasure ( const Name& );
virtual ~BaseMeasure ();
inline const Name& getName () const;
virtual std::string toString () const = 0;
private:
Name _name;
};
BaseMeasure::~BaseMeasure () {}
inline BaseMeasure::BaseMeasure ( const Name& name ) : _name(name) {}
inline const Name& BaseMeasure::getName () const { return _name; }
template<typename Data>
class Measure : public BaseMeasure {
public:
inline Measure ( const Name&, const Data& );
inline const Data& getData () const;
inline void setData ( const Data& );
virtual std::string toString () const;
private:
Data _data;
};
template<typename Data>
inline Measure<Data>::Measure ( const Name& name, const Data& data )
: BaseMeasure(name), _data(data) { }
template<typename Data>
inline const Data& Measure<Data>::getData () const { return _data; }
template<typename Data>
inline void Measure<Data>::setData ( const Data& data ) { _data=data; }
template<typename Data>
std::string Measure<Data>::toString () const
{ std::ostringstream s; s << std::fixed << std::setprecision(2) << _data; return s.str(); }
class MeasuresSet : public std::map<Name,BaseMeasure*> {
public:
~MeasuresSet ();
std::string toStringHeaders ( const std::vector<Name>& ) const;
std::string toStringDatas ( const std::vector<Name>& ) const;
};
// -------------------------------------------------------------------
// Class : "CRL::MeasuresDatas".
class MeasuresDatas {
public:
MeasuresDatas ();
public:
MeasuresSet _measures;
};
// -------------------------------------------------------------------
// Class : "CRL::Measures".
class Measures {
public:
typedef StandardPrivateProperty<MeasuresDatas> Extension;
public:
template<typename Data> friend void addMeasure ( DBo*, const Name&, const Data& );
template<typename Data> friend const Measure<Data>* getMeasure ( const DBo*, const Name& );
static const MeasuresSet* get ( const DBo* );
private:
static Extension* _getOrCreate ( DBo* );
};
template<typename Data>
static void addMeasure ( DBo* object, const Name& name, const Data& data )
{
Measures::Extension* extension = Measures::_getOrCreate ( object );
extension->getValue()._measures.insert ( std::make_pair(name,new Measure<Data>(name,data)) );
}
template<typename Data>
static Measure<Data>* getMeasure ( DBo* object, const Name& name )
{
Measures::Extension* extension = Measures::_getOrCreate ( object );
MeasuresSet::iterator imeasure = extension->getValue()._measures.find(name);
if ( imeasure != extension->getValue()._measures.end() )
return static_cast< Measure<Data>* >( (*imeasure).second );
return NULL;
}
} // End of CRL namespace.
#endif // __STATISTICS_PROPERTY__

View File

@ -2,7 +2,7 @@
// -*- C++ -*- // -*- C++ -*-
// //
// This file is part of the Coriolis Software. // This file is part of the Coriolis Software.
// Copyright (c) UPMC/LIP6 2008-2008, All Rights Reserved // Copyright (c) UPMC/LIP6 2008-2010, All Rights Reserved
// //
// =================================================================== // ===================================================================
// //

View File

@ -0,0 +1,133 @@
// -*- C++ -*-
//
// This file is part of the Coriolis Software.
// Copyright (c) UPMC/LIP6 2008-2010, All Rights Reserved
//
// ===================================================================
//
// $Id$
//
// x-----------------------------------------------------------------x
// | |
// | C O R I O L I S |
// | Alliance / Hurricane Interface |
// | |
// | Author : Jean-Paul Chaput |
// | E-mail : Jean-Paul.Chaput@lip6.fr |
// | =============================================================== |
// | C++ Module : "./Measures.cpp" |
// | *************************************************************** |
// | U p d a t e s |
// | |
// x-----------------------------------------------------------------x
#include <iomanip>
#include "hurricane/Error.h"
#include "hurricane/DBo.h"
#include "crlcore/Measures.h"
namespace CRL {
using std::string;
using std::vector;
using std::ostringstream;
using std::setw;
using std::right;
using Hurricane::Error;
using Hurricane::ForEachIterator;
const char* MissingMeasures = "Measures::%s(): %s missing the Measures extension.";
template<>
Name StandardPrivateProperty<MeasuresDatas>::_name = "CRL::Measures";
// -------------------------------------------------------------------
// Class : "CRL::MeasuresSet".
MeasuresSet::~MeasuresSet ()
{
iterator imeasure = begin();
for ( ; imeasure != end() ; ++imeasure )
delete (*imeasure).second;
}
string MeasuresSet::toStringHeaders ( const vector<Name>& names ) const
{
ostringstream out;
out << "#";
for ( size_t i=0 ; i<names.size() ; ++i ) {
const_iterator imeasure = find ( names[i] );
if ( imeasure == end() ) continue;
const BaseMeasure* measure = (*imeasure).second;
out << setw(8) << right << measure->getName();
}
return out.str();
}
string MeasuresSet::toStringDatas ( const vector<Name>& names ) const
{
ostringstream out;
out << " ";
for ( size_t i=0 ; i<names.size() ; ++i ) {
const_iterator imeasure = find ( names[i] );
if ( imeasure == end() ) continue;
const BaseMeasure* measure = (*imeasure).second;
out << setw(8) << right << measure->toString();
}
return out.str();
}
// -------------------------------------------------------------------
// Class : "CRL::MeasuresDatas".
MeasuresDatas::MeasuresDatas ()
: _measures()
{ }
// -------------------------------------------------------------------
// Class : "CRL::Measures".
const MeasuresSet* Measures::get ( const DBo* object )
{
Extension* extension = Extension::get ( object );
if ( extension != NULL )
return &extension->getValue()._measures;
return NULL;
}
Measures::Extension* Measures::_getOrCreate ( DBo* object )
{
Extension* extension = Extension::get ( object );
if ( extension == NULL ) {
extension = Extension::create ();
object->put ( extension );
}
return extension;
}
} // End of CRL namespace.

View File

@ -2,7 +2,7 @@
// -*- C++ -*- // -*- C++ -*-
// //
// This file is part of the Coriolis Software. // This file is part of the Coriolis Software.
// Copyright (c) UPMC/LIP6 2008-2008, All Rights Reserved // Copyright (c) UPMC/LIP6 2008-2010, All Rights Reserved
// //
// =================================================================== // ===================================================================
// //