22 #ifndef OTAWA_PROC_REGISTRATION_H_
23 #define OTAWA_PROC_REGISTRATION_H_
25 #include <elm/genstruct/SLList.h>
26 #include <elm/util/Initializer.h>
27 #include <elm/util/Version.h>
33 using namespace elm::genstruct;
37 class AbstractFeature;
38 namespace proc {
class declare; }
64 : _kind(kind), _feature(&feature) { }
66 : _kind(usage._kind), _feature(usage._feature) { }
68 { _kind = usage.
_kind; _feature = usage.
_feature;
return *
this; }
82 inline const string&
name(
void)
const {
return _name; }
86 virtual bool isFinal(
void)
const = 0;
93 void initialize(
void);
106 friend class declare;
122 virtual bool isFinal(
void)
const {
return false; }
130 { VARARG_BEGIN(args, tag) init(name, version, tag, args); VARARG_END }
132 { init(name, version, tag, args); }
134 virtual bool isFinal(
void)
const {
return false; }
142 { VARARG_BEGIN(args, tag) init(name, version, tag, args); VARARG_END }
144 { init(name, version, tag, args); }
146 virtual bool isFinal(
void)
const {
return true; }
187 : _name(name), _version(version), _base(0), _maker(0) { }
189 : _name(name), _version(version), _base(&base), _maker(0) { }
218 virtual bool isFinal(
void)
const;
const AbstractFeature & feature(void) const
Definition: Registration.h:71
string _name
Definition: Registration.h:203
init & config(AbstractIdentifier &id)
Definition: Registration.h:198
Iterator on the features used by the processor.
Definition: Registry.h:75
AbstractRegistration & base(void) const
Definition: Registration.h:84
AbstractMaker * no_maker
Special maker for "no processor available".
Definition: proc_Registry.cpp:406
const int config
Definition: Registration.h:48
Definition: Registration.h:151
virtual Processor * make(void) const
Build the registered processor.
Definition: Registration.h:121
SLList< FeatureUsage > features
Definition: Registration.h:114
Definition: Registration.h:52
Definition: Registration.h:57
Definition: Registration.h:119
Definition: Registration.h:55
AbstractMaker * _maker
Definition: Registration.h:208
string _name
Definition: Registration.h:110
Definition: Registration.h:59
init & provide(const AbstractFeature &feature)
Definition: Registration.h:192
Version _version
Definition: Registration.h:204
Abstract class to represent the registered processors.
Definition: Registration.h:80
Definition: Registration.h:138
const int end
Definition: Registration.h:42
Registration(void)
Default constructor.
Definition: Registration.h:140
virtual ~AbstractMaker(void)
Definition: Registration.h:153
Class to declare simple a processor.
Definition: Registration.h:213
init & maker(void)
Definition: Registration.h:200
FeatureUsage(void)
Definition: Registration.h:62
FeatureUsage & operator=(const FeatureUsage &usage)
Definition: Registration.h:67
AbstractMaker * null_maker
Special maker for a null processor.
Definition: proc_Registry.cpp:400
virtual ~AbstractRegistration(void)
Definition: Registration.h:99
init(string name, Version version, AbstractRegistration &base)
Definition: Registration.h:188
kind_t
Definition: Registration.h:54
Registration(cstring name, const Version &version, int tag,...)
Definition: Registration.h:141
const int provide
Definition: Registration.h:44
StringOption proc(command, 'p',"processor","used processor","path","")
FeatureUsage(const FeatureUsage &usage)
Definition: Registration.h:65
virtual Processor * make(void) const
Build the registered processor.
Definition: Registration.h:145
Definition: Registration.h:56
Represents a unique identifier used by the annotation system.
Definition: AbstractIdentifier.h:32
Inst::kind_t kind
Definition: odisasm.cpp:106
virtual bool isFinal(void) const
Definition: Registration.h:122
init & require(const AbstractFeature &feature)
Definition: Registration.h:190
The processor class is implemented by all code processor.
Definition: Processor.h:49
Template to make a processor from its class passed as template parameter.
Definition: Registration.h:160
kind_t
Allowed types for values: NONE represents nothing; REG is only used for addresses, and represents a register; VAL represents some values (either a constant or an interval); ALL is the Top element.
Definition: ClpValue.h:53
AbstractRegistration * _base
Definition: Registration.h:205
kind_t _kind
Definition: Registration.h:74
const int use
Definition: Registration.h:46
virtual bool isFinal(void) const
Definition: Registration.h:146
const Version & version(void) const
Get the version of the processor.
Definition: Registration.h:83
FeatureUsage(kind_t kind, const AbstractFeature &feature)
Definition: Registration.h:63
const int require
Definition: Registration.h:43
Property * make(const Identifier< T > &id, const T &v)
Definition: info.h:31
const int invalidate
Definition: Registration.h:45
init(string name, Version version)
Definition: Registration.h:186
AbstractRegistration * _base
Definition: Registration.h:112
SLList< AbstractIdentifier * > configs
Definition: Registration.h:113
const string & name(void) const
Get the name of the processor.
Definition: Registration.h:82
init & invalidate(const AbstractFeature &feature)
Definition: Registration.h:194
cstring name
Definition: odisasm.cpp:107
virtual Processor * make(void) const
Definition: Registration.h:162
const int base
Definition: Registration.h:47
const AbstractFeature * _feature
Definition: Registration.h:75
See Feature.
Definition: AbstractFeature.h:36
kind_t kind(void) const
Definition: Registration.h:70
init & base(AbstractRegistration &base)
Definition: Registration.h:199
Iterator on the configurations of a processor.
Definition: Registry.h:58
Registration(cstring name, const Version &version, int tag, VarArg &args)
Definition: Registration.h:143
Version _version
Definition: Registration.h:111
SLList< FeatureUsage > features
Definition: Registration.h:207
init & use(const AbstractFeature &feature)
Definition: Registration.h:196
IntFormat base(int base, IntFormat fmt)
Definition: Registration.h:171
Shortcut to create a feature with a maker (without the mess of SilentFeature).
Definition: AbstractFeature.h:51
Definition: Registration.h:58
SLList< AbstractIdentifier * > configs
Definition: Registration.h:206
AbstractMaker * _maker
Definition: Registration.h:220