NAME
Class::MethodMapper - Abstract Class wrapper for AutoLoader
SYNOPSIS
BEGIN {
@MMDerived::ISA = qw(Class::MethodMapper
Exporter AutoLoader);
}
sub new {
my $class = shift;
my @args = @_;
my $self = Class::MethodMapper->new();
bless $self, $class;
my %map = (
'time_style' => {
'type' => 'parameter',
'doc' => 'How recording duration is decided',
'domain' => 'enum',
'options' => [qw(track prompt fixed click_stop deadman)],
'value' => 'prompt',
},
'iter_plan' => {
'type' => 'volatile',
'doc' => 'Currently active plan for iteration: perl code.',
'value' => 'play; color("yellow"); hold(0.75); color("red"); '
. 'record; color;' , # see FestVox::ScriptLang
},
);
$self->set_map(%map);
$self->set(@args) if @args;
$self;
}
DESCRIPTION
Class::MethodMapper takes a hash of hashes and creates get() and set() methods, with (some) validation, for the maps listed. Generally, a parameter
is something that can be saved and restored, whereas a volatile
is not serialized at save-time.
CONSTRUCTORS
BUILT-IN METHODS
- set_map(%map)
-
Sets the complete map for this object. See FestVox::InitMap for a good example of a method map; it is the big one that FestVox::PointyClicky itself uses. This should be generalized to let you set which map, as
get_map()
below. - get_map($type)
-
Get the map of a particular type, e.g.
parameter
. Note that the object itself is the top-level (complete) map, since Class::MethodMapper writes into variables in the object of the same name; the 'map' itself is just the variables of thattype
. - delete_map(@mapnames)
-
Delete the mapping for each variable in
@mapnames
. - get_meta('type', 'var')
-
Get the
meta
data of a given type for a named variable in th method map.type e.g. 'volatile', 'parameter' doc some human-readable string do describe this value current value; useful for initialization domain e.g. 'enum' or 'ref' options if domain is 'enum', an array reference of allowed values if domain is 'ref', 'ARRAY', 'HASH' or the name of a class.
- set_meta('type', 'var', value)
-
Just what you would think. Sets the
meta
variabletype
ofvar
tovalue
. - set('var' => 'value')
-
Set the variable
var
to the value'value'
. Checks ifvar
is in the method map, and complains if it is not. Does basic type checking if themeta
variabledomain
is defined.This means it checks if the value is an element in the array reference in
options
ifdomain
is 'enum' and checks if the value is indeed a reference of the specified type ifdomain
is 'ref' - get('var')
-
Return the value of 'var' if it is defined and in the method map.
- save('type', \&callback, @args)
-
loops over all the keys that have type 'type' and calls
&$callback ($self, $key, $value, @args);
for each of them, where $key is the value of each key and $value is the hashref for its value.
- save_config ('filename')
-
saves all 'parameter' type key/value pairs to 'filename'
- (\&callback, @args)
-
loads earlier saved values of the object keys back by calling
&$callback ($self, @args);
it expects the callback to return a ($key, $value) list. keeps looping till the callback function returns an undefined key.
- restore_config ('filename')
-
loads values from the file 'filename', which is in the format that save_config writes out.
- var()
-
var
itself is promoted to method status; if given no argument, it is considered aget()
, and if given argument(s), it is considered aset()
. Thus, if you had a parameter calledactive
in the method map, Class::MethodMapper would use AutoLoader to create aactive()
method (if ever called), so that$self-
active> would return the current value, and$self-
active(1)> would set it to1
.
BUGS
Terribly underdocumented.
AUTHOR
Copyright (c) 2000 Kevin A. Lenzo and Alan W Black, Carnegie Mellon Unversity.