sub new {
# parameters:
# [$this],
# @attributes: tree, messageNum, messageText
my ($this, @attributes) = @_;
# "process" optional attributes
my %attributes = (
tree => undef,
messageNum => undef,
messageText => undef,
@attributes,
);
# assert for valid argument list
if ((keys %attributes) > 3) {
die "invalid argument list during function call!\n";
}
# assert mandatory parameters
my $tree = $attributes{tree};
my $messageNum = $attributes{messageNum};
my $messageText = $attributes{messageText};
if ((!defined($this)) || (!defined($tree)) || (!defined($messageNum))) {
die "invalid argument list during function call!\n";
}
####
sub new {
# parameters:
# [$this],
# @namedParameters: tree, messageNum, (messageText)
##### process parameters #####
my ($this, @namedParameters) = @_;
# process named parameters (with default values)
my ($tree, $messageNum, $messageText) = assertNamedParameters([
numNamedParameters => 3,
tree => undef,
messageNum => undef,
messageText => undef,
], \@namedParameters
);
# check mandatory paramters
assertValueIsDefined($this, $tree, $messageNum);
####
sub assertNamedParameters {
# parameters:
# $parametersRef, $argumentsRef
my ($parametersRef, $argumentsRef) = @_;
# check passed arguments
assertValueIsDefined($parametersRef, $argumentsRef);
# create parameter hash
my %parameters = (
@{$parametersRef},
@{$argumentsRef},
);
# get valid number of parameters
if (!exists($parameters{numNamedParameters})) {
assertThrowException(
"parameter key ('numNamedParameters') has not
been defined in passed parameter hash");
}
# get number of parameters
my $numNamedParameters = $parameters{numNamedParameters};
# assert for valid parameter count
if ($numNamedParameters < 1) {
assertThrowException(
"invalid number of parameters ($numNamedParameters) specified
(minimum is one parameter)");
}
# assert parameter list for valid parameter count
# (account for the numParameters key itself (!))
if ((keys %parameters) != ($numNamedParameters + 1)) {
assertThrowException(
"invalid number of parameters ($numNamedParameters) passed");
}
# return parameter values
my ($parameterName, $parameterValue, @parameterValues);
# retrieve each given parameter
# (skipping 'numParameters' key)
for (my $i = 1; $i <= $numNamedParameters; $i++) {
# retrieve parameter name from parameter list
# IN ORDER concerning given parameter list!
$parameterName = $parametersRef->[2*$i];
# get parameter value from parameter hash
$parameterValue = $parameters{$parameterName};
push(@parameterValues, $parameterValue);
}
return(@parameterValues);
}