Otawa
0.10
|
The usual Feature class has as drawback to exhibit completely the processing of the feature and therefore, in C++, to require too much header file inclusion (like the default processor or the default handler structure). More...
#include <otawa/proc/SilentFeature.h>
Classes | |
class | Maker |
Public Member Functions | |
SilentFeature (cstring name, const AbstractMaker &maker) | |
Build a silent feature. More... | |
virtual void | process (WorkSpace *fw, const PropList &props=PropList::EMPTY) const |
This method is called, when a feature is not available, to provided a default implementation of the feature. More... | |
virtual void | check (otawa::WorkSpace *) const |
Check if the framework really implement the current feature. More... | |
virtual void | clean (otawa::WorkSpace *) const |
This method is called each time a feature is invalidated. More... | |
const Processor *& | defaultValue (void) const |
void | add (PropList &list, const Processor *&value) const |
Add a generic property to the given list with the current identifier. More... | |
void | add (PropList *list, const Processor *&value) const |
Add a generic property to the given list with the current identifier. More... | |
void | set (PropList &list, const Processor *&value) const |
Set the value of a generic property with the current identifier to the given list. More... | |
void | set (PropList *list, const Processor *&value) const |
Set the value of a generic property with the current identifier to the given list. More... | |
void | set (Property *prop, const Processor *&value) const |
elm::Option< Processor * > | get (const PropList &list) const |
const Processor *& | get (const PropList &list, const Processor *&def) const |
Get the value associated with a property matching the current identifier. More... | |
elm::Option< Processor * > | get (const PropList *list) const |
const Processor *& | get (const PropList *list, const Processor *&def) const |
Get the value associated with a property matching the current identifier. More... | |
const Processor *& | get (const Property *prop) const |
Processor *& | ref (PropList &list) const |
Processor *& | ref (PropList *list) const |
const Processor *& | use (const PropList &list) const |
Get the value matching the current identifier in the given list. More... | |
const Processor *& | use (const PropList *list) const |
Get the value matching the current identifier in the given list. More... | |
const Processor *& | value (const PropList &list) const |
For internal use only. More... | |
Ref< Processor *, Identifier > | value (PropList &list) const |
For internal use only. More... | |
const Processor *& | value (const PropList *list) const |
For internal use only. More... | |
Ref< Processor *, Identifier < Processor * > > | value (PropList *list) const |
For internal use only. More... | |
void | remove (PropList &list) const |
Remove the property with the current identifier from the given list. More... | |
void | remove (PropList *list) const |
Remove the property with the current identifier from the given list. More... | |
bool | exists (PropList &list) const |
Test if the given list contains a property with the current identifier. More... | |
bool | exists (PropList *list) const |
Test if the given list contains a property with the current identifier. More... | |
void | copy (PropList &list, Property *prop) |
void | copy (PropList *list, Property *prop) |
virtual Property * | copy (Property &prop) const |
Build a copy of the given property. More... | |
Property * | copy (Property *prop) const |
const Processor *& | operator() (const PropList &props) const |
Read the value in a functional way. More... | |
const Processor *& | operator() (const PropList *props) const |
Read the value in a functional way. More... | |
Ref< Processor *, Identifier < Processor * > > | operator() (PropList &props) const |
Read or write a property value in a functional way. More... | |
Ref< Processor *, Identifier < Processor * > > | operator() (PropList *props) const |
Read or write a property value in a functional way. More... | |
const Processor *& | operator() (Property *prop) const |
virtual void | print (elm::io::Output &out, const Property *prop) const |
Print the value of the given property (accordint the property matches the given identifier). More... | |
void | print (elm::io::Output &out) const |
Print the identifier. More... | |
void | print (elm::io::Output &output, const Property &prop) const |
virtual void | printFormatted (io::Output &out, const Property *prop) const |
Print the value of the given property in a formatted way, that is, possibly to perform re-scanning after. More... | |
void | printFormatted (elm::io::Output &output, const Property &prop) const |
virtual const Type & | type (void) const |
Get the identifier of data linked with this property. More... | |
virtual void | fromString (PropList &props, const string &str) const |
Get value of an identifier from a string and store it in the given property list. More... | |
const string | name (void) const |
Get the string name of the identifier. More... | |
virtual bool | equals (const Property *prop1, const Property *prop2) const |
Test if two properties are equal. More... | |
virtual void | serialize (Property *prop, elm::serial2::Serializer &serializer) |
Serialize the workspace to the current serializer. More... | |
virtual Property * | unserialize (elm::serial2::Unserializer &unserializer) |
Unserialize the workspace to the current unserializer. More... | |
Property * | getProp (const AbstractIdentifier *id) const |
Find a property by its identifier. More... | |
void | setProp (Property *prop) |
Set the property in the property list removing any double. More... | |
void | setProp (const AbstractIdentifier *id) |
void | removeProp (const AbstractIdentifier *id) |
Remove a property matching the given identifier. More... | |
void | removeProp (const AbstractIdentifier &id) |
Property * | extractProp (const AbstractIdentifier *id) |
Remove a property matching the given identifier and return it. More... | |
Property * | extractProp (const AbstractIdentifier &id) |
Remove a property matching the given identifier and return it. More... | |
void | addProp (Property *prop) |
Add property to the list without checking of duplication. More... | |
void | removeAllProp (const AbstractIdentifier *id) |
Remove all the properties matching the given identifier. More... | |
bool | hasProp (const AbstractIdentifier &id) const |
Test if the property list contains a property matching the given identifier. More... | |
void | clearProps (void) |
Remove all properties from the list. More... | |
void | addProps (const PropList &props) |
Add all properties from the given property list, in a reverse order. More... | |
Static Public Member Functions | |
static AbstractIdentifier * | find (const string &name) |
Find an abstract identifier by its name. More... | |
Static Public Attributes | |
static AbstractFeature & | null = _null |
Null value for features. More... | |
static const PropList | EMPTY |
This is an empty proplist for convenience. More... | |
Protected Member Functions | |
void | initProps (Property *prop, VarArg &args) |
Add the properties found in the arguments (list of Property * ended by null) to the identifier properties. More... | |
Private Attributes | |
const AbstractMaker & | _maker |
The usual Feature class has as drawback to exhibit completely the processing of the feature and therefore, in C++, to require too much header file inclusion (like the default processor or the default handler structure).
This class allow to fix this using default processor builder that does not need to be included in the feature declaration. The constructor of this class requires as parameter the name of the feature and a factory class for the processor, SilentFeature::AbstractMaker. Usually, the factory object is implemented used the SilenfFeature::Maker, that is a template but does only need to be declared in the source file. Consequently, the header file declaring the feature is no more overloaded with the inclusion of the default processor.
Here is an example of use, first the header file "my_feature.h":
Then, the source is defined as:
|
inline |
Build a silent feature.
name | Name of the feature. |
maker | Factory to build the default processor. |
|
inlineinherited |
Add a generic property to the given list with the current identifier.
list | List to add to. |
value | Value of the property. |
|
inlineinherited |
Add a generic property to the given list with the current identifier.
list | List to add to. |
value | Value of the property. |
|
inherited |
Add property to the list without checking of duplication.
prop | Property to add. |
References otawa::Property::_next.
Referenced by otawa::Identifier< T >::add(), otawa::ast::ASTInfo::ASTInfo(), otawa::Identifier< otawa::arm::Info * >::copy(), otawa::AbstractIdentifier::initProps(), otawa::ContextualProperty::make(), otawa::script::Script::makeConfig(), otawa::ccg::Builder::processLBlockSet(), otawa::ipet::ILPSystemGetter::processWorkSpace(), otawa::Identifier< T >::ref(), otawa::ContextualProperty::ref(), and otawa::ContextualProperty::refProps().
|
inherited |
Add all properties from the given property list, in a reverse order.
props | Property list to clone. |
References copy(), otawa::PropList::head, and otawa::Property::next().
Referenced by otawa::display::CFGDrawer::CFGDrawer(), otawa::display::GraphVizGraph::GraphVizGraph(), otawa::ParamFeature::instantiate(), otawa::Manager::loadXML(), otawa::display::GraphVizGraph::newEdge(), otawa::display::GraphVizGraph::newNode(), otawa::PropList::operator=(), otawa::Process::Process(), otawa::PropList::PropList(), otawa::display::GraphVizItem::setProps(), otawa::VirtualBasicBlock::VirtualBasicBlock(), and otawa::VirtualCFG::VirtualCFG().
|
inlinevirtual |
Check if the framework really implement the current feature.
If not, it throws a ProcessorException. This method is only usually called for debugging purpose as its execution is often very large.
Implements otawa::AbstractFeature.
|
inlinevirtual |
This method is called each time a feature is invalidated.
In this case, the feature must removed all properties put on the workspace.
Implements otawa::AbstractFeature.
|
inherited |
Remove all properties from the list.
References otawa::Property::next().
Referenced by otawa::PSTBuilder::getVCFG(), otawa::PropList::operator=(), otawa::display::GraphVizItem::setProps(), otawa::PropList::~PropList(), and otawa::WorkSpace::~WorkSpace().
References otawa::AbstractIdentifier::copy().
Referenced by otawa::AbstractIdentifier::copy().
|
inlineinherited |
|
inlineinherited |
|
inlinevirtualinherited |
Build a copy of the given property.
prop | Property to copy. |
Reimplemented from otawa::AbstractIdentifier.
|
inlineinherited |
|
virtualinherited |
Test if two properties are equal.
prop1 | First property. |
prop2 | Second property. |
|
inlineinherited |
Test if the given list contains a property with the current identifier.
list | List to look in. |
|
inlineinherited |
Test if the given list contains a property with the current identifier.
list | List to look in. |
|
inherited |
Remove a property matching the given identifier and return it.
Caller is responsible of the management of the obtained property.
id | Identifier of the property to extract. |
References otawa::Property::_next, and otawa::Property::next().
Referenced by otawa::script::Script::makeConfig().
|
inlineinherited |
Remove a property matching the given identifier and return it.
Caller is responsible of the management of the obtained property.
id | Identifier of the property to extract. |
References otawa::PropList::extractProp().
Referenced by otawa::PropList::extractProp().
|
staticinherited |
Find an abstract identifier by its name.
name | Name of the looked identifier. |
Referenced by otawa::ProcessorPlugin::getIdentifier(), and otawa::Application::run().
|
virtualinherited |
Get value of an identifier from a string and store it in the given property list.
props | Property list to store result into. |
str | String to get value from. |
Reimplemented from otawa::AbstractIdentifier.
|
inlineinherited |
|
inlineinherited |
Get the value associated with a property matching the current identifier.
If the property is not found, return the default value.
list | List to look in. |
def | Default value. |
|
inlineinherited |
|
inlineinherited |
Get the value associated with a property matching the current identifier.
If the property is not found, return the default value.
list | List to look in. |
def | Default value. |
|
inlineinherited |
|
inherited |
Find a property by its identifier.
id | Identifier of the property to find. |
References otawa::Property::_next, and otawa::Property::next().
Referenced by otawa::Identifier< otawa::arm::Info * >::exists(), otawa::ContextualProperty::exists(), otawa::ContextualProperty::find(), otawa::Identifier< T >::get(), otawa::PropList::hasProp(), otawa::ContextualProperty::make(), otawa::ParamFeature::matches(), otawa::ImmutableRef< T, I >::print(), otawa::ContextualProperty::print(), otawa::Identifier< T >::ref(), otawa::ContextualProperty::ref(), otawa::ContextualProperty::refProps(), otawa::Identifier< T >::set(), otawa::Identifier< T >::use(), and otawa::Identifier< T >::value().
|
inlineinherited |
Test if the property list contains a property matching the given identifier.
id | Property identifier to look for. |
References otawa::PropList::getProp().
Referenced by otawa::ipet::BasicConstraintsBuilder::addEntryConstraint(), otawa::Monitor::configure(), otawa::ImmutableRef< T, I >::exists(), and otawa::Manager::setVerbosity().
Add the properties found in the arguments (list of Property * ended by null) to the identifier properties.
prop | First property. |
args | Null-ended properties to scan. |
References otawa::PropList::addProp(), and elm::VarArg::next().
Referenced by otawa::AbstractIdentifier::AbstractIdentifier().
|
inlineinherited |
Get the string name of the identifier.
References otawa::AbstractIdentifier::nam.
Referenced by otawa::AlternativeProcessor::AlternativeProcessor(), otawa::AbstractIdentifier::fromString(), otawa::ParamProcessor::instantiate(), otawa::UnsupportedFeatureException::message(), otawa::UnavailableFeatureException::message(), and otawa::WorkSpace::provide().
|
inlineinherited |
Read the value in a functional way.
props | Property list to read the property from. |
|
inlineinherited |
Read the value in a functional way.
props | Property list to read the property from. |
|
inlineinherited |
Read or write a property value in a functional way.
The returned value may be read (automatic conversion to the value) or written (using operator = to set the value or += to add a new value at the property list.
props | Property list to read the property from. |
|
inlineinherited |
Read or write a property value in a functional way.
The returned value may be read (automatic conversion to the value) or written (using operator = to set the value or += to add a new value at the property list.
props | Property list to read the property from. |
|
inlineinherited |
|
inherited |
|
inlineinherited |
References otawa::AbstractIdentifier::print().
Referenced by otawa::AbstractIdentifier::print().
|
inlinevirtualinherited |
Print the value of the given property (accordint the property matches the given identifier).
It is an error to call this method with a property matching a different identifier.
Use the print() method of a property instead.
Reimplemented from otawa::AbstractIdentifier.
|
inlineinherited |
References otawa::AbstractIdentifier::printFormatted().
Referenced by otawa::AbstractIdentifier::printFormatted().
|
inlinevirtualinherited |
Print the value of the given property in a formatted way, that is, possibly to perform re-scanning after.
For example, string are quoted and special character escaped.
out | Output to use. |
prop | Property to display. |
Reimplemented from otawa::AbstractIdentifier.
|
virtual |
This method is called, when a feature is not available, to provided a default implementation of the feature.
fw | Framework to work on. |
props | Property list configuration. |
Implements otawa::AbstractFeature.
References _maker, otawa::AbstractMaker::make(), and otawa::Processor::process().
|
inlineinherited |
|
inlineinherited |
|
inlineinherited |
Remove the property with the current identifier from the given list.
list | List to remove from. |
|
inlineinherited |
Remove the property with the current identifier from the given list.
list | List to remove from. |
|
inherited |
Remove all the properties matching the given identifier.
id | Identifier of properties to remove. |
References otawa::Property::_next, and otawa::Property::next().
Referenced by otawa::LoopUnroller::unroll().
|
inherited |
Remove a property matching the given identifier.
id | Identifier of the property to remove. |
References otawa::Property::_next, and otawa::Property::next().
Referenced by otawa::PSTBuilder::buildTree(), otawa::BBRemover< T >::clean(), otawa::display::CFGOutput::processCFG(), otawa::SubCFGBuilder::processWorkSpace(), otawa::Ref< T, I >::remove(), and otawa::ContextualPath::Ref< T >::remove().
|
inlineinherited |
References otawa::PropList::removeProp().
Referenced by otawa::PropList::removeProp().
|
virtualinherited |
Serialize the workspace to the current serializer.
In the default implementation, do nothing.
prop | Property containing the value to serialize. |
serializer | Serializer to serialize to. |
|
inlineinherited |
Set the value of a generic property with the current identifier to the given list.
list | List to set in. |
value | Value to set. |
|
inlineinherited |
Set the value of a generic property with the current identifier to the given list.
list | List to set in. |
value | Value to set. |
|
inlineinherited |
|
inherited |
Set the property in the property list removing any double.
prop | Property to set. |
References otawa::Property::_next, otawa::Property::id(), and otawa::Property::next().
|
inlineinherited |
References otawa::PropList::setProp().
Referenced by otawa::PropList::setProp().
|
inlinevirtualinherited |
Get the identifier of data linked with this property.
It may return Type::no_type ever meaning that the identifier does not support type system or that it is just a flag without associated data.
Reimplemented from otawa::AbstractIdentifier.
|
virtualinherited |
Unserialize the workspace to the current unserializer.
In the default implementation, do nothing.
unserializer | Unserializer to unserialize to. |
|
inlineinherited |
Get the value matching the current identifier in the given list.
Cause a run-time abort if the property is not available.
list | List to look in. |
|
inlineinherited |
Get the value matching the current identifier in the given list.
Cause a run-time abort if the property is not available.
list | List to look in. |
|
inlineinherited |
For internal use only.
Referenced by otawa::ActualFeature::~ActualFeature().
|
inlineinherited |
For internal use only.
|
inlineinherited |
For internal use only.
|
inlineinherited |
For internal use only.
|
private |
Referenced by process().
|
staticinherited |
This is an empty proplist for convenience.
|
staticinherited |
Null value for features.
Referenced by otawa::FeatureRequirer::FeatureRequirer(), and otawa::FeatureRequirer::require().