[Bio] / FigKernelPackages / BerkTable.pm Repository:
ViewVC logotype

View of /FigKernelPackages/BerkTable.pm

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.2 - (download) (as text) (annotate)
Wed Sep 15 21:46:25 2010 UTC (9 years, 2 months ago) by olson
Branch: MAIN
CVS Tags: mgrast_dev_08112011, mgrast_dev_08022011, rast_rel_2014_0912, myrast_rel40, mgrast_dev_05262011, mgrast_dev_04082011, rast_rel_2010_0928, mgrast_version_3_2, mgrast_dev_12152011, mgrast_dev_06072011, rast_rel_2014_0729, mgrast_dev_02212011, rast_rel_2010_1206, mgrast_release_3_0, mgrast_dev_03252011, rast_rel_2011_0119, mgrast_release_3_0_4, mgrast_release_3_0_2, mgrast_release_3_0_3, mgrast_release_3_0_1, mgrast_dev_03312011, mgrast_release_3_1_2, mgrast_release_3_1_1, mgrast_release_3_1_0, mgrast_dev_04132011, mgrast_dev_04012011, myrast_33, rast_rel_2011_0928, mgrast_dev_04052011, mgrast_dev_02222011, mgrast_dev_10262011, HEAD
Changes since 1.1: +1 -1 lines
fix arg

package BerkTable;

# This is a SAS component.

#
# Copyright (c) 2003-2006 University of Chicago and Fellowship
# for Interpretations of Genomes. All Rights Reserved.
#
# This file is part of the SEED Toolkit.
#
# The SEED Toolkit is free software. You can redistribute
# it and/or modify it under the terms of the SEED Toolkit
# Public License.
#
# You should have received a copy of the SEED Toolkit Public License
# along with this program; if not write to the University of Chicago
# at info@ci.uchicago.edu or the Fellowship for Interpretation of
# Genomes at veronika@thefig.info or download a copy from
# http://www.theseed.org/LICENSE.TXT.
#



use strict;
use DB_File;
use Data::Dumper;

sub TIEHASH
{
    my($class, $file, %opts ) = @_;

    my $self = {
	file => $file,
	hash => {},
	tie => undef,
	results_as_list => 0,
	result_separator => "\n",
    };
    $self->{$_} = $opts{$_} for keys %opts;

    $self->{results_as_list} = 1 if $self->{-split_values};
    return bless $self, $class;
}

sub STORE
{
    my($self, $key, $val) = @_;
    $self->_ensure_tied();
    $self->{hash}->{$key} = $val;
}

sub FETCH
{
    my($self, $key) = @_;
    $self->_ensure_tied();
    my @res = $self->{tie}->get_dup($key);
    if ($self->{-split_values})
    {
	@res = map { [ split(/$;/, $_) ] } @res;
    }
    if ($self->{-results_as_list})
    {
	return \@res;
    }
    else
    {
	return join($self->{-result_separator}, @res);
    }
}

sub FIRSTKEY
{
    my($self) = @_;
    $self->_ensure_tied();
    my $a = scalar keys %{$self->{hash}};
    return each %{$self->{hash}};
}

sub NEXTKEY
{
    my($self) = @_;
    $self->_ensure_tied();
    return each %{$self->{hash}};
}

sub EXISTS
{
    my($self, $key) = @_;
    $self->_ensure_tied();
    return exists $self->{hash}->{$key};
}

sub DELETE
{
    my($self, $key) = @_;
    $self->_ensure_tied();
    return delete $self->{hash}->{$key};
}

sub SCALAR
{
    my($self, $key) = @_;
    $self->_ensure_tied();
    return scalar %{$self->{hash}->{$key}};
}

sub _ensure_tied
{
    my($self) = @_;
    if (!$self->{tie})
    {
	$self->{tie} = tie %{$self->{hash}}, 'DB_File', $self->{file}, O_RDONLY, 0, $DB_BTREE;
    }
}

1;

MCS Webmaster
ViewVC Help
Powered by ViewVC 1.0.3