#!/usr/bin/perl

# $Id: Set.pm,v 1.11 2003/06/06 18:45:02 unimlo Exp $

package Net::ACL::Set;

use strict;
use Exporter;
use vars qw( $VERSION @ISA );

## Inheritance and Versioning ##

@ISA     = qw( Exporter );
$VERSION = '0.07';

## Module Imports ##

use Carp;

## Public Class Methods ##

sub new
{
 my $proto = shift;
 my $class = ref $proto || $proto;
 croak 'Cannot construct object of abstract class Net::ACL::Set'
	if $class eq 'Net::ACL::Set';
}

## Public Object Methods ##

sub set
{
 my $this = shift;
 my $class = ref $this || $this;
 croak 'Net::ACL::Set objects cannot set!'
	if $class eq 'Net::ACL::Set';

 croak "$class should reimplement the set method inhireted from Net::ACL::Set";
}

sub index
{
 my $this = shift;
 $this->{_index} = @_ ? shift : $this->{_index};
 return $this->{_index};
}

## POD ##

=pod

=head1 NAME

Net::ACL::Set - Abstract parent class of Set-classes

=head1 SYNOPSIS

    package Net::ACL::SetMyPackage;

    use Net::ACL::Set;
    @ISA     = qw( Net::ACL::Set );

    sub new { ... };
    sub set { ... };


    package main;

    # Construction
    my $set = new Net::ACL::SetMyPackage($args);

    # Accessor Methods
    @data = $set->set(@data);

=head1 DESCRIPTION

This is an abstract parent class for all Net::ACL::Set*
classes. It is used by the Net::ACL::Rule object.

It only has a constructor new() and a method set(). Both should be
replaced in any ancestor object.

=head1 CONSTRUCTOR

=over 4

=item 4 new() - Constructor of Net::ACL::Set* objects

    my $set = new Net::ACL::SetMyPackage($args);

This is the constructor for Net::ACL::Set::* objects.
It returns a reference to the newly created object.
It takes one argument, which should describe what to set.

=back

=head1 ACCESSOR METHODS

=over 4

=item set()

This function should modify the data given as arguments (one or more) with
the data passed to the constructor and return the modified data.

=back

=head1 SEE ALSO

Net::ACL::Rule, Net::ACL,
Net::ACL::Set::Scalar, Net::ACL::Set::Union, Net::ACL::Set::Add

=head1 AUTHOR

Martin Lorensen <bgp@martin.lorensen.dk>

=cut

## End Package Net::ACL::Set ##
 
1;