# Hook.pm
# Author: Noah Friedman <friedman@splode.com>
# Created: 1999-11-30
# Public domain.

# $Id: Hook.pm,v 1.4 2000/02/11 11:21:53 friedman Exp $

# Commentary:
# Code:

package NF::Hook;

use strict;

use Exporter;
use vars qw($VERSION @ISA @EXPORT);
$VERSION     = 1.00;
@ISA         = qw(Exporter);
@EXPORT      = qw(add_hook remove_hook run_hooks);


sub add_hook ($$;$)
{
  my ($hook, $elt, $appendp) = @_;

  for my $ent (@$hook)
    {
      return undef if ($ent eq $elt);
    }

  unshift @$hook, $elt unless ($appendp);
  push    @$hook, $elt if     ($appendp);
}

sub remove_hook ($$)
{
  my ($hook, $elt) = @_;
  my $i = 0;

  while ($i <= $#$hook)
    {
      splice (@$hook, --$i, 1)
        if ($hook->[$i++] eq $elt);
    }
}

sub run_hooks ($;@)
{
  my $hook = shift;
  for my $elt (@$hook)
    {
      &$elt (@_);
    }
}

1;

# Hook.pm ends here
