/usr/local/CPAN/ObjStore-REP-Ring/ObjStore/REP/Ring.pm


use strict;
package ObjStore::REP::Ring;
use base 'DynaLoader';
use vars qw($VERSION);
$VERSION = '0.02';

__PACKAGE__->bootstrap($VERSION);

$ObjStore::SCHEMA{'ObjStore::REP::Ring'}->
    load($ObjStore::Config::SCHEMA_DBDIR."/REP-Ring-01.adb");

package ObjStore::REP::Ring::Index;
use Carp;
use ObjStore;

# [0] version
# [1] path
# [2] descending

sub configure {
    my $o = shift;
    my $c = _conf_slot($o);
    $c ||= (__PACKAGE__.'::Conf')->new($o, [1,[],0]);
    return $c if @_ == 0;
    my @conf = ref $_[0] ? %{$_[0]} : @_;
    while (@conf) {
	my ($k,$v) = splice @conf, 0, 2;
	if ($k eq 'path') {
	    $c->[1] = ObjStore::PathExam::Path->new($c, $v);
	} elsif ($k eq 'descending') {
	    $c->[2] = $v?1:0;
	} else {
	    carp "$o->configure: unknown parameter '$k' (ignored)";
	}
    }
    _conf_slot($o, $c);
}

sub index_path {
    my ($o) = @_;
    my $c = _conf_slot($o);
    $c? $c->[1] : undef;
}

package ObjStore::REP::Ring::Index::Conf;
use base 'ObjStore::AV';

sub POSH_PEEK {
    my ($c, $p) = @_;
    $p->o("(".$c->[1]->stringify().")");
}

1;