#!/usr/bin/perl

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

package Net::ACL::Match;

use strict;
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::Match'
	if $class eq 'Net::ACL::Match';
}

## Public Object Methods ##

sub match
{
 my $this = shift;
 my $class = ref $this || $this;
 croak __PACKAGE__ . ' objects cannot match!'
	if $class eq __PACKAGE__;

 croak "$class should reimplement the match method inhireted from " . __PACKAGE__;
}

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

## POD ##

=pod

=head1 NAME

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

=head1 SYNOPSIS

    package Net::ACL::MatchMyPackage;

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

    sub new { ... };
    sub match { ... };


    package main;

    # Construction
    my $match = new Net::ACL::MatchMyPackage($args);

    # Accessor Methods
    $rc = $match->match(@data);
    $index = $match->index($index);

=head1 DESCRIPTION

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

It only has a constructor new() and two methods match() and index().
Both new and match should be replaced in any ancestor object.

=head1 CONSTRUCTOR

=over 4

=item new() - create a new Net::ACL::Match::Scalar object

    my $match = new Net::ACL::MatchMyPackage($args);

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

=back

=head1 ACCESSOR METHODS

=over 4

=item match()

This function should match the data given as arguments (one or more) with
the data passed to the constructor and return either ACL_MATCH or
ACL_NOMATCH as exported by the ":rc" exporter symbol of
Net::ACL::Rule.

=item index()

This function returns the argument number that matched any sub-class.
Called with an argument, the argument is used as the new value.

=back

=head1 SEE ALSO

Net::ACL::Rule, Net::ACL,
Net::ACL::Match::IP, Net::ACL::Match::Prefix,
Net::ACL::Match::List, Net::ACL::Match::Scalar,
Net::ACL::Match::Regexp, Net::ACL::Match::Member

=head1 AUTHOR

Martin Lorensen <bgp@martin.lorensen.dk>

=cut

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