### ### Copyright 2000-2007 University of Illinois Board of Trustees ### All rights reserved. ### ### PSGConf::Data::Integer - integer data type for PSGConf::Data ### ### Campus Information Technologies and Educational Services ### University of Illinois at Urbana-Champaign ### package PSGConf::Data::Integer; use strict; use integer; #use overload # '""' => 'get', ## '0+' => 'get', # '+' => 'numeric_add', # '=' => 'set', # 'eq' => 'equals', ## 'fallback' => 1 # ; use PSGConf::Data; our @ISA = qw(PSGConf::Data); ############################################################################### ### equals method (for conditional expressions) ############################################################################### sub equals { my ($self, $value) = @_; return $self->eq($value); } sub eq { my ($self, $value) = @_; # print "==> equals(" . ref($self) . "='$self->{'value'}', '$value')\n"; warn "comparing to \"$value\" when object is undefined\n" if ( ! defined $self->get() ); return ($self->get() == $value); } ############################################################################### ### not-equals method (for conditional expressions) ############################################################################### sub ne { my ($self, $value) = @_; warn "comparing to \"$value\" when object is undefined\n" if ( ! defined $self->get() ); return ($self->get() != $value); } ############################################################################### ### greater-than method (for conditional expressions) ############################################################################### sub gt { my ($self, $value) = @_; warn "comparing to \"$value\" when object is undefined\n" if ( ! defined $self->get() ); return ($self->get() > $value); } ############################################################################### ### less-than method (for conditional expressions) ############################################################################### sub lt { my ($self, $value) = @_; warn "comparing to \"$value\" when object is undefined\n" if ( ! defined $self->get() ); return ($self->get() < $value); } ############################################################################### ### less-than-or-equal-to method (for conditional expressions) ############################################################################### sub le { my ($self, $value) = @_; warn "comparing to \"$value\" when object is undefined\n" if ( ! defined $self->get() ); return ($self->get() <= $value); } ############################################################################### ### greater-than-or-equal-to method (for conditional expressions) ############################################################################### sub ge { my ($self, $value) = @_; warn "comparing to \"$value\" when object is undefined\n" if ( ! defined $self->get() ); return ($self->get() >= $value); } ############################################################################### ### set method ############################################################################### sub set { my ($self, $value) = @_; # print "==> Integer::set($value)\n"; die "non-scalar value specified for integer variable\n" if (ref($value)); ### Support the use of octal and hex format ### for numbers as well as decimal. if ( $value =~ m/^0x[0-9a-f]+$/i ) { $self->SUPER::set(hex($value)); } elsif ( $value =~ m/^0[0-7]+$/ ) { $self->SUPER::set(oct($value)); } elsif ( $value =~ m/^-?\d+$/) { $self->SUPER::set(int($value)); } else { die "non-numeric value specified for integer variable\n"; } } ############################################################################### ### add method ############################################################################### sub add { my ($self, $value) = @_; $self->set($self->get() + $value); } ############################################################################### ### subtract method ############################################################################### sub sub { my ($self, $value) = @_; $self->set($self->get() - $value); } ############################################################################### ### divide method ############################################################################### sub div { my ($self, $value) = @_; $self->set(int($self->get()) / $value); } ############################################################################### ### multiply method ############################################################################### sub mult { my ($self, $value) = @_; $self->set($self->get() * $value); } ############################################################################### ### increment method ############################################################################### sub incr { my ($self) = @_; $self->set($self->get()+1); } ############################################################################### ### decrement method ############################################################################### sub decr { my ($self) = @_; $self->set($self->get()-1); } ############################################################################### ### documentation ############################################################################### 1; __END__ =head1 NAME PSGConf::Data::Integer - integer data type class for PSGConf =head1 SYNOPSIS use PSGConf::Data::Integer; $psgconf->register_data( 'intobj' => PSGConf::Data::Integer->new() ); =head1 DESCRIPTION The B module provides a class that represents an integer value in an object so that it can be used with B. Its methods can be used to manipulate the encapsulated integer value from the B data store(s). The B class is derived from the B< class, but it defines/overrides the following methods: =over 4 =item set() Sets the object's value to the supplied value. The value must consist of only digit characters, with an optional leading "-" character to denote a negative value. =item add() Adds the supplied value to the object's value. =item sub() Subtracts the supplied value from the object's value. =item div() Divides the object's value by the supplied value. =item mult() Multiplies the object's value by the supplied value. =item incr() Increments the object's value by one. =item decr() Decrements the object's value by one. =item equals() Same as the eq() method. =item eq() Returns true if the object's value is equal to the supplied value. =item ne() Returns true if the object's value is not equal to the supplied value. =item gt() Returns true if the object's value is greater than the supplied value. =item lt() Returns true if the object's value is less than the supplied value. =item ge() Returns true if the object's value is greater than or equal to the supplied value. =item le() Returns true if the object's value is less than or equal to the supplied value. =back =head1 SEE ALSO L L L =cut