The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
use strict;

package ObjStore::AV::QSet;
use base 'ObjStore::AV';
use vars qw($VERSION);
use Carp;
use ObjStore ':ADV';

$VERSION = '0.01';

*add = \&ObjStore::AV::PUSH;

sub exists {
    my ($o,$e) = @_;
    defined $o->where($e);
}

sub where {
    my ($o, $e) = @_;
    return if !blessed $e;
    my $x;
    for (my $z=0; $z < $o->FETCHSIZE(); $z++) {
	my $e2 = $o->[$z];
	do { $x = $z; last } if $e2 == $e;
    }
    $x;
}

sub remove {
    my ($o, $e) = @_;
    for (my $z=0; $z < $o->FETCHSIZE(); $z++) {
	while ($e == $o->[$z]) {
	    $o->SPLICE($z,1);
	}
    }
    $e;
}

1;
__END__;

=head1 NAME

  ObjStore::AV::QSet - index-style interface with an array representation

=head1 SYNOPSIS

  my $set = ObjStore::AV::QSet->new($near, $size);

  $set->add($myobject);

  $set->remove($myobject);

=head1 DESCRIPTION

Implements an API very similar to C<ObjStore::Index>, except with an
array implementation.  Elements are unsorted.  Add is the same as
push, but <remove> scans the entire set.

=cut