Object.pm revision 7c478bd95313f5f23a4c958a745db2134aa03244
3a634bfc9a31448c742688c603d3e76b83b041a0Vikram Hegde#
3a634bfc9a31448c742688c603d3e76b83b041a0Vikram Hegde# CDDL HEADER START
3a634bfc9a31448c742688c603d3e76b83b041a0Vikram Hegde#
3a634bfc9a31448c742688c603d3e76b83b041a0Vikram Hegde# The contents of this file are subject to the terms of the
3a634bfc9a31448c742688c603d3e76b83b041a0Vikram Hegde# Common Development and Distribution License, Version 1.0 only
3a634bfc9a31448c742688c603d3e76b83b041a0Vikram Hegde# (the "License"). You may not use this file except in compliance
3a634bfc9a31448c742688c603d3e76b83b041a0Vikram Hegde# with the License.
3a634bfc9a31448c742688c603d3e76b83b041a0Vikram Hegde#
3a634bfc9a31448c742688c603d3e76b83b041a0Vikram Hegde# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
3a634bfc9a31448c742688c603d3e76b83b041a0Vikram Hegde# or http://www.opensolaris.org/os/licensing.
3a634bfc9a31448c742688c603d3e76b83b041a0Vikram Hegde# See the License for the specific language governing permissions
3a634bfc9a31448c742688c603d3e76b83b041a0Vikram Hegde# and limitations under the License.
3a634bfc9a31448c742688c603d3e76b83b041a0Vikram Hegde#
3a634bfc9a31448c742688c603d3e76b83b041a0Vikram Hegde# When distributing Covered Code, include this CDDL HEADER in each
3a634bfc9a31448c742688c603d3e76b83b041a0Vikram Hegde# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
3a634bfc9a31448c742688c603d3e76b83b041a0Vikram Hegde# If applicable, add the following below this CDDL HEADER, with the
3a634bfc9a31448c742688c603d3e76b83b041a0Vikram Hegde# fields enclosed by brackets "[]" replaced with your own identifying
3a634bfc9a31448c742688c603d3e76b83b041a0Vikram Hegde# information: Portions Copyright [yyyy] [name of copyright owner]
3a634bfc9a31448c742688c603d3e76b83b041a0Vikram Hegde#
3a634bfc9a31448c742688c603d3e76b83b041a0Vikram Hegde# CDDL HEADER END
3a634bfc9a31448c742688c603d3e76b83b041a0Vikram Hegde#
9e986f0e5fb5e5ac09af90cd3b63f7836d983f9dFrank Van Der Linden# Copyright 2002-2003 Sun Microsystems, Inc. All rights reserved.
9e986f0e5fb5e5ac09af90cd3b63f7836d983f9dFrank Van Der Linden# Use is subject to license terms.
3a634bfc9a31448c742688c603d3e76b83b041a0Vikram Hegde#
3a634bfc9a31448c742688c603d3e76b83b041a0Vikram Hegde#ident "%Z%%M% %I% %E% SMI"
3a634bfc9a31448c742688c603d3e76b83b041a0Vikram Hegde#
3a634bfc9a31448c742688c603d3e76b83b041a0Vikram Hegde# Object.pm contains perl code for exacct object manipulation.
3a634bfc9a31448c742688c603d3e76b83b041a0Vikram Hegde#
3a634bfc9a31448c742688c603d3e76b83b041a0Vikram Hegde
3a634bfc9a31448c742688c603d3e76b83b041a0Vikram Hegderequire 5.6.1;
3a634bfc9a31448c742688c603d3e76b83b041a0Vikram Hegdeuse strict;
3a634bfc9a31448c742688c603d3e76b83b041a0Vikram Hegdeuse warnings;
3a634bfc9a31448c742688c603d3e76b83b041a0Vikram Hegde
3a634bfc9a31448c742688c603d3e76b83b041a0Vikram Hegdepackage Sun::Solaris::Exacct::Object;
3a634bfc9a31448c742688c603d3e76b83b041a0Vikram Hegde
3a634bfc9a31448c742688c603d3e76b83b041a0Vikram Hegdeour $VERSION = '%I%';
3a634bfc9a31448c742688c603d3e76b83b041a0Vikram Hegdeuse XSLoader;
3a634bfc9a31448c742688c603d3e76b83b041a0Vikram HegdeXSLoader::load(__PACKAGE__, $VERSION);
3a634bfc9a31448c742688c603d3e76b83b041a0Vikram Hegde
3a634bfc9a31448c742688c603d3e76b83b041a0Vikram Hegdeour (@EXPORT_OK, %EXPORT_TAGS, @_Constants);
3a634bfc9a31448c742688c603d3e76b83b041a0Vikram Hegde@EXPORT_OK = @_Constants;
3a634bfc9a31448c742688c603d3e76b83b041a0Vikram Hegde%EXPORT_TAGS = (CONSTANTS => \@_Constants, ALL => \@EXPORT_OK);
3a634bfc9a31448c742688c603d3e76b83b041a0Vikram Hegde
3a634bfc9a31448c742688c603d3e76b83b041a0Vikram Hegdeuse base qw(Exporter);
3a634bfc9a31448c742688c603d3e76b83b041a0Vikram Hegdeuse Sun::Solaris::Exacct::Catalog qw(:CONSTANTS);
3a634bfc9a31448c742688c603d3e76b83b041a0Vikram Hegde
3a634bfc9a31448c742688c603d3e76b83b041a0Vikram Hegde#
3a634bfc9a31448c742688c603d3e76b83b041a0Vikram Hegde# Class methods
3a634bfc9a31448c742688c603d3e76b83b041a0Vikram Hegde#
3a634bfc9a31448c742688c603d3e76b83b041a0Vikram Hegde
3a634bfc9a31448c742688c603d3e76b83b041a0Vikram Hegde#
3a634bfc9a31448c742688c603d3e76b83b041a0Vikram Hegde# Dump an exacct object to the specified filehandle, or STDOUT by default.
3a634bfc9a31448c742688c603d3e76b83b041a0Vikram Hegde#
3a634bfc9a31448c742688c603d3e76b83b041a0Vikram Hegdesub dump
3a634bfc9a31448c742688c603d3e76b83b041a0Vikram Hegde{
3a634bfc9a31448c742688c603d3e76b83b041a0Vikram Hegde # Fettle parameters.
3a634bfc9a31448c742688c603d3e76b83b041a0Vikram Hegde my ($class, $obj, $fh, $indent) = @_;
3a634bfc9a31448c742688c603d3e76b83b041a0Vikram Hegde $fh ||= \*STDOUT;
3a634bfc9a31448c742688c603d3e76b83b041a0Vikram Hegde $indent ||= 0;
3a634bfc9a31448c742688c603d3e76b83b041a0Vikram Hegde my $istr = ' ' x $indent;
3a634bfc9a31448c742688c603d3e76b83b041a0Vikram Hegde
3a634bfc9a31448c742688c603d3e76b83b041a0Vikram Hegde # Check for undef values.
3a634bfc9a31448c742688c603d3e76b83b041a0Vikram Hegde if (! defined($obj)) {
3a634bfc9a31448c742688c603d3e76b83b041a0Vikram Hegde print $fh ($istr, "UNDEFINED_VALUE\n");
3a634bfc9a31448c742688c603d3e76b83b041a0Vikram Hegde return;
3a634bfc9a31448c742688c603d3e76b83b041a0Vikram Hegde }
3a634bfc9a31448c742688c603d3e76b83b041a0Vikram Hegde
3adb2334459b30a605b8d375be6c3f3a3ec9ef38Vikram Hegde # Deal with items.
3a634bfc9a31448c742688c603d3e76b83b041a0Vikram Hegde my @cat = $obj->catalog()->value();
3a634bfc9a31448c742688c603d3e76b83b041a0Vikram Hegde if ($obj->type() == &EO_ITEM) {
3a634bfc9a31448c742688c603d3e76b83b041a0Vikram Hegde printf $fh ("%sITEM\n%s Catalog = %s|%s|%s\n",
3a634bfc9a31448c742688c603d3e76b83b041a0Vikram Hegde $istr, $istr, @cat);
3a634bfc9a31448c742688c603d3e76b83b041a0Vikram Hegde $indent++;
50200e773f0242e336d032a7b43485e1bcfc9bfeFrank Van Der Linden my $val = $obj->value();
3a634bfc9a31448c742688c603d3e76b83b041a0Vikram Hegde
3a634bfc9a31448c742688c603d3e76b83b041a0Vikram Hegde # Recursively dump nested objects.
3a634bfc9a31448c742688c603d3e76b83b041a0Vikram Hegde if (ref($val)) {
3a634bfc9a31448c742688c603d3e76b83b041a0Vikram Hegde $class->dump($val, $fh, $indent);
3a634bfc9a31448c742688c603d3e76b83b041a0Vikram Hegde
3a634bfc9a31448c742688c603d3e76b83b041a0Vikram Hegde # Just print out items.
3a634bfc9a31448c742688c603d3e76b83b041a0Vikram Hegde } else {
3a634bfc9a31448c742688c603d3e76b83b041a0Vikram Hegde $val = unpack('H*', $val) if ($cat[0] == &EXT_RAW);
3a634bfc9a31448c742688c603d3e76b83b041a0Vikram Hegde printf $fh ("%s Value = %s\n", $istr, $val);
3a634bfc9a31448c742688c603d3e76b83b041a0Vikram Hegde }
3a634bfc9a31448c742688c603d3e76b83b041a0Vikram Hegde
3a634bfc9a31448c742688c603d3e76b83b041a0Vikram Hegde # Deal with groups.
e03dceed3deb85ad561202c77277e701f763fa13Vikram Hegde } else {
e03dceed3deb85ad561202c77277e701f763fa13Vikram Hegde printf $fh ("%sGROUP\n%s Catalog = %s|%s|%s\n",
e03dceed3deb85ad561202c77277e701f763fa13Vikram Hegde $istr, $istr, @cat);
9e986f0e5fb5e5ac09af90cd3b63f7836d983f9dFrank Van Der Linden $indent++;
9e986f0e5fb5e5ac09af90cd3b63f7836d983f9dFrank Van Der Linden foreach my $val ($obj->value()) {
3a634bfc9a31448c742688c603d3e76b83b041a0Vikram Hegde $class->dump($val, $fh, $indent);
3a634bfc9a31448c742688c603d3e76b83b041a0Vikram Hegde }
3a634bfc9a31448c742688c603d3e76b83b041a0Vikram Hegde printf $fh ("%sENDGROUP\n", $istr);
3a634bfc9a31448c742688c603d3e76b83b041a0Vikram Hegde }
3a634bfc9a31448c742688c603d3e76b83b041a0Vikram Hegde}
3a634bfc9a31448c742688c603d3e76b83b041a0Vikram Hegde
3a634bfc9a31448c742688c603d3e76b83b041a0Vikram Hegde#
3a634bfc9a31448c742688c603d3e76b83b041a0Vikram Hegde# Item subclass - establish inheritance.
3a634bfc9a31448c742688c603d3e76b83b041a0Vikram Hegde#
3a634bfc9a31448c742688c603d3e76b83b041a0Vikram Hegdepackage Sun::Solaris::Exacct::Object::Item;
3a634bfc9a31448c742688c603d3e76b83b041a0Vikram Hegdeuse base qw(Sun::Solaris::Exacct::Object);
3a634bfc9a31448c742688c603d3e76b83b041a0Vikram Hegde
3a634bfc9a31448c742688c603d3e76b83b041a0Vikram Hegde#
3a634bfc9a31448c742688c603d3e76b83b041a0Vikram Hegde# Group subclass - establish inheritance.
3a634bfc9a31448c742688c603d3e76b83b041a0Vikram Hegde#
3a634bfc9a31448c742688c603d3e76b83b041a0Vikram Hegdepackage Sun::Solaris::Exacct::Object::Group;
9e986f0e5fb5e5ac09af90cd3b63f7836d983f9dFrank Van Der Lindenuse base qw(Sun::Solaris::Exacct::Object);
9e986f0e5fb5e5ac09af90cd3b63f7836d983f9dFrank Van Der Linden
9e986f0e5fb5e5ac09af90cd3b63f7836d983f9dFrank Van Der Linden#
9e986f0e5fb5e5ac09af90cd3b63f7836d983f9dFrank Van Der Linden# Tied array used for holding a group's items.
9e986f0e5fb5e5ac09af90cd3b63f7836d983f9dFrank Van Der Linden#
50200e773f0242e336d032a7b43485e1bcfc9bfeFrank Van Der Lindenpackage Sun::Solaris::Exacct::Object::_Array;
50200e773f0242e336d032a7b43485e1bcfc9bfeFrank Van Der Lindenuse Carp;
50200e773f0242e336d032a7b43485e1bcfc9bfeFrank Van Der Linden
50200e773f0242e336d032a7b43485e1bcfc9bfeFrank Van Der Linden#
50200e773f0242e336d032a7b43485e1bcfc9bfeFrank Van Der Linden# Check the passed list of arguments are derived from ::Object
3a634bfc9a31448c742688c603d3e76b83b041a0Vikram Hegde#
3a634bfc9a31448c742688c603d3e76b83b041a0Vikram Hegdesub check_args
3a634bfc9a31448c742688c603d3e76b83b041a0Vikram Hegde{
3a634bfc9a31448c742688c603d3e76b83b041a0Vikram Hegde my @duff;
3a634bfc9a31448c742688c603d3e76b83b041a0Vikram Hegde foreach my $i (@_) {
3a634bfc9a31448c742688c603d3e76b83b041a0Vikram Hegde push(@duff, $i)
3a634bfc9a31448c742688c603d3e76b83b041a0Vikram Hegde if (! UNIVERSAL::isa($i, 'Sun::Solaris::Exacct::Object'));
3a634bfc9a31448c742688c603d3e76b83b041a0Vikram Hegde }
3a634bfc9a31448c742688c603d3e76b83b041a0Vikram Hegde if (@duff) {
3a634bfc9a31448c742688c603d3e76b83b041a0Vikram Hegde local $Carp::CarpLevel = 2;
3a634bfc9a31448c742688c603d3e76b83b041a0Vikram Hegde croak('"', join('", "', @duff), @duff == 1 ? '" is' : '" are',
3a634bfc9a31448c742688c603d3e76b83b041a0Vikram Hegde ' not of type Sun::Solaris::Exacct::Object');
3a634bfc9a31448c742688c603d3e76b83b041a0Vikram Hegde }
3a634bfc9a31448c742688c603d3e76b83b041a0Vikram Hegde}
3a634bfc9a31448c742688c603d3e76b83b041a0Vikram Hegde
3a634bfc9a31448c742688c603d3e76b83b041a0Vikram Hegde#
3a634bfc9a31448c742688c603d3e76b83b041a0Vikram Hegde# Tied hash access methods
3a634bfc9a31448c742688c603d3e76b83b041a0Vikram Hegde#
3a634bfc9a31448c742688c603d3e76b83b041a0Vikram Hegdesub TIEARRAY
50200e773f0242e336d032a7b43485e1bcfc9bfeFrank Van Der Linden{
3a634bfc9a31448c742688c603d3e76b83b041a0Vikram Hegde return(bless([], $_[0]));
3a634bfc9a31448c742688c603d3e76b83b041a0Vikram Hegde}
3a634bfc9a31448c742688c603d3e76b83b041a0Vikram Hegde
3a634bfc9a31448c742688c603d3e76b83b041a0Vikram Hegdesub FETCHSIZE
3a634bfc9a31448c742688c603d3e76b83b041a0Vikram Hegde{
3a634bfc9a31448c742688c603d3e76b83b041a0Vikram Hegde return(scalar(@{$_[0]}));
3a634bfc9a31448c742688c603d3e76b83b041a0Vikram Hegde}
3a634bfc9a31448c742688c603d3e76b83b041a0Vikram Hegde
3a634bfc9a31448c742688c603d3e76b83b041a0Vikram Hegdesub STORESIZE
3a634bfc9a31448c742688c603d3e76b83b041a0Vikram Hegde{
3a634bfc9a31448c742688c603d3e76b83b041a0Vikram Hegde $#{$_[0]} = $_[1] - 1;
50200e773f0242e336d032a7b43485e1bcfc9bfeFrank Van Der Linden}
50200e773f0242e336d032a7b43485e1bcfc9bfeFrank Van Der Linden
50200e773f0242e336d032a7b43485e1bcfc9bfeFrank Van Der Lindensub STORE
50200e773f0242e336d032a7b43485e1bcfc9bfeFrank Van Der Linden{
50200e773f0242e336d032a7b43485e1bcfc9bfeFrank Van Der Linden check_args($_[2]);
50200e773f0242e336d032a7b43485e1bcfc9bfeFrank Van Der Linden return($_[0]->[$_[1]] = copy_xs_ea_objects($_[2]));
3a634bfc9a31448c742688c603d3e76b83b041a0Vikram Hegde}
3a634bfc9a31448c742688c603d3e76b83b041a0Vikram Hegde
3a634bfc9a31448c742688c603d3e76b83b041a0Vikram Hegdesub FETCH
3a634bfc9a31448c742688c603d3e76b83b041a0Vikram Hegde{
3a634bfc9a31448c742688c603d3e76b83b041a0Vikram Hegde return($_[0]->[$_[1]]);
e03dceed3deb85ad561202c77277e701f763fa13Vikram Hegde}
3a634bfc9a31448c742688c603d3e76b83b041a0Vikram Hegde
50200e773f0242e336d032a7b43485e1bcfc9bfeFrank Van Der Lindensub CLEAR
3a634bfc9a31448c742688c603d3e76b83b041a0Vikram Hegde{
3a634bfc9a31448c742688c603d3e76b83b041a0Vikram Hegde @{$_[0]} = ();
3a634bfc9a31448c742688c603d3e76b83b041a0Vikram Hegde}
e03dceed3deb85ad561202c77277e701f763fa13Vikram Hegde
e03dceed3deb85ad561202c77277e701f763fa13Vikram Hegdesub POP
3a634bfc9a31448c742688c603d3e76b83b041a0Vikram Hegde{
50200e773f0242e336d032a7b43485e1bcfc9bfeFrank Van Der Linden return(pop(@{$_[0]}));
3a634bfc9a31448c742688c603d3e76b83b041a0Vikram Hegde}
3a634bfc9a31448c742688c603d3e76b83b041a0Vikram Hegde
3a634bfc9a31448c742688c603d3e76b83b041a0Vikram Hegdesub PUSH
3a634bfc9a31448c742688c603d3e76b83b041a0Vikram Hegde{
3a634bfc9a31448c742688c603d3e76b83b041a0Vikram Hegde my $a = shift(@_);
3a634bfc9a31448c742688c603d3e76b83b041a0Vikram Hegde check_args(@_);
3a634bfc9a31448c742688c603d3e76b83b041a0Vikram Hegde push(@$a, copy_xs_ea_objects(@_));
e03dceed3deb85ad561202c77277e701f763fa13Vikram Hegde}
e03dceed3deb85ad561202c77277e701f763fa13Vikram Hegde
9e986f0e5fb5e5ac09af90cd3b63f7836d983f9dFrank Van Der Lindensub SHIFT
e03dceed3deb85ad561202c77277e701f763fa13Vikram Hegde{
e03dceed3deb85ad561202c77277e701f763fa13Vikram Hegde return(shift(@{$_[0]}));
e03dceed3deb85ad561202c77277e701f763fa13Vikram Hegde}
9e986f0e5fb5e5ac09af90cd3b63f7836d983f9dFrank Van Der Linden
e03dceed3deb85ad561202c77277e701f763fa13Vikram Hegdesub UNSHIFT
9e986f0e5fb5e5ac09af90cd3b63f7836d983f9dFrank Van Der Linden{
9e986f0e5fb5e5ac09af90cd3b63f7836d983f9dFrank Van Der Linden my $a = shift(@_);
9e986f0e5fb5e5ac09af90cd3b63f7836d983f9dFrank Van Der Linden check_args($_[2]);
50200e773f0242e336d032a7b43485e1bcfc9bfeFrank Van Der Linden return(unshift(@$a, copy_xs_ea_objects(@_)));
50200e773f0242e336d032a7b43485e1bcfc9bfeFrank Van Der Linden}
e03dceed3deb85ad561202c77277e701f763fa13Vikram Hegde
e03dceed3deb85ad561202c77277e701f763fa13Vikram Hegdesub EXISTS
9e986f0e5fb5e5ac09af90cd3b63f7836d983f9dFrank Van Der Linden{
9e986f0e5fb5e5ac09af90cd3b63f7836d983f9dFrank Van Der Linden return(exists($_[0]->[$_[1]]));
e03dceed3deb85ad561202c77277e701f763fa13Vikram Hegde}
9e986f0e5fb5e5ac09af90cd3b63f7836d983f9dFrank Van Der Linden
9e986f0e5fb5e5ac09af90cd3b63f7836d983f9dFrank Van Der Lindensub DELETE
9e986f0e5fb5e5ac09af90cd3b63f7836d983f9dFrank Van Der Linden{
9e986f0e5fb5e5ac09af90cd3b63f7836d983f9dFrank Van Der Linden return(delete($_[0]->[$_[1]]));
9e986f0e5fb5e5ac09af90cd3b63f7836d983f9dFrank Van Der Linden}
9e986f0e5fb5e5ac09af90cd3b63f7836d983f9dFrank Van Der Linden
9e986f0e5fb5e5ac09af90cd3b63f7836d983f9dFrank Van Der Lindensub EXTEND
9e986f0e5fb5e5ac09af90cd3b63f7836d983f9dFrank Van Der Linden{
9e986f0e5fb5e5ac09af90cd3b63f7836d983f9dFrank Van Der Linden}
9e986f0e5fb5e5ac09af90cd3b63f7836d983f9dFrank Van Der Linden
50200e773f0242e336d032a7b43485e1bcfc9bfeFrank Van Der Lindensub SPLICE
9e986f0e5fb5e5ac09af90cd3b63f7836d983f9dFrank Van Der Linden{
9e986f0e5fb5e5ac09af90cd3b63f7836d983f9dFrank Van Der Linden my $a = shift(@_);
9e986f0e5fb5e5ac09af90cd3b63f7836d983f9dFrank Van Der Linden my $sz = scalar(@$a);
9e986f0e5fb5e5ac09af90cd3b63f7836d983f9dFrank Van Der Linden my $off = @_ ? shift(@_) : 0;
9e986f0e5fb5e5ac09af90cd3b63f7836d983f9dFrank Van Der Linden $off += $sz if $off < 0;
9e986f0e5fb5e5ac09af90cd3b63f7836d983f9dFrank Van Der Linden my $len = @_ ? shift : $sz - $off;
50200e773f0242e336d032a7b43485e1bcfc9bfeFrank Van Der Linden check_args(@_);
9e986f0e5fb5e5ac09af90cd3b63f7836d983f9dFrank Van Der Linden return(splice(@$a, $off, $len, copy_xs_ea_objects(@_)));
e03dceed3deb85ad561202c77277e701f763fa13Vikram Hegde}
e03dceed3deb85ad561202c77277e701f763fa13Vikram Hegde
9e986f0e5fb5e5ac09af90cd3b63f7836d983f9dFrank Van Der Linden1;
50200e773f0242e336d032a7b43485e1bcfc9bfeFrank Van Der Linden