our
$VERSION
= 0.004_000;
package
RPerl::DataStructure::SSENumberPair::method;
package
sse_number_pair::method;
use
parent -norequire,
qw(RPerl::DataStructure::SSENumberPair::method)
;
package
constant_sse_number_pair::method;
use
parent -norequire,
qw(RPerl::DataStructure::SSENumberPair::method)
;
package
sse_number_pair;
sub
new_from_singleton_duplicate {
{
my
sse_number_pair::method
$RETURN_TYPE
};
(
my
number
$single
) =
@ARG
;
my
sse_number_pair
$retval
= RPerl::DataStructure::SSENumberPair::new(
'sse_number_pair'
);
$retval
->[0] =
$single
;
$retval
->[1] =
$single
;
return
$retval
;
}
sub
new_from_pair {
{
my
sse_number_pair::method
$RETURN_TYPE
};
(
my
number
$pair_0
,
my
number
$pair_1
) =
@ARG
;
my
sse_number_pair
$retval
= RPerl::DataStructure::SSENumberPair::new(
'sse_number_pair'
);
$retval
->[0] =
$pair_0
;
$retval
->[1] =
$pair_1
;
return
$retval
;
}
package
constant_sse_number_pair;
sub
new_from_singleton_duplicate {
{
my
constant_sse_number_pair::method
$RETURN_TYPE
};
(
my
number
$single
) =
@ARG
;
my
constant_sse_number_pair
$retval
= RPerl::DataStructure::SSENumberPair::new(
'constant_sse_number_pair'
);
$retval
->[0] =
$single
;
$retval
->[1] =
$single
;
return
$retval
;
}
sub
new_from_pair {
{
my
constant_sse_number_pair::method
$RETURN_TYPE
};
(
my
number
$pair_0
,
my
number
$pair_1
) =
@ARG
;
my
constant_sse_number_pair
$retval
= RPerl::DataStructure::SSENumberPair::new(
'constant_sse_number_pair'
);
$retval
->[0] =
$pair_0
;
$retval
->[1] =
$pair_1
;
return
$retval
;
}
'+'
=> \
&sse_add
,
'-'
=> \
&sse_sub
,
'*'
=> \
&sse_mul
,
'/'
=> \
&sse_div
;
sub
sse_add {
(
my
$argument_left
,
my
$argument_right
,
my
$arguments_swap
) =
@ARG
;
if
(not(
ref
$argument_left
) or not(
$argument_left
->isa(
'RPerl::DataStructure::SSENumberPair'
))) {
croak
'Attempt to perform SSE addition on non-SSE data '
.
q{'}
.
$argument_left
.
q{'}
.
', croaking'
;
}
if
(not(
ref
$argument_right
) or not(
$argument_right
->isa(
'RPerl::DataStructure::SSENumberPair'
))) {
croak
'Attempt to perform SSE addition on non-SSE data '
.
q{'}
.
$argument_right
.
q{'}
.
', croaking'
;
}
my
sse_number_pair
$retval
= sse_number_pair->new();
$retval
->[0] =
$argument_left
->[0] +
$argument_right
->[0];
$retval
->[1] =
$argument_left
->[1] +
$argument_right
->[1];
return
$retval
;
}
sub
sse_sub {
(
my
$argument_left
,
my
$argument_right
,
my
$arguments_swap
) =
@ARG
;
if
(not(
ref
$argument_left
) or not(
$argument_left
->isa(
'RPerl::DataStructure::SSENumberPair'
))) {
croak
'Attempt to perform SSE subtraction on non-SSE data '
.
q{'}
.
$argument_left
.
q{'}
.
', croaking'
;
}
if
(not(
ref
$argument_right
) or not(
$argument_right
->isa(
'RPerl::DataStructure::SSENumberPair'
))) {
croak
'Attempt to perform SSE subtraction on non-SSE data '
.
q{'}
.
$argument_right
.
q{'}
.
', croaking'
;
}
my
sse_number_pair
$retval
= sse_number_pair->new();
if
(
$arguments_swap
) {
$retval
->[0] =
$argument_right
->[0] -
$argument_left
->[0];
$retval
->[1] =
$argument_right
->[1] -
$argument_left
->[1];
}
else
{
$retval
->[0] =
$argument_left
->[0] -
$argument_right
->[0];
$retval
->[1] =
$argument_left
->[1] -
$argument_right
->[1];
}
return
$retval
;
}
sub
sse_mul {
(
my
$argument_left
,
my
$argument_right
,
my
$arguments_swap
) =
@ARG
;
if
(not(
ref
$argument_left
) or not(
$argument_left
->isa(
'RPerl::DataStructure::SSENumberPair'
))) {
croak
'Attempt to perform SSE multiplication on non-SSE data '
.
q{'}
.
$argument_left
.
q{'}
.
', croaking'
;
}
if
(not(
ref
$argument_right
) or not(
$argument_right
->isa(
'RPerl::DataStructure::SSENumberPair'
))) {
croak
'Attempt to perform SSE multiplication on non-SSE data '
.
q{'}
.
$argument_right
.
q{'}
.
', croaking'
;
}
my
sse_number_pair
$retval
= sse_number_pair->new();
$retval
->[0] =
$argument_left
->[0] *
$argument_right
->[0];
$retval
->[1] =
$argument_left
->[1] *
$argument_right
->[1];
return
$retval
;
}
sub
sse_div {
(
my
$argument_left
,
my
$argument_right
,
my
$arguments_swap
) =
@ARG
;
if
(not(
ref
$argument_left
) or not(
$argument_left
->isa(
'RPerl::DataStructure::SSENumberPair'
))) {
croak
'Attempt to perform SSE division on non-SSE data '
.
q{'}
.
$argument_left
.
q{'}
.
', croaking'
;
}
if
(not(
ref
$argument_right
) or not(
$argument_right
->isa(
'RPerl::DataStructure::SSENumberPair'
))) {
croak
'Attempt to perform SSE division on non-SSE data '
.
q{'}
.
$argument_right
.
q{'}
.
', croaking'
;
}
my
sse_number_pair
$retval
= sse_number_pair->new();
if
(
$arguments_swap
) {
if
((
$argument_left
->[0] + 0) == 0) {
$retval
->[0] = RPerl::DataType::Scalar::INFINITY();
}
else
{
$retval
->[0] =
$argument_right
->[0] /
$argument_left
->[0];
}
if
((
$argument_left
->[1] + 0) == 0) {
$retval
->[1] = RPerl::DataType::Scalar::INFINITY();
}
else
{
$retval
->[1] =
$argument_right
->[1] /
$argument_left
->[1];
}
}
else
{
if
((
$argument_right
->[0] + 0) == 0) {
$retval
->[0] = RPerl::DataType::Scalar::INFINITY();
}
else
{
$retval
->[0] =
$argument_left
->[0] /
$argument_right
->[0];
}
if
((
$argument_right
->[1] + 0) == 0) {
$retval
->[1] = RPerl::DataType::Scalar::INFINITY();
}
else
{
$retval
->[1] =
$argument_left
->[1] /
$argument_right
->[1];
}
}
return
$retval
;
}
sub
new {
{
my
RPerl::DataStructure::SSENumberPair::method
$RETURN_TYPE
};
(
my
string
$class
) =
@ARG
;
my
RPerl::DataStructure::SSENumberPair
$retval
=
bless
[],
$class
;
return
$retval
;
}
1;